*Shoker* 322 Опубликовано 20 Октября 2011 Поделиться Опубликовано 20 Октября 2011 Galil Если статьи выдаются инфопоршнями, попробуй просто эти инфопоршни "забрать" (db.actor:disable_info_portion(" ") - но не уверен что именно так, проверь в lua_help) Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
SkyLoader 53 Опубликовано 20 Октября 2011 Поделиться Опубликовано 20 Октября 2011 Скажите плз, как получить забинденную команду? Т.е. по экшену получить забинденную кнопку. Ссылка на комментарий
Charsi 440 Опубликовано 21 Октября 2011 Поделиться Опубликовано 21 Октября 2011 SkyLoader, вот пример для кнопки активации ПДА. Я дописал в файл со строковыми индентификаторами <string id="action_activate_pda"> <text>$$ACTION_ACTIVE_JOBS$$</text> </string> Теперь функция game.translate_string("action_activate_pda") будет выдавать кнопку, забинденную на открытие ПДА. В отличие от парсинга user.ltx такой способ работает и после перезабиндивания кнопки в игре. Аналогично можно сделать и для остальных экшенов. Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
SkyLoader 53 Опубликовано 21 Октября 2011 Поделиться Опубликовано 21 Октября 2011 (изменено) Charsi, спасибо. Жаль, что по другому нельзя. (а то парсинг user не очень подходит) Изменено 21 Октября 2011 пользователем SkyLoader Ссылка на комментарий
*Shoker* 322 Опубликовано 22 Октября 2011 Поделиться Опубликовано 22 Октября 2011 (изменено) Хотел вот спросить по поводу некоторых странностей в работе STATE_Read и State_write колбеков в скриптах типа se_xxx.script В скрипте sim_faction.script (ЧН, 10 патч) в функциях -- Сейв function se_sim_faction:STATE_Write(packet) -- ЛОАД function se_sim_faction:STATE_Read(packet, size) Поставил вывод сообщения такого типа: sm.ilog_c("load faction %s sid %s", self:name(), self.sid) В итоге вот лог, записан сразу после save\load * Saving objects... ! [LUA][ERROR] [07:15] save faction mar_sim_faction_csky sid 91495 ! [LUA][ERROR] [07:15] save faction mar_sim_faction_renegade sid 10069 ! [LUA][ERROR] [07:15] save faction mar_sim_faction_monster sid 18016 ! [LUA][ERROR] [07:15] save faction gar_sim_faction_bandit sid 82950 ! [LUA][ERROR] [07:15] save faction esc_sim_faction_stalker sid 34651 ! [LUA][ERROR] [07:15] save faction esc_sim_faction_military sid 89133 ! [LUA][ERROR] [07:15] save faction val_sim_faction_freedom sid 64428 ! [LUA][ERROR] [07:15] save faction val_sim_faction_killer sid 12956 ! [LUA][ERROR] [07:15] save faction agr_sim_faction_dolg sid 26588 ! [LUA][ERROR] [07:15] save faction yan_sim_faction_zombied sid 17237 ! [LUA][ERROR] [07:15] save faction lim_sim_faction_monolith sid 62255 * 21852 objects are successfully saved * Game WinSeven_quicksave.sav is successfully saved to file 'f:\games\stalker - clear sky\save\winseven\stalker-stcs\savedgames\winseven_quicksave.sav' ... Загрузка игры "winseven_quicksave.sav"... * Loading spawn registry... ! [LUA][ERROR] [07:15] load faction mar_sim_faction_csky sid 47402 ! [LUA][ERROR] [07:15] load faction mar_sim_faction_renegade sid 99711 ! [LUA][ERROR] [07:15] load faction mar_sim_faction_monster sid 17753 ! [LUA][ERROR] [07:15] load faction gar_sim_faction_bandit sid 48238 ! [LUA][ERROR] [07:15] load faction esc_sim_faction_stalker sid 24366 ! [LUA][ERROR] [07:15] load faction esc_sim_faction_military sid 78940 ! [LUA][ERROR] [07:15] load faction val_sim_faction_freedom sid 59261 ! [LUA][ERROR] [07:15] load faction val_sim_faction_killer sid 57427 ! [LUA][ERROR] [07:15] load faction agr_sim_faction_dolg sid 81796 ! [LUA][ERROR] [07:15] load faction yan_sim_faction_zombied sid 93268 ! [LUA][ERROR] [07:15] load faction lim_sim_faction_monolith sid 31654 * 11568 spawn points are successfully loaded * Loading objects... ! [LUA][ERROR] [07:15] load faction mar_sim_faction_csky sid 68530 ! [LUA][ERROR] [07:15] load faction mar_sim_faction_renegade sid 95163 ! [LUA][ERROR] [07:15] load faction mar_sim_faction_monster sid 1499 ! [LUA][ERROR] [07:15] load faction gar_sim_faction_bandit sid 71579 ! [LUA][ERROR] [07:15] load faction esc_sim_faction_stalker sid 26426 ! [LUA][ERROR] [07:15] load faction esc_sim_faction_military sid 86856 ! [LUA][ERROR] [07:15] load faction val_sim_faction_freedom sid 19908 ! [LUA][ERROR] [07:15] load faction val_sim_faction_killer sid 25487 ! [LUA][ERROR] [07:15] load faction agr_sim_faction_dolg sid 25358 ! [LUA][ERROR] [07:15] load faction yan_sim_faction_zombied sid 11439 ! [LUA][ERROR] [07:15] load faction lim_sim_faction_monolith sid 32970 * 21852 objects are successfully loaded * Game winseven_quicksave is successfully loaded from file 'f:\games\stalker - clear sky\save\winseven\stalker-stcs\savedgames\winseven_quicksave.sav' ... Клиент: Синхронизация... ... ! [LUA][ERROR] [07:18] save faction mar_sim_faction_csky sid 68530 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_csky sid 68530 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_renegade sid 95163 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_renegade sid 95163 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_monster sid 1499 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_monster sid 1499 ! [LUA][ERROR] [07:18] load faction mar_sim_faction_csky sid 65484 ! [LUA][ERROR] [07:18] load faction mar_sim_faction_renegade sid 17958 ! [LUA][ERROR] [07:18] load faction mar_sim_faction_monster sid 57149 Добавлено через 7 мин.: Собстно я не совсем понял механизм работы этих функций. Зачем при загрузке два раза вызывается функция STATE_Read() + ещё раз в конце), и зачем в конце загрузки игра занаво вызывает STATE_Write() для всех объектов, если мы загружаем а не сохраняем? Изменено 22 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 22 Октября 2011 Поделиться Опубликовано 22 Октября 2011 (изменено) *Shoker* И чего тебе непонятно в логах? 'self.sid' - рандомная метка для локальной идентификации объектов в лог-строках. Сделано по дурному ... при каждой перезагрезке игры этот индекс изменяется, так что ориентироваться можно только в текущей сессии. Зачем вообще вызываются методы STATE_Read()/STATE_Write() ? Ответ вроде как очевиден. В игре имеются серверные объекты и клиентские. Клиентские - порождение серверных. В игре (для многих объектов постоянно) идет обмен между серверными и клиентскими объетами. В конце игры - в серверные объекты сохраняется то, что необходимо от клиентских ... То, что в зарузке используется метод STATE_Write() как раз и не должно вызывать вопроса, если учесть 'зеркальность' названий. Методы STATE(UPDATE)_Write(Read) применяются к объектам, точнее они и есть методы объектов(!), и учитывая что записть типа: se_object:STATE_Write(packet) - можно прочитать как "запись в нет-пакет параметров серверного объекта" и далее этот пакет с данными можно читать и использовать в игре, то ясно - это по сути операция ЧТЕНИЯ данныех объекта, для чего и получается пакет данным методом. Учитывая вышесказанное, при загрузке требуется прочитать серверные данные объектов, для чего они должны вначале быть записаны в некий нет-пакет, из которого и могут быть далее прочитаны. Так что запоминай и привыкай к 'зеркальной' трактовке: Чтобы прочитать параметры - требуется вначале их из объекта записать в нет-паекет. Чтобы внести изменения (и записать) - требуется, чтоб (ис)правленый нет-пакет был прочитан объектом. Добавлено через 91 мин.: P.S. Кстати, можешь опробовать обновленный вариант модуля работы с нет-пакетами:[spoiler="читалка/писалка" (дозаполнил)]m_net_utils_111022 Основное отличие: выбор метода чтение/записи нет-пакета производится автоматически по переданному в качестве аргумента серверному объекту. Определяется его класс и по таблице из конфиг-файла выбирается соответствующий метод (если имеется). Установка - скопировать скрипт в папку скриптов, конфиг - в папку конфигов. Вызовы: чтение - Get_NetPacket(se_obj [,flag_upd]) , запись - Set_NetPacket(se_obj, table) Изменено 23 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Vano_Santuri 33 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 (изменено) Итак, мужики, по новой работа с табличками... Имеем заполнение таблицы: table.insert(TblMsges_stalker,t) Таким макаром все работает, при попытке же выделить TblMsges_stalker посредством склейки строки local ComTbl = Sender:character_community() local Tbl="TblMsges_"..ComTbl -- Так у нас получаются таблички... table.insert(Tbl,t) Получаю вылет : FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : .... - Зов Припяти\gamedata\scripts\vs_send_news.script:211: bad argument #1 to 'insert' (table expected, got string) stack trace: Как я понял не формируется TblMsges_stalker посредством моей склейки, решил проверить, local Tbl="TblMsges_"..ComTbl -- Так у нас получаются таблички... send_tip(Tbl,nil, nil, nil,nil,nil) В результате получил сообщение TblMsges_stalker Не подскажите в чем проблема? Я тут думал, что передается в таблицу не TblMsges_stalker, а "TblMsges_"..ComTbl ,т.е не идет склейка.... Но точно не могу сказать, просто такая склейка уменьшает код во вного раз, и код более читабельный становится... Так же пытался возвращать TblMsges_stalker таким методом.... local TblSend = GetComName((Sender:character_community()),7) table.insert(TblSend,t) --Табличка на группировку. + иконки для каждой группировки. local Community = { ["actor"] = {"Дегтярев","ГГ","Дегтярева","СБУшника","default","Общий канал:","TblMsges"}, -- надо все группировки шмалять ["stalker"] = {"сталкер","одиночка","сталкера","одиночку","stalker","Общий канал:","TblMsges_stalker"}, ["monolith"] = {"монолитовец", "фанатик", "монолитовца","фанатика","default","Монолит:","TblMsges_monolith"}, ["army"] = {"военный","солдат","военного","солдата","army","Военные:","TblMsges_army"}, ["killer"] = {"наёмник","мерк","наёмника","мерка","killer","Намники:","TblMsges_killer"}, ["ecolog"] = {"учёный","яйцеголовый","учёного","яйцеголового","default","Ученые:","TblMsges_ecolog"}, ["dolg"] = {"долговец","долгарь","долговца","долгоря","dolg","Долг:","TblMsges_dolg"}, ["freedom"] = {"свободовец","анарист","свободовца","анархиста","freedom","Свобода:","TblMsges_freedom"}, ["bandit"] = {"бандит","гопник","бандита","гопника","bandit","Бандиты:","TblMsges_bandit"}, ["zombied"] = {"зомбированный","зомби","зомбированного","зомби","default","Зомбированные:","TblMsges_zombied"} --Пасхалка для прикола... } --Берем имя из таблички. function GetComName(ObjCom,index) if (Community[ObjCom][index]) then local ComName =Community[ObjCom][index] return ComName end end Такой же влет, если же давать типс, то все пучком,дело в очередности? ЗЫ,Sender - дает сталкера (obj) полностью проверен на все. Код не выкладываю, ибо там очень много.... Изменено 23 Октября 2011 пользователем Vano_Santuri Что-то кончается, что-то начинается... Ссылка на комментарий
KD87 718 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 Vano_Santuri, вот это: local Tbl="TblMsges_"..ComTbl, дает строку, а не таблицу. Вот insert и не работает. Ссылка на комментарий
Vano_Santuri 33 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 KD87, Ясно, пока сделал самым примитивным способом... function WriteTbl(Sender,t) ComTbl = Sender:character_community() if ComTbl == "actor" then table.insert(TblMsges,t) end if ComTbl == "stalker" then table.insert(TblMsges_stalker,t) end if ComTbl == "monolith" then table.insert(TblMsges_monolith,t) end if ComTbl == "army" then table.insert(TblMsges_army,t) end if ComTbl == "killer" then table.insert(TblMsges_killer,t) end if ComTbl == "ecolog" then table.insert(TblMsges_ecolog,t) end if ComTbl == "dolg" then table.insert(TblMsges_dolg,t) end if ComTbl == "freedom" then table.insert(TblMsges_freedom,t) end if ComTbl == "bandit" then table.insert(TblMsges_bandit,t) end if ComTbl == "zombied" then table.insert(TblMsges_zombied,t) end end А никак нельзя строку перевести в таблицу??? Или что-то в этом роде? но чтоб покороче и покрасивше? Что-то кончается, что-то начинается... Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 (изменено) Кто-нибудь разбирался со "злопамятностью" неписей ? Картина следующая: Например, на кордоне сидят сталкеры у костерка между АТП и насыпью. (Или даже вообе на АТП). С насыпи в районе креста/гулага кабанов вываливается в онлайн вояка с насыпи, и резво бежит на место. Сталкеры, мельком увидев вояку, поднимаются, и идут на разборки - да хоть под мост. Еще банальнее - ГГ устраивает перестрелку под мостом, сбегает, прячется. Вояки доходят до мета, где видели ГГ последний раз, и минут пять стоят там, уткнувшись в землю стволами. Пока состояние гулага по времени не сменится. Причем эвалюатор в xr_ganger.script давным-давно возвращает false. Еще: Непись сидит под смартом, где ему запрещено воевать. Рядом - враг. Враг уходит довольно таки далеко (гарантированно за препятствием), отпускаем непися из под смарта, и он бежит за врагом. Хотя и не видит нифига. Где-то по пути он может потерять предмет охоты окончательно, но продолжает находиться в состоянии боя. А самое мерзкое, что в этом состоянии его и под смарт обратно взять нельзя. То есть, пример: Сцена в ТД, с бандитом и долговцем. У бандита [smart_terrains] val_escort = {-val_escort_scene_end -val_bandit_talk} val_lager_bandits = {+val_escort_scene_end}, {+val_bandit_talk} Даем val_bandit_talk - и бандюк побежал охотиться на долговца. Делаем их нейтралами друг к другу - и бандит нормально берется под val_lager_bandits Изменено 23 Октября 2011 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
amik 253 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 (изменено) Dennis_Chikin Очень хороший вопрос. По крайней мере первая его часть Если бы нашлось подобное решение как у косых сталкеров было бы круто. В конфиге сталкера есть такая строчка: selector_attack = Судя по слухам она не работает, в движке упоминаний нету или как-то так. Но у меня есть сомнения, по крайней мере у монстров очень видны отличия в их поведении при редактировании подобных вещей. Короче дальше.. Там, под такими параметрами как, они ниже, есть значения в цифрах: fOptMemberDistance, ==== тут метры. fOptMemberDistanceWeight, = тут фиг знает что. fMinMemberDistance,==== тут метры. fMinMemberDistanceWeight, = тут фиг знает что. fMaxMemberDistance,==== тут метры. fMaxMemberDistanceWeight, = тут фиг знает что. fMemberViewDeviationWeight, = тут фиг знает что. Я так и не понял за что отвечает приставка Weight. Изменено 23 Октября 2011 пользователем amik Мой архив Сталкером не занимаюсь. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 Вес - он и есть вес. В смысле, в общей куче. типа, 10+90 = 100%. Когда все по нулям, а у одного параметра много - только он и будет учитываться. Два с одинаковым, остальные по нулям - эти 2 - пополам. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Nazgool 250 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 (изменено) Vano_Santuri Таблицу из строки сделать не сложно. Желательно знать из строки какого вида? Например : local t = {} local s = "word_1 word_2 word_3 word_4 word_5" for w in s:gmatch("[%w%_]+") do t[#t+1] = w end Только вот до сих пор не пойму что же именно тебе нужно? В теме "Lua..." у тебя были одни условия, тут несколько другие. Объясни подробнее. Изменено 23 Октября 2011 пользователем Gun12 Ссылка на комментарий
Vano_Santuri 33 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 (изменено) Gun12, Просто я уже слишком много нового кода написал, вобщем так....\ У меня есть таблички... local TblMsges = {} -- Общий канал, Смерть, погода, и прочая хрень.... local TblMsges_stalker = {} --Сюда идут новости для общего канала (сталкеры) local TblMsges_monolith = {} --Табличка - канал Монолита. local TblMsges_army = {} -- Табличка - канал Военных. local TblMsges_killer = {} -- Табличка - канал наемников. local TblMsges_ecolog = {} -- Табличка - канал экологов. local TblMsges_dolg = {} -- Табличка -канал Долга. local TblMsges_freedom = {} -- Табличка канал Свободы. local TblMsges_bandit = {} -- Табличка - канал бандитов local TblMsges_zombied = {} -- Табличка - канал зомбированных - Прикол от меня. \ У меня много кода, суть в том, чтобы заполнять таблички в зависимости от группировок... где имя таблички состоит из TblMsges_ и секции группировки, т.е чтоб не писать кучу if я хочу сделать табличку из переменной группировки и постоянной TblMsges_ ... local Com = Sender:character_community() local Tbl = "TblMsges_ "..Com table.insert(Tbl,t) ... Товарищ, Charsi , посоветовал сделать так: table.insert(this["TblMsges_"..Sender:character_community()],t) Сейчас попробую и отпишусь... Не не получилось, как-то вылет на первый аргумент... Ладно бог с ним, как допишу все, посмотрите, может что и поможете исправить, а пока буду делать дальше, дело идет....) Изменено 23 Октября 2011 пользователем Vano_Santuri Что-то кончается, что-то начинается... Ссылка на комментарий
*Shoker* 322 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 (изменено) Vano_Santuri А что тебе мешает сделать одну глобальную таблицу с подтаблицами? Типа: local NewsTbl = { ["all"] = { --\\ Общий канал "Текст новости", "Текст новости", ... }, ["freedom"] = { --\\ Свобода "Текст новости", "Текст новости", ... }, ... } А дальше можно получать рэндомный текст таким образом. local ntbl = NewsTbl["freedom"] --\\ получаем подтаблицу с текстами свободы local random_text = ntbl[math.random(#ntbl)] В итоге random_text будет равен случайному сообщению из таблицы freedom И тебе достаточно будет лишь менять имя таблицы в local ntbl, передавая её нужное строкове имя. C if-ами лучше не заигрывайся, а то на твоей предыдущей версии новостей из за них Lua Cheker виснул Ну и заполнять их аналогично можно, ты только учти что в table.insert первый аргумент это таблица как раз, куда ты будешь свой текст добавлять, тоесть если хочешь туда добавить текст, то пишешь так: table.insert(ntb, "текст") и всё Artos Спасибо за новую версию нет-пакетов И как тебе хватает терпения каждый раз их перелапатывать чуть ли не полностью, я б повесился давно Я их постараюсь проверить, отпишусь, спасибо По поводу STATE_Read\Write, я просто не понял зачем при загрузке сохранения, во первых функция STATE_Read вызывается 3 (!) раза за загрузку для всех объектов. А во вторых в конце загрузки при синхронизации происходить вызов STATE_Write (тоесть по сути во время загрузки сохранять все наши переменные) для всех объектов а потом опять STATE_Read (но уже для тех что на 1 локации с ГГ) И того 3 Read и 1 Write во время загрузки... зачем? Изменено 23 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Vano_Santuri 33 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 *Shoker*, Была такая идея, но , тогда я не смогу регулировать каналы: Для канала - исходящий (сендеры) 2.- это о ком новости ... Я хочу сделать регулируемыми. Для чего? Есть идея привязать носвости к Каналам, в общий идут типсы только о всякой фигне, а вот сообщения о выстрелах, мутантах, Сос, нападение - уже по каналам группировок ... В зависимости от наличия условия - давать возможность слушать каналы группировок (т.е сделать интересные квесты на добычу прошивки) ... Так же я не думаю, что наличие новостей от зомбарей и монолитовцев в канале кого-то обрадует? Их можно исключить, либо моим методом (несколько таблиц) Либо добавлять условия на проверку группировки - опять очень много if then . Т.е этими табличками я избавился от n-ного количества if и сделал удобным для выбора и регулирования сообщений ... Вот прикол, зацените: Так же, вариант с табличкой под группировку упрощает адаптацию под моды с кучей группировок и пр. фигней... Пока тестовый режим .... По поводу функциональности - Берутся только реальные сендеры, настраивается их радиус,т.е левых сендеров не будет... Что-то кончается, что-то начинается... Ссылка на комментарий
*Shoker* 322 Опубликовано 23 Октября 2011 Поделиться Опубликовано 23 Октября 2011 (изменено) Скриншоты не могу глянуть, интернет не позволяет, но как насчёт того (возможно не до конца тебя понял) local MsgTbl = {} function addToTbl(name,ti) if MsgTbl[name] == nil then MsgTbl[name] = {} end table.insert(MsgTbl[name], ti) end С помощью функции addToTbl() ты можешь добавить в MsgTbl нужный тебе текст к нужной группировке. Тоесть если тебе надо допустим добавить текст (или не тока текст, ti может быть и таблицой и чем угодно) к свободе, то ты просто пишешь addToTbl("freedom", <...>) Ну и соответственно получить таблицу свободы через такую функцию. function getFromTbl(name) if MsgTbl[name] == nil then return nil --\\ вернёт nil если ничего нету end return MsgTbl[name] end Сама таблица будет примерно как та, что я выше показывал. local MsgTbl = { freedom = { -- эту таблицу вернёт функция getFromTbl, name = freedom 1 = ..., 2 = ..., }, } Изменено 23 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 24 Октября 2011 Поделиться Опубликовано 24 Октября 2011 (изменено) *Shoker* Странноватые вопросы возникают у тебя ... (по STATE_Read/Write). Вроде как даже пояснил ... Как вообще возникают объекты в игре? Как они получают свои параметры? Как меняют свои параметры? Это обшие вопросы и не имеют к теме отношения. Но все же поясню. При старте игры из сэйва читаеся информация о всех динамических объектах, которые были в игре при сохранении. Для новой игры (НИ) информация о таких объектах берется из all.spawn'а. Сервер создает объекты-заготовки соответствующего класса для всех объектов. На этом этапе это просто шаблоны с дефолтными параметрами и с единыи ID-65535 (т.е. игровой идентификатор пока не задан!). Далее, в объекты-заготовки считываются (STATE_Read) их конкретные параметры и объекты расставляются по локациям, координатам и пр ... После этого, полученные объекты считываются (STATE_Write) запущенным сервером, чтобы прочитать их параметры и определить какие объекты относятся к текущей локации. Для объектов, которые биндятся и могут иметь сохраненные в сэйве параметры в pstor'ах - вновь запускается читалка (STATE_Read) и считываются эти параметры. Естественно, после того, как сервер считал текущие параметры объектов на локации - вновь необходимо дать информацию по этим объектам в игру, т.е. клиентские объекты должны иметь текущий нет-пакет (STATE_Write). Ну и т.д. ... Например для объекта 'оружие в рукаг ГГ' будет вызываться STATE_Read/Write периодически, что можно даже с некоторой погрешностью испорльзовать для счтывания текущего кол-ва патронов для этого объекта ... не задействуя сторонние апдейтеры. Ну а модуль нет-пакетов не переопачивается каждый раз. Суть (на 95%) остается прежней. Изменено 24 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
strelok200 0 Опубликовано 25 Октября 2011 Поделиться Опубликовано 25 Октября 2011 (изменено) Какую логику надо дать НПСу, чтобы он лежал и просил о помощи Сообщение от модератора ColR_iT Ему нужно дать литр молока и банку солёных огурцов... В шапку темы заглядывайте иногда! Изменено 25 Октября 2011 пользователем ColR_iT Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
FLIKER 0 Опубликовано 25 Октября 2011 Поделиться Опубликовано 25 Октября 2011 Вопрос, почему НПС не идет на костер, и не берется под смарт? Он просто уходит бродить по точкам.. [smart_terrains] ds_lager = true [logic] active = kamp [kamp] center_point = ds_lager_kamp_1 radius = 3 Жить – значит делать вещи, а не приобретать их. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти