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

Справочник по функциям и классам


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

TRAMP14, =VENOM=, эта аргументы с которыми ты вызываешь функцию. В данном случае это числа. То что это float было важно для С++, в сткЛуа все числа являются float-ами

Vita sine libertate, nihil

Vita sine litteris - mors est

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

RvP,

То что это float было важно для С++, в сткЛуа все числа являются float-ами

Это в Lua всё одного типа, а при передаче внутрь происходит преобразование в указанный тип C/C++. Т.е. при описании я давал тип аргументов и возвращаемых значений самих движковых функций. Это важно для того, чтобы вы понимали, какой именно природы должны быть аргументы и что именно ожидать в качестве результата функции.

 

Уже говорил, но повторюсь. Из-за того, что функции движковые, но используется из Lua, выходит по-нормальному описание типов не дать. Названия типов и классов в большинстве случаев изменены, поэтому не будет никакого смысла указывать реальный движковый тип, поскольку большинству это ни о чём не скажет и только запутает. Кроме того, не все понятия С/С++ имеют внятный эквивалент в Lua. К примеру ссылки/указатели всяко преобразуются в просто ссылку Lua. Или скажем строковому типу Lua string, в С++ соответствует три разных типа С++ да ещё с вариациями указатель/ссылка, ну и т.д.

 

По этой причине принятый язык описания - это "псевдо C/C++", т.е. нечто в стиле С++, но строго стандарту языка не соответствующее. Для тех же строк для простоты указывается просто тип Lua string без лишних заморок с указателями/ссылками. Это вероятно может запутать или вызывать раздражение у пуристов, но в оригинале в lua_help.script было ещё хуже.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
Если кто сможет выяснить условия работы этого метода - обязательно отпишитесь здесь

Насчет move_to()-метод работает, хотя не со всеми партиклами корректно. Некоторые не перемещал вообще, либо перемещал, но весьма криво - например часть партикла(если это pg) остается на месте - другая движется, либо вместо движения - создается несколько визуальных объектов, которые никуда не движутся.

local bPlay = false 
local iCountUpdate =0
local iPos
local iDir
local gObj
local oPart= particles_object("static\\zharka_static")

--// апдейтим
function MoveParticle(sid)
gObj = sid and level_object_by_sid(sid) or db.actor
if not gObj then return end 
   if bPlay then
      if not iPos then 
      iPos = gObj:position()
      iDir = gObj:direction()
      end

      iCountUpdate=iCountUpdate+1
      if  iCountUpdate==20 then 
--// через каждые 20 циклов апдейта меняем направление движения и позицию (на 1 метр)
      iDir = vector_rotate_y(iDir, math.random (-15, 15))
      iPos=iPos:add(iDir:mul(1)) 
      iCountUpdate=0 
      end 
  --// перемещаем
      local val = not oPart:playing() and oPart:play_at_pos(iPos) or oPart:move_to(iPos,iPos);
--// выключаем 
      else
      if oPart and oPart:playing() then 
      oPart:stop() 
      iPos=nil 
      iDir=nil
      end
   end
end

--/ вкл/выкл партикл :-)
function StartStop()
bPlay = not bPlay
end

 

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

Вызывается ли метод on_unregister() для людей и мутантов после вызова on_death()? Если нет, удаляются ли они движком из раздела "рейтинг" в PDA?

 

И ещё: почему при перегрузке метода on_before_register() его вызов из движка убрали? Т.е. cse_alife_human_stalker.on_before_register(npc) больше не вызывается. Можно ли его вернуть обратно без вылетов?

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

Garry_Galler Скажу про партиклы:

Тут дело в партикле а не в методе передвижения. Я вчера делал шаровую молнию и привязывал ее к разным anm файлам в СДК ПЕ. Было так как ты и говоришь (пишешь)

создается несколько визуальных объектов, которые никуда не движутся
Я поступил так, поставил такие параметры:

Мах Партицлес 70

Рате 1000

Килл Олд 0,01

Все. Теперь любой скорости хватает чтобы сам партикл "успевал" за перемещением ;) (проба была на тех анм что есть).

Так что нужно переделывать сами партиклы...

И кстати при таких условиях никак нагрузок на ПК нету. Если повысить Килл олд до 0.1 то будет :)

 

Пост можно объединить с постом Garry_Galler чтобы без дела не болтался ;)

Мой архив

Сталкером не занимаюсь.

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

Есть небольшой вопрос.Только ответьте пожалуйста.Как через скрипт выдать инфопорцию скажем после смерти сталкера?

Создаю глобальный мод с новыми локациямЭ

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

Делаем секцию [known_info] в customdata сталкера и в ней (то есть после этой строки) пишем имена выдаваемых инфопоршней. Делается это через all.spawn. Если NPC заспавнен через скрипт, тогда надо через net_packet'ы записывать ему customdata. Как именно - не знаю.

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

strelok200,

Как через скрипт выдать инфопорцию скажем после смерти сталкера?

Также, как и до смерти. Почитай статью про game_object. Там есть функция для этого.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

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

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
Да кстати и убить в оффлайне ещё постараться надо, а движок сам ничем таким не занимается.

Я имел в виду АМК мод - там всё это реализовано, но обработку инфопоршней не видел.

В движке (классы cse_alife_human_stalker, cse_alife_monster_*) есть функция on_death, которая вызывается, если существо (сталкер или зверюшка) сыграло в ящик. Можно было бы сделать что-нибудь вот такое:

local infotable = {}
--' Формат: infotable[npc:name()] = "info_portion"
function on_death(killer)
   cse_alife_human_stalker.on_death(self, killer)
   if db.actor ~= nil and infotable[self:name()] ~= nil then
      db.actor:give_info_portion(infotable[self:name()])
  end
--' Тут можно вставить вызов других функций, например news_main.on_offline_death(self, killer)
...
end

Короче говоря, сопоставить имени (или другому критерию) объекта инфопоршень и выдавать его когда надо. То же самое можно сделать для on_spawn() - выдавать инфопоршень при появлении объекта.

 

P.S. кстати, пробовал для этих классов перегружать функции health() и alive() - ругается на pure virtual call

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

Полтергейст, что тебе мешает сделать выдачу инфопоршня после смерти непися через его логику? За это как раз и отвечает параметр on_death.

[logic]

active = активная_схема

on_death = death

 

[death]

on_info = %+инфопоршень%

 

[активная схема]

бла-бла-бла

 

 

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

Логика работает только в онлайне, а здесь нужно в оффлайне. Так что не годится.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Сегодня обнаружил, что класса CInfoDocument почему-то нет в lua_help, хотя в xr_game.dll он упоминается. Вот никак не пойму, есть он или нет.

То же самое с CAttachableItem, CMedkit, CAntirad, CFoodItem, CBottleItem, CExplosive, CPda и некоторыми другими.

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

Полтергейст,

Он есть, просто не экспортирован в скрипты. У негo конфиговое имя сета II_DOC и скриптовое clsid.obj_document. Т.е. создать такой объект можно.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

И ещё такой вопрос: как определить, какой класс можно перегрузить, а какой нет? Вот, к примеру, есть такой сет: "CActor", "se_actor.se_actor", "O_ACTOR", "actor", но он (скрипт) не работает. А если я напишу так

 

"CActor", "se_actor.se_actor", "S_ACTOR", "actor_s"

это что-нибудь изменит? Или проблема не жёстко прописаном в движке конфиговом имени класса (O_ACTOR), а в самом классе cse_alife_creature_actor?

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

Полтергейст,

ты говоришь о "перегрузить" или о "создать свой сет" ? Это связанные, но всё-таки разные вещи. Перегружать или точнее наследовать можно только от серверных классов. От клиентских производные классы создавать нельзя. Сеты можно создавать как на основе перегруженных серверных, так и на основе базовых движковых (хотя в этом вероятно нет особенного смысла, поскольку такие сеты и так уже имеются). Основным условием возможности создания сета является наличие серверного и клиентского классов. Они должны друг другу строго соответствовать, произвольные сочетания недопустимы. Таким образом для примера с классом актора ситуация следующая. И клиентский и серверный классы в движке как были, так и есть во всех версиях. Серверный (cse_alife_creature_actor) экспортирован в скрипты во всех версиях и унаследовать можно во всех (правда без сета это ничего не даст), а вот клиентский в ТЧ не экспортирован, а в ЧН и ЗП есть. Там где есть, там соответственно можно и сет сделать и уже сделан с именем "S_ACTOR".

 

Большую часть сказанного я кстати рассказывал в статье про object_factory.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

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

Помнится, когда-то я писал про "потерю из вида" движком методов класса se_smart_terrain. Сегодня я снова столкнулся с этой проблемой, но на этот раз разобрался. Оказывается, в классе cse_alife_monster_base есть поле m_smart_terrain_id, но оно не экспортировано. И так получилось, что во время своих эксперементов я создал в классе se_stalker поле с таким же именем. После этого игра не загружалась - вылетала с руганью на отсутствие того или иного метода класса se_smart_terrain. Как только я поменял имя этой переменной на другое - эти вылеты сразу исчезли, всё заработало.

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

Полтергейст,

Оказывается, в классе cse_alife_monster_base есть поле m_smart_terrain_id, но оно не экспортировано.

Это поле есть в классе cse_alife_monster_abstract, который является базовым для всех монстров и людей. Таким образом, это поле есть во всех унаследованных и в том числе в cse_alife_monster_base, который является базовым только для монстров. Конечно не надо пытаться создавать своё поле с таким же именем.

Хм. Похоже моё описание в этой теме устарело. Я там написал, что это поле есть начиная с ЧН, но оно есть и в ТЧ, просто не используется и не документировано.

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

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

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

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

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

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

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

Войти

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

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

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

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