Пользователей: 0
Гостей: 982
Всего: 982

» Подробно
» Сегодня

Привет, гость!









Автор Сообщение
Artos
    
Посты: 4176
Откуда:
Возраст: 65
07-06-2011 19:27 GMT3 час. #1488753   
singapur22, Gun12
Сплошные респекты :-) ...
А вернемся от искусственного примера к реалиям и применим ка 'правильные' решения к практике!?

Например частенько в кодах игры применяется сбор в массив объектов (как делал тот же SkyLoader).
Возьмем более 'правильный' варант с занесением неких параметров непися в таблицу по ключу его игрового идентификатора, как обычно делается для:
  db.storage[idObj] = {...}
Теперь, учитывая то, что таблица может использоваться различными скриптами и в том числе некоторые поля обнуляться (как штатно для db.storage[idObj] = nil) сторонними скриптами так и объекты исчезать из игры, какова будет 'правильная' и оптимальная функция глобальной 'чистки' таблицы? ;-) (вопрос с подвохом!)
А точнее, какова должна быть 'правильная' таблица и методы работы с нею, чтобы ею можно было пользоваться в ассинхронном режиме и периодически (или автоматом) выполнять глобальные чистки от устаревших пустых полей?

отредактировал(а) Artos: 07-06-2011 19:47 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Strchi
    
Посты: 2581
Откуда: Уфа-Челябинск-Фритаун
Возраст:
07-06-2011 19:29 GMT3 час. #1488754   

# stalker_aGG--- :

# Strchi :
stalker_aGG--- game.graph либо не создан либо портаченый...
создай или пересоздай геймграф

Гейм граф есть я когда из Ле[Level editor] уровень вытошил тот гейм граф обьеденил с графом из ориганала тоесть мой из моего грава в оригиналльный граф вставил свой левл а он вот это пигшет когда на уровень новый загружает
Expression : cross_table().header().game_guid() == game_graph().header().guid()
Function : CAI_Space::load
File : E:\stalker\patch_1_0004\xr_3da\xrGame\ai_space.cpp
Line : 121
Description : graph doesn't correspond to the cross table

Люди кто знает помогите пожалусто!


"Graph doesn't" узе отношение имеет к геймграфу... в нем косяк!


Artos
    
Посты: 4176
Откуда:
Возраст: 65
07-06-2011 19:39 GMT3 час. #1488756   
Strchi, читаем правила топика:

4. отвечать на вопросы желательно достаточно развернуто, задевая все аспекты касающиеся конкретного вопроса
в твоих же ответах кроме 'намека' на нечто ... более ничего полезного. :-(
Если НЕ выдергивать из сообщения лога знакомых буковок - то можно более информативное заключение дать:
graph doesn't correspond to the cross table - невозможно создать общую таблицу графа, иными словами для полноты массива не хватает данных (вероятно пробелы в диапазонах гейм-вертексов для собираемых локаций).


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
07-06-2011 19:46 GMT3 час. #1488759   
Artos Задача изначально лежала по строго-индектированным таблицам, с чем собственно и работали.
А вот про смешанн**5002618d69873ce82a42** ("условие") then
table.insert(tbl, k)
end
end

for _,v in ipairs(tbl) do
db.storage[v] = nil
end[/code]


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

------------------------------------------------------

А точнее, какова должна быть 'правильная' таблица

Ты хочешь сказать, что тебе нужно, не только решение чистки, но и оптимальную конструкцию самой таблицы?

отредактировал(а) singapur22: 07-06-2011 19:54 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
07-06-2011 20:00 GMT3 час. #1488760   
singapur22
Ну изначально то как раз таблица у SkyLoader'а была 'свалкой объектов' без всякой индексации ...
Ну да не суть.
В моем предложении упор не столь на 'как добавить иль обнулить', а правильное и оптимальное ее использование и чистка.
В предложенном тобою варианте будет немало пустых полей после 'чистки' и если берем тот же db.storage, то немало вариантов из исходных кодов с:
if id=1,#db.storage do
  ...
end
или:
  local var = table.getn(db.storage[idObj].param)
будут выдавать далеко не всегда корректные значения

P.S. Вот когда зайдет речь об упомянутом мною 'подводном камне' - тогда всплывет вопрос о правильной структуре таблицы. Это скорее всего необходимо, если не будет найден вариант чистки 'обычной' структуры (например, для той же db.storage)


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
07-06-2011 20:11 GMT3 час. #1488771   
Artos #db.storage ??? Это ещё как? Таблица изначально не строго-индексирована (смешанная). А значит, данный оператор никогда не вернёт реальный размер таблицы.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
07-06-2011 20:26 GMT3 час. #1488784   
singapur22
table.getn(tbl) - близкий аналог оператора #tbl
Открываем например 'xr_attendant.script' строка 266:
  local size = table.getn (db.storage[self.st.leader_id].followers) :-)

Уточню более приближенно к практик


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
07-06-2011 20:31 GMT3 час. #1488790   
Artos Но если использовать строгую индексацию, и сохранять id в его значениях, то запрос объекта по его id будет достаточно сложным. Для каждого объекта придётся итерировать таблицу. А это, время. Что ещё более не желательно.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
07-06-2011 20:49 GMT3 час. #1488801   
singapur22
Упомяну про подводный камень. Т.к. отловить подобное на практике практически нереально, то конкретных подтвержденных случаев не имею, но есть подозрения, что порой все же возможно ...
Как известно игровые идентификаторы (ID) выдаются строго индавидуально и не могут дублироваться в игре. Это и является преимуществом их использования в качестве ключа при создании таблиц/массивов.
Идентификаторы порою освобождаются и ... выдаются вновь(!), т.к. выдается первый свободный идентификатор.
Возникает ситуация:
1. В массив запоминаем по ключу идентификатору объект (точнее линк/ссылку на его юзердату).
2. При удалении объекта из игры возникает рассинхронизация: запоминали клиентский объект, сервер удаляет серверный объект (т.е. клиентская юзердата еще в игре!) и может сразу выдать освободившийся идентификатор в игру совершенно иному заспавнившемуся объекту.
3. Как минумум возникает кратковременная ассинхронная ко всем скриптам коллизия наличия в таблице и ключа и устаревшей уже юзердаты и ... невозможность проверить достаточно однозначно отсутствие серверного объекта в данным идентификатором.

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


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Struck
    
Посты: 1946
Откуда:
Возраст:
07-06-2011 21:00 GMT3 час. #1488808   
как получить нпс с сидом при переборе db.storage?

я получал как alife:object(string), но выдавал nil когда айдишки сравнивал


Снова в строю.

l
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
07-06-2011 21:01 GMT3 час. #1488809   
Artos Можно создать отдельную функцию (или метод), производимый операцию alife():release() с очисткой db.storage от удаляемого объекта. Но в этом случае придётся править всю скриптовую систему, где используется данный метод. Но и это не решит проблему. Есть ещё один подводный камень. db.storage работает только с клиентскими объектами, а значит и при переходе онных в offline так же происходит кратковременная рассинхронизация.

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

Struck local obj = level_object_by_sid(sid) Определяет объект по его сиду, если онный находится в онлайн. Иначе возвращает nil.
К сведенью. Каждый объект в игре имеет как свой id, так и свой sid. Только sid, в отличии от id можно задать объекту заранее (принудительно). Проверить, задан объекту sid принудительно, или автоматом, можно сравнивая его со списом sid'ов в файле game_story_ids.ltx общеизвестными методами класса ini_file().

отредактировал(а) singapur22: 07-06-2011 21:10 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
07-06-2011 21:08 GMT3 час. #1488813   
singapur22
alife():release() - удаляет сервеный объект и задержка удаления клиентского объекта как минимум два периода апдейта актора (~40ms).
Сам то db.storage хранит не объекты в полях, а таблицы с параметрами, поэтому с этой таблицей попроще, только нилы подчищать для оптимизации (если есть желание у кого).
Вот учитывая и твои и мои 'нюансы' и еще не названные и призвал потрениоваться на создании и 'правильных' таблиц и 'правильных' функций работы с ними. :-)

P.S. и поправлю:

Каждый объект в игре имеет как свой id, так и свой sid.
Если id строго индивидуален и не может быть одинаковых у двух и более объектов, то sid, если он не присвоен 'ручками' (в конфигах иль иначе), то всегда един 4294967296 (-1). Т.е. образом не у каждого 'свой' эксклюзивный.
А в 'game_story_ids.ltx' во-первых, далеко не все sid'ы и это скорее массив соответствий числовых и тексовых меток ... для использования, например, тем же таск-менеджером.

отредактировал(а) Artos: 07-06-2011 21:17 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Struck
    
Посты: 1946
Откуда:
Возраст:
07-06-2011 21:11 GMT3 час. #1488814   
Помнил ведь что что-то было подобное, но писал local obj = level.object_by_sid(sid), спасибо за поправку.


Снова в строю.

l
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
07-06-2011 21:13 GMT3 час. #1488815   
Artos Ок. Поразмышляем на данную тему. Но чуть позже. А щас... Спать пора. Как никак, завтра на работу.

--//---------------------------------------------------

Если id строго индивидуален и не может быть одинаковых у двух и более объектов, то sid, если он не присвоен 'ручками' (в конфигах иль иначе), то всегда един 4294967296 (-1). Т.е. образом не у каждого 'свой' эксклюзивный.
Отнюдь, не всегда. Тестировал данную тему разносторонне, и не однократно происходило назначение различных sid. (Обычно в пределах 5000.) При спавне скриптом. Хотя, возможно это из-за кривости работы двигателя, в некоторых случаях.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
07-06-2011 21:14 GMT3 час. #1488818   
singapur22
Я и не тороплю. :-), вернемся конечно же позже.

P.S.

... и не однократно происходило назначение различных sid
Извини, но не поверю!
Присвоение сида (story_id) при спавне возможно только при спавне по секции из all.spawn'а, т.е. объекта, достаточно полно описанного в соотв.секции с назначением сида.
При обычном спавне всем объектам прописывается дефолтное w_s32(-1) и движок тут не при чем. За весь период юзания мною различных версий игры ни разу не ловил 'левых' сидов.

отредактировал(а) Artos: 07-06-2011 21:43 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
serega_zombi_stalker
    
Посты: 49
Откуда: Омутсити
Возраст: 26
07-06-2011 22:02 GMT3 час. #1488855   
Artos Кстати, escape_dialog.esc_unik_npc по статье вставил в info_portions.xml. В указанные строки и получилось:


storyline_eliminate_gunslinger
escape_dialog.esc_unik_npc


Что это за строки?


1. Вы сейчас в интернете
2. Вы на сайте stalker-portal
3. Вы читаете
5. Вы не заметили, что отсутствует пункт 4
6. Вы это проверили
7. Вы улыбаетесь
8. Поставь себе в подпись и нас будет больше
Struck
    
Посты: 1946
Откуда:
Возраст:
07-06-2011 22:06 GMT3 час. #1488858   
serega_zombi_stalker это инфопоршень который выдается при старте игры, вызывается если память не изменяет из апдейта актора, впринципе туда можно вписать все стартовые функции


Снова в строю.

l
Artos
    
Посты: 4176
Откуда:
Возраст: 65
07-06-2011 22:28 GMT3 час. #1488871   
serega_zombi_stalker
1. У меня нет никакого желания растолковывать азы. Различных строк в кодах ой как немало и заниматься объяснениями их у меня нет ни времени ни желания. Читай статьи, хотя ...
2. Нет так же желания выступать редактором и правщиком всевозможных статей, коих понаписано ой как немало и с ... ой каким качеством :-(

Почему-то автору, используемой тобою статьи, взбрело в голову вставлять тэги c вызовом функции в инфопоршни, кои для этого НЕ предназначены.
Вставь указанные тэги в диалог Сидоровичу и не морочь голову ни себе ни другим, как это сделал горе-автор статьи ...

Или:
Открой тот же 'escape_dialog.script' и вставь свою строку спавна в функцию:

function give_weapon_to_actor (trader, actor)
  dialogs.relocate_item_section(trader, "wpn_pm", "in")
  dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")
  dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")
  dialogs.relocate_item_section(trader, "wpn_knife", "in")
  alife():create("esc_unik_npc",vector():set(-218.20,-20.2,-145.63),35362,47)
end

и будет спавнится твой NPC при разговоре с Волком (одновременно с выдачей ГГ оружия).


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Struck
    
Посты: 1946
Откуда:
Возраст:
08-06-2011 01:12 GMT3 час. #1488928   
А как можно запустить в окошке по порядку текстуры(создать эффект видеоролика)?...пока вижу только выход делать динамическими статиками, спрашиваю в расчёте на то, что есть более рациональный способ.

В частности желательно разобрать пример на текстурах типа ui_pda_anims_0x.dds


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


Снова в строю.

l
SkyLoader
    
Посты: 755
Откуда: Москва
Возраст:
08-06-2011 01:26 GMT3 час. #1488930   
Artos, спс.

___________

Появились проблемы кое-какие:
1)У кого-нибудь работает нет-спавн монстров? У меня он вроде не обрабатывается. Тестировал на гражданских зомби.
2)Есть ли оригинальные методы поиска файла и дальнейшего получения пути? Или надо пользоваться методами длл от alpeta?


Хочешь работать нормально, работай один!
Strchi
    
Посты: 2581
Откуда: Уфа-Челябинск-Фритаун
Возраст:
08-06-2011 02:03 GMT3 час. #1488935   
Dark Scripter не обязательно годы) Я за 5 дней сделал полноценную эксперементальную снежную локацию... с нуля...


stalker_aGG---
    
Посты: 13
Откуда:
Возраст:
08-06-2011 07:59 GMT3 час. #1488978   
Ребята всем спс разобрался новая локация подключена.!
Есть ешо один (уровень как токо вышел из сдк я его тестил освишение хорошее) аа (вот как в сингл подключил к отстольным уровням сразу странное и не красвое стало освишение ) почему так и как исправить ? За рание спс

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


# Dark Scripter :
Strchi
На создание одной добротной локации одним человеком могут уйти годы.

:no) Я один в команде мапер но работаю нормально и локации хорошие выходят, и не тратил я на это многие годы а карты добротные как вы говорите, тестер одобрил - а маперством занимаюсь всего пол года!:ye)

отредактировал(а) stalker_aGG---: 08-06-2011 08:07 GMT3 час.

Не отпушу, стой догоню :):-G
Struck
    
Посты: 1946
Откуда:
Возраст:
08-06-2011 08:25 GMT3 час. #1488986   
stalker_aGG--- для того чтобы делать интересные и захватывающие локации не нужен стаж, а нужна фантазия

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


Снова в строю.

l
stalker_aGG---
    
Посты: 13
Откуда:
Возраст:
08-06-2011 09:51 GMT3 час. #1489022   

# Struck :

Согласен у меня сечас токо одна проблема сначал на локации хорошее освишение обьектов а как в в сингл запихаю сразу мерское становится аот не знаю что делать
:( если кто знает помогите плизззз !?


Не отпушу, стой догоню :):-G
killer2203
    
Посты: 54
Откуда:
Возраст: 26
08-06-2011 09:53 GMT3 час. #1489023   
Нашел на компе папку с gamedat`ой. Вспомнил, что это осталось от прошлого оп


да, да, да!
stalker_aGG---
    
Посты: 13
Откуда:
Возраст:
08-06-2011 09:56 GMT3 час. #1489024   

# killer2203 :
Нашел на компе папку с gamedat`ой. Вспомнил, что это осталось от прошлого оп


Не отпушу, стой догоню :):-G
Ma$ter
    
Посты: 477
Откуда: Tamboff
Возраст:
08-06-2011 11:44 GMT3 час. #1489069   

2)Есть ли оригинальные методы поиска файла и дальнейшего получения пути? Или надо пользоваться методами длл от alpeta?

Если нужно найти скрипт или конфиг - можно. А вот звуки и т.д. - нет


Знание assembler, C/C++, Pascal, Lua.
Gamer2
    
Посты: 1
Откуда:
Возраст: 40
08-06-2011 12:37 GMT3 час. #1489099   
Как добавить новый костюм


LOG2N
    
Посты: 3892
Откуда: Київ
Возраст: 27
08-06-2011 12:48 GMT3 час. #1489103   
Gamer2, для кого Google придумали? Вам сюда:
_http://stalkerin.gameru.net/wiki/index.php/%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D1%81%D1%82%D1%8E%D0%BC%D0%BE%D0%B2



TYOPA
    
Посты: 129
Откуда:
Возраст: 27
08-06-2011 14:25 GMT3 час. #1489151   
Создал ХУД модель оружия, экспортировал в СДК, устанавливая тип костей пол**5001618d69873ce82a42**ed: !Index !=-1, file P:\MagicFM_borland\FreeMagic\Source\Containment3D\MgcCont3dMinSphere.cpp, line 497[/code]

Знающие люди подскажите в чём дело и возможные пути решения.


S.T.A.L.K.E.R. Secret of the Zone: Gunslinger's Story. Prologue - разработка.


Форумы Архив » Свалка Модификации ТЧ, вопросы и ответы (старое, по 14.06.11)


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

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