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

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

@dsh, нет, он не из all.spawn. В общем, получилось у меня с помощью товарища @SkyLoader, надо было обращаться к серверному объекту по-другому. Вот так всё работает:

function ObjSetSwitchOnline(story_obj_id)
local obj_id = story_objects.get_story_objects_registry():get(story_obj_id)
if obj_id ~= nil then 
   local sobj = alife():object(obj_id)
   local obj = get_story_object(sobj.id)
      if sobj ~= nil and obj == nil then
         alife():set_switch_online(sobj.id, true)
         alife():set_switch_offline(sobj.id, false)
     else
         abort("var 'sobj' == nil!")
      end
  else
      abort("var 'obj_id' == nil!")
   end 
end

Есть нюансы: в ЗП неписи есть сквадовые и внесквадовые. Если непись находится в скваде, то нужно писать story_id сквада, а не самого непися. Если непись внесквадовый - всё просто - вписываем его story_id из секции и радуемся.

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

Ранее был известен под ником BoBaH_671.

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

Народ, а есть ли здесь шарящие в скриптах? Я просто хочу применить пару скриптовых баз для CoC(ogse_signals и amk), поскольку там лежат нужные мне функции, а выдирать из файлов их отдельно побаиваюсь. К тому же нужна адаптация. Вот надеюсь, что мне кто-то расскажет, как проделать эту адаптацию своими руками - потому что скрипты я более-менее понимаю, но сам никогда не писал, могу только выбрать нужные файлы(которые мне, собственно говоря, и надо адаптировать).

Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда...

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

@MegaStalker, ogse_signals - самодостаточный. Автоматически инициализируется при первом использовании. Т.ч. просто бери ogse_signals.script и ogse_signals_addons_list.script с пустой таблицей, для начала, и добавь

class "actor_binder" ( object_binder )
function actor_binder:__init( obj ) super( obj )
...
  self.am          = ogse_signals.get_mgr()
  self.am:call( "on_load_before_all" )
  self.am:call( "on_init", obj )
...
end

или на подобие этого. Все, менеджер готов и можешь добавлять куда тебе нужно вызовы сигналов. Возможно понадобятся какие-нибудь функции из _g.script, ну так скопируешь к себе. Еще, ogse_signals использует RvP, если я не ошибаюсь. Т.ч. как оно будет в СоС - не знаю.

Изменено пользователем dsh
  • Полезно 2
Ссылка на комментарий

@dsh, хорошо, за это большое спасибо. А с функциями от АМК могут возникнуть какие-то проблемы, если брать ТОЛЬКО файл amk.scripts? Или же можно обойтись и без него? Просто я выдирал зомбирование неписей из АМК и там были вызывались связанные с нет пакетами функции от АМК. Хочу узнать, есть ли им замена в скриптах оригинальных игр.

 

И да, еще один вопрос. Что такое RvP?

Изменено пользователем MegaStalker
Добавлено BFG,

https://cloud.mail.ru/public/3N47/Mdz3wUrkt здесь найдёшь его.

Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда...

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

 

 

А с функциями от АМК могут возникнуть какие-то проблемы

 

Не скажу, не знаю.

 

 

 

вызывались связанные с нет пакетами функции от АМК. Хочу узнать, есть ли им замена в скриптах оригинальных игр.

 

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

 

 

 

Что такое RvP?

 

Это xrLuaFix от RvP, если я правильно нашел полное название.

  • Полезно 1
Ссылка на комментарий

А кто-нибудь вообще смотрел, как передвигаются неписи в офлайне ? По исходникам, или тупо мониторя координаты ?

ПЛАВНО, или через определенные промежутки времени скачком от точки к точке ? Причем точка эта называется случайно не game_vertex ли ?

 

Просто, если второе, то изрядная часть кода, с проверками координат, и "что-то делаем, если расстояние от чего-то там n метров", становится вполне бессмысленной.

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

@Dennis_Chikin, вероятно, это зависит от установленного типа пути. Если поставили ePathTypeGamePath, то, вероятно, моб пойдет по game vertex-ам. Если ты имеешь ввиду мобов, который идут в свой смарт, то, насколько я вижу, им как раз устанавливается

	movement().path_type			(MovementManager::ePathTypeGamePath);

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

Вопрос в том, как именно они перемешаются на отрезке между точками: как в онлайне, плавно, чтобы посетить каждый level_verteх, который будет по пути, или он был в одной точке, а прошло время - хлоп, в другой ?

 

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

 

Не, ну я понимаю, что "выведи в лог, и посмотри", но может кто уже смотрел ?

Изменено пользователем Dennis_Chikin
  • Полезно 1
Ссылка на комментарий

Вопрос в том, как именно они перемешаются на отрезке между точками: как в онлайне, плавно, чтобы посетить каждый level_verteх, который будет по пути, или он был в одной точке, а прошло время - хлоп, в другой ?

Для движка НПЦ по геймвертексам и по левел-вертексам перемещаются одинаково: хоп и в другом вертексе :)

 

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

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

 

Не, ну я понимаю, что "выведи в лог, и посмотри", но может кто уже смотрел ?

Можно поставить метку на НПЦ и смотреть, как он ходит скачками в оффлайне. Изменено пользователем abramcumner
Ссылка на комментарий

Почему-то так и думал.

Итого, можно сносить очередную пару сотен килобайт бессмысленного мусора.

 

На дворе шел 2017 год...

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

Итого, можно сносить очередную пару сотен килобайт бессмысленного мусора.

Свой надо делать. Без оффлайн-алайфа скучно. 2017 год как-никак.

 

Просто, если второе, то изрядная часть кода, с проверками координат, и "что-то делаем, если расстояние от чего-то там n метров", становится вполне бессмысленной.

Необязательно. Хотя двигается и прыжками между вертексами, но по графу, через все промежуточные вертексы. Кроме того геймвертексы хоть и стоят реже левел-вертексов, но не один на локацию. Так что проверки на расстояние вполне имеют смысл. Изменено пользователем abramcumner
  • Согласен 1
Ссылка на комментарий

"Свой надо делать."

 

Для этого, для начала, надо вменяемую схему миграции между лагерями и "собирателей".

Без этого все остальное не имеет смысла.

 

Зашел на агро - там дохлые нейтралы и живые солдатики. Вышел, зашел - дохлые нейтралы и живые солдатики. Вышел-зашел, вышел-зашел, ну и далее по тексту. И зачем ?

 

Во-вторых, для нормального алайфа надо не код кодить, а сначала головой подумать, что мы хотим получить в РЕЗУЛЬТАТЕ. А не внутрях процессора. То, что внутрях у ей неонка - все и так знают.

Вот зачем, простите, 10, 50, 1000 раундов по 100 рэндомов в каждом, если результат великолепно определяется одним, коль скоро нужен действительно рэндом, а вот 100000 рэндомов - хоть складывай, хоть перемножай с какими угодно коэффициентами - результат известен всем, кто теорвер не прогуливал, и даже немножко - школьникам.

 

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

Изменено пользователем Dennis_Chikin
  • Нравится 1
  • Согласен 1
  • Полезно 1
Ссылка на комментарий

@Dennis_Chikin, тот amk_offline_alife, который в Солянке, на мой взгляд, просто бессмысленен. Проще случайным образом убивать случайного непися в оффлайне. Результат будет такой же. Но самое главное, он бессмысленен для игрока, т.к. он его просто не увидит. Будут просто образовываться трупы. Что в этом интересного, я не знаю, кроме раздражения, когда игрок будет кого-то вооружать и переодевать, а потом придет, а этого самого вооруженного и переодетого терминатора загрызет тушкан, якобы. И будет бедняга вопрошать, ну что, что я сделал не так, как еще их надо перевооружать. Вообщем, в итоге я у себя оставил только подбор артефактов, ограбление нычек и оффлайновую торговлю.

 

Твой вопрос сегодня натолкнул меня на одну мысль. Кто-нибудь имеет предположения, для чего в xr_gulag проверяется расстояние до точки работы, для определение, дошел моб до работы или еще не дошел? Моба на место работы ведет CALifeSmartTerrainTask, который приведет его на game vertex работы. Так зачем проверять расстояние до этого game vertex-а, вместо простого сравнения sobj.m_game_vertex_id == job.game_vertex_id?

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

Кто-нибудь имеет предположения, для чего в xr_gulag проверяется расстояние до точки работы, для определение, дошел моб до работы или еще не дошел?

Потому что моб может дойти до места работы и в онлайне...
  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

Уточняю: "до места работы" - это значит, пора грузить и включать логику. Это может и как правило случается раньше, чем в вертексе.

 

Иначе же получится нехорошо, когда непись отошел от точки на 2 метра, непися с работы освобождаем, логику выключаем, движком возвращаем на исходную, снова отошел - и так по кругу.

Поэтому, если он на некотором (50 дефолтное) расстоянии - значит, заступил, и пусть работает. Если дальше - случилось что-то серьезное, и тогда решаем вопрос радикально.

 

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

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

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

 

Зашел на агро - там дохлые нейтралы и живые солдатики. Вышел, зашел - дохлые нейтралы и живые солдатики. Вышел-зашел, вышел-зашел, ну и далее по тексту. И зачем ?

Подтвердите мои догадки. Я пока понял что в соли там юзается чудо-сяковский уборщик (ну или какой-то архимодификат с тем же смыслом), который собственно делает, например, вот спавним в оллспавне патроны где-нибудь просто такие вот патроны, потом приходим на локацию и сякосборщик их удаляет, да. Например, оффлайн-алайф, кто-то кого-то "убил", а так просто трупы заспавнились С ЛУТОМ, пришли на локацию, сякосборщик все убрал.

 

Я верно все понял?

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

"а создание чего-то другого без привязки, собственно, к этим рестрикторам."

ДА.

 

По поводу соли, тут все печально именно из за комбинации вообще всего, что только может быть.

То есть, патрон из олспавна - ну, на них можно какой-нибудь признак исключения для уборщика поставить. Но в целом...

 

1. Да, пусть будут патроны из олспавна, а sid на каждую пачку - это уже за пределами бобра и зла.

2. Загрузка. амк_офлайн_алайф, а не "уборщик", обнаружил эти патроны, переместил в каких нибудь неписей, и тут же грохнул.

3. Далее, он же обнаружил неписей, и грохнул их.

4. Из них он переместил "профильный лут" в других неписей.

5. После перемещения он его грохнул.

6. Теперь в ход идет сякоуборщик, и убирает все трупы.

7. se_respawn обнаруживает, что неписей нет, и идем на п3.

 

Это БЕЗ входа в онлайн.

В онлайне у нас добавляется десменеджер и лутосборщик, который в оставшихся неписях.

8. Каким-то местом на локации имеется труп. Срабатывает десменеджер, и спавнит в него новый лут заместо того, что накрылся ранее в пп.4,5. Если не накрылся - он его сам и удалит, и напихает свой.

9. Тут же срабатывает лутосбощик, и перемещает все созданное, после чего идем на п3 или п5 - какой успеет раньше.

 

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

Ну, например, treasure_manager c амкофлайном, всякие лечилки-заряжалки-гранатометалки...

Итого, на работу одного скрипта приходится 9, чтобы свести ее к только прогреву процессора. Причем на каждый из тех 9 - еще 9 других.

 

Впрочем, это не только одна конкретная солянка, это, кажется ОБЩИЙ принцип практически везде.

Отличаются в основном детали.

 

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

Но, во-первых, целый арсенал - до следующей загрузки, во-вторых, не проще было сделать, чтоб непись ПРОСТО подошел к тому трупу, отыграл свою анимацию, и на этом и закончить. БЕЗ многочисленных манипуляций по созданию-перекладывани-уничтожению и бесконечных переборов 1,65535, и внутри цикла еще цикл опять 1,65535, и еще, и еще ? То есть, действительно, спавним в случайном месте пустой труп, отыгрываем анимацую, все убираем. Причем только на текущей локации, а остальные - вообще не трогаем.

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

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

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

 

 

чистку можно эту во времени размазать

 

Что там размазывать-то. Вся чистка

[02/12/17 23:11:13]	[ogse_signals]: 294133.28125, @d:\s.t.a.l.k.e.r\gamedata\scripts\sak_off_corpses.script

микросекунд. Т.е. 0.3 секунды. Ну и смысл тут что-то усложнять и куда-то размазывать? Даже если можно оптимизировать и получить 0.03 секунды, затраченное на реализацию оптимизации время того не стоит.

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

Вот как раз не надо размазывать. И, да, частично можно опираться на готовые уже se_*, тем более что они ТОЖЕ создают собственные таблицы, для, например, task_manager (отдельная пэстня, причем под п 2.0 не попадает только часть предлогов).

В принципе, этого достаточно: при загрузке, к моменту входа актора в онлайн, материала будет достаточно, чтобы почистить. И более ничего не трогать.

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

Если оно создавалось, чтобы игрок его увидел, то подумать: а как, собственно, он это сможет увидеть ?

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...