Пользователей: 2
Гостей: 595

» Подробно
Привет, гость!








Автор Сообщение
Artos
    
Посты: 4176
Откуда:
Возраст: 66
23-12-2010 16:37 GMT3 час. #1402966   
erlik
Универсального варианта врядли возможно добиться.
Можно и в самом теле определить - сепаратор одиночный стринг или таблица и ... в зависимости организовать внутренние подциклы.
Однако, в Сталкере скорее не это требуется, т.к. писать строки с кучей сепараторов разного вида вроде ка не стоит. А вот строки типа:
  section = key1:val2,key2:val2, ... ,keyN:valN
как раз требуются гораздо чаще ...


Gun12
Так ведь erlik в своем примере не умножал ничего, а напрямую выдавал в стоку лога. У меня это же ( collectgarbage("count") ) выдает именно в килобайтах, без каких-либо десятичных ...


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

отредактировал(а) Artos: 23-12-2010 16:45 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
23-12-2010 16:59 GMT3 час. #1402979   
Artos

Так erlik, насколько я понял, в SciТЕ прогоняет.
А в СТАЛКЕРЕ наверняка string.format стоит.

erlik
Кстати, если любые символы пунктуации должны быть разделителями (кроме "_" - используемого в строках), то применяй шаблон
'[%P%_]+'

отредактировал(а) Gun12: 23-12-2010 17:23 GMT3 час.

Не стань номинантом премии Дарвина.
Artos
    
Посты: 4176
Откуда:
Возраст: 66
23-12-2010 17:08 GMT3 час. #1402983   
Gun12
Тоже подозреваю, что прогонял в SciТЕ ...
А про нецелые - сам string.format не усекает стринг/число без спец.масок.
Ну да не важно, просто вновь задался вопросом, почему/для чего разрабы применяли двойной вызов 'collectgarbage("collect")' ... и до сих пор не понял.

Struck
Странный вопрос о практической ценности более быстрого кода перед медленным ...
Конфиги ты сразу таблицами писать можешь? Ведь приведен же пример распарсивания строки с патронами, что требуется для каждого ствола ...
Тот же кастомдата - уже стрингом нам дается ...
Если подобное встречается в циклах - то практическая ценность в устранении лагов.
При загрузке - сотни строк парсятся из конфигов -> получаешь более быструю загрузку.
И т.п. ...


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
23-12-2010 17:15 GMT3 час. #1402987   
Artos :
Дык, я написал просто "string.format", т.к. с телефона (лень набирать). Думал что модификаторы будут подразумеваться как само собой..


Не стань номинантом премии Дарвина.
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 48
23-12-2010 17:53 GMT3 час. #1403021   
Artos
Да, я в SCITE тестил. Попробовал использовать разрабовский вариант проверки занимаемой памяти (с двойным циклом очистки мусора)- результаты стали другими:

мой изначальный вариант:
--memory begin: 234.400390625
--memory end: 670.2294921875
--StrSplit= 0.016 сек
вариант Gun12
--memory begin:234.439453125
--memory end:479.26953125
--StrSplit_1= 0.015 сек
вариант Artos
--memory begin:234.439453125
--memory end:479.2939453125
--Parse_StrToTbl= 0.015
вариант АМК
--memory begin: 234.439453125
--memory end: 478.9521484375
--str_explode= 1.406 сек


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
psevdochel
    
Посты: 34
Откуда:
Возраст:
23-12-2010 18:09 GMT3 час. #1403031   
Здравтсвуйте! А как можно усадить НПС к примеру на стул ... покапался в обычных анимация, попробовал не получаеться он мимо стула садиться ... подгонять мне кажеться бесполезно, ибо сама анимация означает сидеть на корточках ... Заранее спасибо!

добавлено спустя 20 минут

И еще как можно прописать логику НПС в скрипте?

отредактировал(а) psevdochel: 23-12-2010 18:30 GMT3 час.

Artos
    
Посты: 4176
Откуда:
Возраст: 66
23-12-2010 19:21 GMT3 час. #1403077   
erlik
Теперь понятно: В первом твоем замере (изначальный пост) были оч.неясные для меня цифры. А это оказывается 'мусор' в твоем стеке. Теперь же более-менее встало на свои места. Твой изначальный вариант отжирает под себя прилично ... Вероятно табличка и цикл парсинга сепататоров виноваты, хотя и что-то многовато для них.
Ну а 'str_explode' хоть и не прожорлив на память, но тормоз оказывается оч.нехилый ...

У меня (на скорую руку) на практическом примере в моде для таблички в 2 десятка строк, каждая из трех элементов (число, стринг, сложный стринг) получилось:
  0.327 ms - для нового варианта (брал вариант от меня)
  0.412 ms - для модернизированного варианта 'str_explode', который использовал в сборке.
По памяти - не различимы, в пределах погрешности в 1 байт.


psevdochel
Анимация 'сидеть на стуле' есть в моде "Восстановление старого сюжета (Мод)" от Максим Р.. Он же про эту анимацию где-то месяц назад в этом топике давал пояснение ... листай/ищи ...

Логику НПС прописывают не в скрипте, а скриптом. Тоже дня три назад все варианты (скриптом/в конфиге/в алл.спавне) в топике разбирались.

отредактировал(а) Artos: 23-12-2010 19:32 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 48
23-12-2010 19:31 GMT3 час. #1403086   
Artos
Мой первый вариант действительно "прожорлив" - если передавать табличку с сепаратором\ сепараторами . Без нее результат расхода памяти идентичен варианту Gun12: memory end: 479.1435546875
Тестил функции на строке в 10000 слов - так заметнее разница. Сначала циклом склеивал строку, затем передавал ее как аргумент в функции разбора. А почему время такое?
Я замерял время начала работы функции (time = os.clock()) и вычитал его из времени завершения.

отредактировал(а) erlik: 23-12-2010 19:39 GMT3 час.

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Artos
    
Посты: 4176
Откуда:
Возраст: 66
23-12-2010 19:49 GMT3 час. #1403098   
erlik
Я использую для замера времени оп

отредактировал(а) Artos: 23-12-2010 20:06 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Mutantt33
    
Посты: 247
Откуда: МО
Возраст: 35
23-12-2010 20:04 GMT3 час. #1403111   
Если разбить лампы и перейти к диалогу с представителем О-сознания, то задание "найти монолит" засчитывается как проваленное.
Как сделать, чтобы проваливались при этом и удалялись из списка активных заданий не только это, но и все, что находятся в данный момент в ПДА игрока?


Веду стримы по STALKER - ссылка у меня в профиле! Заходи, брат.
Нажми чтобы скачать мой Add-on for S.T.A.L.K.E.R.
Artos
    
Посты: 4176
Откуда:
Возраст: 66
23-12-2010 20:24 GMT3 час. #1403136   
Mister Blonde
Для провалить: 'db.actor:set_task_state(id_state, sTask, iSubTask)'
А вот удалить ... это врядли, найдешь многие спасибо скажут.


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
23-12-2010 20:33 GMT3 час. #1403142   
Artos
Чё то не понял.
Зачем в :
local tXY,sNum = {},nil

Задавать :
sNum = nil
Достаточно и
local tXY = {}
Или я не в курсе всей задумки
Ещё нужно проверить что быстрее :
table.insert(tXY, tonumber(sNum))
или :

tXY[#tXY+1] = tonumber(sNum)
Хотя тут МАЛОразовый вызов =) (по барабану), а вот для больших циклов ещё вопрос, что быстрее?


Не стань номинантом премии Дарвина.
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 48
23-12-2010 20:38 GMT3 час. #1403150   
Gun12
Да там всего две цифры парсятся - из строки vid_mode 1024x768.
А объявление sNum действительно лишнее - в циклах существуют свои локальные переменные - и объявлять их дополнительно как локальные не требуется.


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Artos
    
Посты: 4176
Откуда:
Возраст: 66
23-12-2010 20:53 GMT3 час. #1403169   
Gun12
Строка: local tXY,sNum = {},nil --/ объявление переменных (таблица и заготовка для стринга).
В принципе достаточно и : local tXY,sNum = {}
или так:
local tXY = {}
local sNum

Ну а для чего объявлять? Как и что использует загрузчик-перехватчик мне не ведомо (пока), могу только предполагать.
Предпочитаю не экономить в сомнительных местах на строках/байтах ...
Искать подобных грабли (если они все же присутствуют) потом ой как нелегко ...

В данном случае скорость не важна, важна надежность.

отредактировал(а) Artos: 23-12-2010 21:00 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
23-12-2010 20:54 GMT3 час. #1403172   
erlik
Ясно. Ну раз уж там такая строка, т


Не стань номинантом премии Дарвина.
Artos
    
Посты: 4176
Откуда:
Возраст: 66
23-12-2010 21:03 GMT3 час. #1403183   
Gun12
Вначале сделал именно так (с %d), но ... тяга к универсальности (как и у erlik'а :-) ) пересилила.
Оставил пока как заготовку с использованием сепаратора для читалок и других подобных строк, где не только цифры могут встречаться.


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
23-12-2010 21:09 GMT3 час. #1403190   
Artos
В принципе действительно, сделать одну универсальную функцию, что бы и самому не путаться потом.


Не стань номинантом премии Дарвина.
Mehanik Yar
    
Посты: 469
Откуда: Уфа
Возраст:
23-12-2010 21:21 GMT3 час. #1403207   
Всем привет. Когда я в логике НПСа прописывают вот это
[smart_terrains]
none = true

то стоит ему появиться в онлайне, так игра вылетает с такой ошибкой.

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...\stalker - Зона поражения\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)


Из-за чего это так? Появилась такая фигня после того, как у этой карты появился свой гулаг.


psevdochel
    
Посты: 34
Откуда:
Возраст:
23-12-2010 21:28 GMT3 час. #1403218   
Вот заспавнил физический объект через all.spawn следующим образом:
[3702]
; cse_abstract properties
section_name = physic_object
name = bar__spas12
position = 116.666527,-4.398123,19.097536
direction = 0,-1.73339974880219,-0

; cse_alife_object properties
game_vertex_id = 1239
distance = 0
level_vertex_id = 34184
object_flags = 0xffffff3a

; cse_visual properties
visual_name = weapons\spas12\wpn_spas12

; cse_ph_skeleton properties

; cse_alife_object_physic properties
physic_type = 0x3
mass = 10


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


Alex-San
    
Посты: 1015
Откуда:
Возраст: 51
23-12-2010 21:35 GMT3 час. #1403225   
psevdochel
Координаты выше подними. Походу он у тя в стол воткнулся)

Mehanik Yar
Если ГЭ скрипт 20, значит ты в СВОИХ скриптах наколсячил. Небось логику отдельными файлом делал?


Mehanik Yar
    
Посты: 469
Откуда: Уфа
Возраст:
23-12-2010 21:37 GMT3 час. #1403227   
Да логика отдельным файлом. А как это влияет?

добавлено спустя 1 минуту

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

отредактировал(а) Mehanik Yar: 23-12-2010 21:39 GMT3 час.

Alex-San
    
Посты: 1015
Откуда:
Возраст: 51
23-12-2010 21:40 GMT3 час. #1403233   
Mehanik Yar
Файл _g.script обрабатывает другие скрипты. Ошибка не в нём а в обрабатываемых им скриптах. ТВОИХ скриптах) Запости тут, ктонить заценит.


erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 48
23-12-2010 21:42 GMT3 час. #1403235   
Artos
У меня тут банальный вопрос возник: если в файлах (разных) присутствует функции с одним и тем же именем, то каковы возможные коллизии? Я просто всегда считал, что это критично если функции находятся в одном файле (в SCITE например из двух одноименных функций выполняется только последняя по считыванию строк кода) - но тут возникла ситуация, что функции и находясь вроде в разных файлах тем не менее вроде как (как одна из возможных причин глюка) мешают друг другу.
Она их них просто не выполняется.
ЗЫ: поясню - проблема не у меня, а у людей которые совмещают со своим модом одну из моих очень старых разработок - и одна из функций(элементарная функция починки брони) у них не выполняется. Выяснилось что в моде присутствует ее одноименный дубликат - я им посоветовал переименовать одну из функций. Пока не знаю - помогло ли.


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Mutantt33
    
Посты: 247
Откуда: МО
Возраст: 35
23-12-2010 21:49 GMT3 час. #1403241   

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?

отредактировал(а) Mister Blonde: 23-12-2010 22:19 GMT3 час.

Веду стримы по STALKER - ссылка у меня в профиле! Заходи, брат.
Нажми чтобы скачать мой Add-on for S.T.A.L.K.E.R.
Artos
    
Посты: 4176
Откуда:
Возраст: 66
23-12-2010 22:21 GMT3 час. #1403262   
erlik
Помнится мы обсуждали преимущества использования префикса 'this.' перед вызовом функции из текущего модуля/скрипта. Пока при использовании этого способа, я не встречался с коллизиями из-за совпадающих имен функций неважно где.
Теоретически, наличие одноименных функций (о локальных функциях и речи нет) в разных скриптах (кроме конечно и с оговорками для _g.script) никак не должно вызывать коллизий. Не рекомендую размещать фунции и в db.script, хотя тут свои заморочки ...
Предполагаю все же у твоих знакомых причина затруднений в более очевидных ошибках, чем совпадение имен.
Порекомендуй им, если еще не справились, использовать 'this.' для локализации вызова. Если поможет - тогда нужна более подробная информация, чтобы хоть в какую то сторону копать, а не блуждать 'вообще' ...

Mister Blonde
Не люблю, когда кто-то берется за сложную (для себя) задачку и ... пытается переложить часть груза на других, оправдываясь своей 'слабостью' ... даже еще не сделав и пары шажков ...
Взялся за гуж не говори что не дюж. (поговорка)
Тебе дали направление. Простейший поиск по скриптам выдаст тебе несколько практических примеров использования указанного метода (set_task_state).
Очевидно, что момент когда проваливается твой исходный квест (ты даже его название пока не узнал) - и является моментом, когда нужно 'проваливать' и все остальные. 'Провалом' квестов занимается 'task_manager.script' и конфиги tasks_(LEVEL).xml. (см тэги ).
Какое имя у квеста с О-сознанием - мне искать и некогда и лень. Какие кветы тебе нужно проваливать - только тебе ведомо. Получить список активных квестов можно в том же 'task_manager'е.
Найдешь имя квеста, по способу откуда он 'проваливается' (менеджером или инфопоршнем) можно и дальше говорить ...


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Mutantt33
    
Посты: 247
Откуда: МО
Возраст: 35
23-12-2010 22:36 GMT3 час. #1403271   
Artos а я не люблю, когда кто-то давит авторитетом, превращает тему, основная цель которой - "Основная цель темы - помочь новичкам-модостроителям," (цитиру


Веду стримы по STALKER - ссылка у меня в профиле! Заходи, брат.
Нажми чтобы скачать мой Add-on for S.T.A.L.K.E.R.
Silver Raven
    
Посты: 415
Откуда:
Возраст:
23-12-2010 22:54 GMT3 час. #1403285   
Artos

Я тут пытался присоединить билдовский "Мёртвый город" адаптированный для фин

отредактировал(а) Stalker_Alex333: 23-12-2010 22:55 GMT3 час.

ksuxa
    
Посты: 118
Откуда: Гомель
Возраст: 27
23-12-2010 22:55 GMT3 час. #1403287   
люди, помогите плиз!!! может я и не теда обращаюсь, но как мне сделать неуязвимость, если у меня в сталкер новые уровни есть только эти папки:
bin
gamedata (причём в ней только shaders и textures)
mods (nlc и файлы nlc и nlc init)
resolutions (файлы 16х10, 16х9, 4х3, 5х4)
userdata nlc6 (в ней logs, savedgames, screenshots и файл user)

:-(


свободу не остановить!!!
Ma$ter
    
Посты: 477
Откуда: Tamboff
Возраст:
23-12-2010 23:38 GMT3 час. #1403304   
psevdochel
Поменяй direction

Stalker_Alex333
Ну так кинь шейдер... Или поищи как такой шейдер можно поправить(если ничего не получится, то возьми шейдер или на крайний случай весь Мертвый город из Народной солянки)


Знание assembler, C/C++, Pascal, Lua.
Alex-San
    
Посты: 1015
Откуда:
Возраст: 51
23-12-2010 23:48 GMT3 час. #1403314   
Ma$ter
А при чём тут солянка. МГ и так уже несколько версий есть, напрямую от картоделов. Мне Марконовская больше всего нравится с Гейминатора. Там же ещё несколько версий МГ есть, адаптированных под ТЧ.

ksuxa
Никак, забей.




Форумы Архив » Свалка Вопросы и ответы (старое по 29.01.11)


Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для
просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.

Использование материалов сайта возможно с разрешения администрации. Все права защищены. © 2004–2025 «Stalker-Portal.ru»