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

[SoC] Ковыряемся в файлах


Halford

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

 

 

подходишь и толкаешь, он разваливается
Могу ошибаться, но чтоб объект в игре разваливался он должен быть на классе P_DSTRBL. А для "physic_object" прописан класс O_PHYS_S(у меня по крайней мере).

Визуала такого "physics\decor\stol_sher" у меня нет, не могу потестить. Возьми другой для пробы из physics\stol.

Поделиться этим сообщением


Ссылка на сообщение
и не работает вот такая

А как именно не работает ? Переключатель не становится активным ? Или что там у тебя происходит ?

 

 

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

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

 

А на счет костей в объектах - так они вроде к разрушаемости\не разрушаемости отношения не имеют ?

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

Поделиться этим сообщением


Ссылка на сообщение

А чем alife():release(alife():object(item:id()), true) не устраивает ? Нужно что-то особенное ?

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
9 часов назад, Stalker Nest сказал:

Теперь я знаю, что вылетает из за какого то НПС, и что это дает?

Ты сам писал, что уменьшал радиус он-лайна до 10м - ну так смотри, кто из неписей при приближении к нему на эти 10м дает вылет. И смотри, что у него в секции all.spawn'а прописано. Судя по логу - ошибка чтения секции конфига, скорее всего, какой-то предмет в инвентаре...

Поделиться этим сообщением


Ссылка на сообщение
Только что, UriZzz сказал:

Я вижу что тут два слова написаны слитно, подскажите как правильно, будте любезны.

В файле heal_regen.script должна быть ф-ция weapontimer(). Проверяй...

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

@вася5657 Смотри в скрипты со словом "death" в названии. Ну и конфиги, соответственно... Есть класс менеджера смерти мобов, в котором прописано все: подчистка инвентаря мобов от предметов, которых не должно быть после их смерти, изменение состояния предметов после смерти их владельца и тд

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, Han Sola сказал:

Что надо поменять?

В спавне менять ничего не надо... Надо смотреть в скрипты - похоже установлен какой-то уборщик трупов.

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, Dennis_Chikin сказал:

А кто точно знает

Наверно движок:cool: ?

Прошелся поиском по исходникам - кроме вычитывания этого параметра и сейв\лоада в нет-пакет нашел единственное место где этот параметр используется:

Скрытый текст

void CSE_ALifeAnomalousZone::spawn_artefacts ()

{

VERIFY2 (!m_bOnline,"Cannot spawn artefacts in online!");

float m_min_start_power = pSettings->r_float(name(),"min_start_power");

float m_max_start_power = pSettings->r_float(name(),"max_start_power");

u32 m_min_artefact_count= pSettings->r_u32 (name(),"min_artefact_count");;

u32 m_max_artefact_count= pSettings->r_u32 (name(),"max_artefact_count");;

u32 m_artefact_count;

if (m_min_artefact_count == m_max_artefact_count)

m_artefact_count = m_min_artefact_count;

else

m_artefact_count = randI(m_min_artefact_count,m_max_artefact_count);

if (m_min_start_power == m_max_start_power)

m_maxPower = m_min_start_power;

else

m_maxPower = randF(m_min_start_power,m_max_start_power);

LPCSTR artefacts = pSettings->r_string(name(),"artefacts");

u32 n = _GetItemCount(artefacts);

VERIFY2 (!(n % 2),"Invalid parameters count in line artefacts for anomalous zone");

n >>= 1;

 

typedef std::pair<shared_str,float> ARTEFACT_PAIR;

string256 temp0, temp1;

ARTEFACT_PAIR *m_weights = (ARTEFACT_PAIR*)_alloca(n*sizeof(ARTEFACT_PAIR));

ARTEFACT_PAIR *I = m_weights;

ARTEFACT_PAIR *E = m_weights + n;

for (u32 i = 0; I != E; ++I, ++i) {

_GetItem (artefacts,2*i,temp0);

_GetItem (artefacts,2*i + 1,temp1);

new (I) ARTEFACT_PAIR(temp0,(float)atof(temp1));

}

for (u32 ii=0; ii<m_artefact_count; ++ii) {

float fProbability = randF(1.f);

float fSum = 0.f;

for (u16 p=0; p<n; ++p) {

fSum += m_weights[p].second;

if (fSum > fProbability)

break;

}

if (p < n) {

CSE_Abstract *l_tpSE_Abstract = alife().spawn_item(*m_weights[p].first,position(),m_tNodeID,m_tGraphID,0xffff);

R_ASSERT3 (l_tpSE_Abstract,"Can't spawn artefact ",*m_weights[p].first);

CSE_ALifeDynamicObject *i = smart_cast<CSE_ALifeDynamicObject*>(l_tpSE_Abstract);

R_ASSERT2 (i,"Non-ALife object in the 'game.spawn'");

i->m_tSpawnID = m_tSpawnID;

i->m_bALifeControl = true;

ai().alife().spawns().assign_artefact_position(this,i);

Fvector t = i->o_Position ;

u32 p = i->m_tNodeID ;

float q = i->m_fDistance ;

alife().graph().change(i,m_tGraphID,i->m_tGraphID);

i->o_Position = t;

i->m_tNodeID = p;

i->m_fDistance = q;

CSE_ALifeItemArtefact *l_tpALifeItemArtefact = smart_cast<CSE_ALifeItemArtefact*>(i);

R_ASSERT2 (l_tpALifeItemArtefact,"Anomalous zone can't generate non-artefact objects since they don't have an 'anomaly property'!");

l_tpALifeItemArtefact->m_fAnomalyValue = m_maxPower*(1.f - i->o_Position.distance_to(o_Position)/m_offline_interactive_radius);

}

}

 

Поделиться этим сообщением


Ссылка на сообщение
2 часа назад, nego сказал:

Как раз фразы 0, 01, 02 читаются, а после вылет

Ну так попробуй заменить другими номерами - вообще-то незначащие ноли не стоит использовать...

Поделиться этим сообщением


Ссылка на сообщение
3 часа назад, nasar75 сказал:

stretch="1" - фиксированный размер картинки

Вообще-то это указание движку "вписать" картинку по заданным координатам.

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

Поделиться этим сообщением


Ссылка на сообщение

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

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
В 08.03.2018 в 19:21, Ring-a-ding сказал:

Но по аналогии сделать то же с другими локациями не выходит.

Что именно не выходит ? Ты хоть расскажи, что ты пытался делать...

Поделиться этим сообщением


Ссылка на сообщение
3 часа назад, Ring-a-ding сказал:

тот, кто знает, о чём речь, поймёт.

Наверное разрабы NLC7 ? На этом сайте есть персональный раздел NLC, ходи туда, спроси там...

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
22 часа назад, Mutantt сказал:

Если делаю так

....

то вылетает с логом attempt to call method 'section' (a nil value)

А если так 

....

то объекты не удаляются.

В первом фрагменте кода вылет гарантирован, т.к. ф-ция object(...) класса alife_simulator возвращает серверный объект, у которого нет метода section().

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

Поделиться этим сообщением


Ссылка на сообщение
2 часа назад, BFG сказал:

Затем с НИ удалить по номеру и ЭТО уйдёт в оффлайн. Когда надо, можно вывести ЭТО в онлайн по этому же номеру.

Эмм..., можно точнее, что означает "удалить... и ЭТО уйдет в оффлайн" ? Если именно удалить(единственной для этого движковой ф-цией release), то никакого оффлайна не будет, т.к. объекта не будет. Может имелась в виду работа с флагами flSwitchOnline\flSwitchOffline ?

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, AndrewMor сказал:

Полагаю, именно УДАЛИТЬ. А в нужный момент спавнить по story_id.

Ну тогда уж проще будет использовать вариант create(...) с указанием номера секции из all.spawn, раз уж все равно используем all.spawn.

Поделиться этим сообщением


Ссылка на сообщение
3 минуты назад, dPlayer сказал:

После закрытия диалога он стоит, пока ГГ не отойдёт от него.

Ну так его, похоже, схема диалога с ГГ держит. Надо пробовать добавить сюда

on_info = {+info} walker@start2 %=break_dialog%

вызов ф-ции, в которой принудительно вырубать диалог. Сама ф-ция:

function break_dialog(first_speaker, second_speaker, id)

    first_speaker:stop_talk()

    second_speaker:stop_talk()

end

Поделиться этим сообщением


Ссылка на сообщение
52 минуты назад, AndrewMor сказал:

Дело в чем-то другом.

Тогда может быть какая-нибудь дефолтная схема meet...

Поделиться этим сообщением


Ссылка на сообщение
6 часов назад, dPlayer сказал:

level.map_add_object_spot

Эта ф-ция ставит метку на клиентский объект, по этому метка пропадает при сэйв\лоад. Используй level.map_add_object_spot_ser.

  • Спасибо 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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