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

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


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

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

IQDDD Да, вчера ночью добил, всё снял, прописал, установил, теперь с вылетами воюю.Спасибо.

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

Borsalino, так вы all.spawn смогли разобрать? Или нет?

 

Добавлено через 1 мин.:

Явно не объявленная переменная будет глобальной по всей игре?

 

Добавлено через 61 мин.:

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

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

IQDDD

Вылет с жалобой на "attempt to index global 'ХХХ' (a nil value)", где ХХХ - имя скрипт-файла у меня чаще всего (чтобы не сказать всегда) бывает из-за синтаксических ошибок. Скобку там забыл закрыть, end какой-нибудь забыл прописать, в if...then вместо "==" поставил "=" или что-то вроде этого.

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Вот кусок кода:

ObjSpawn = alife():create(section,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id())

if NumObjectsFramedThroughTitles == nil or NumObjectsFramedThroughTitles == 0 then

NumObjectsFramedThroughTitles = 1

else

NumObjectsFramedThroughTitles = NumObjectsFramedThroughTitles + 1

end

ObjectsFramedThroughTitles = {}

ObjectsFramedThroughTitles[NumObjectsFramedThroughTitles] = ObjSpawn

news_manager.RealLog("NPC №"..ObjSpawn:id().." enable")

if not has_alife_info ("enabled_timer") then

StartMinutes = tonumber(level.get_time_minutes())

db.actor:give_info_portion("enabled_timer")

news_manager.RealLog("Start time "..tostring(StartMinutes))

end

 

Как видим, сначала мы спавним чувака. Потом запоминаем его в таблицу ObjectsFramedThroughTitles под индекс 1. При попытке получить ID объекты происходит вылет, что метод не найден!!!! Чё делать? Чё за косяк?

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

по всей видимости непись не успел перейти в онлайн

попробуй вместо ObjSpawn:id() юзать ObjSpawn.id

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Ссылка на комментарий
ObjSpawn = alife():create()

...

ObjSpawn:id()

Это серверный объект, а ты пытаешься вызвать метод клиентского. Используй свойство id, а не метод id().

 

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

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

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

 

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

Уф... давай сначала. Вот код:

ObjSpawn = alife():create(...)

...

ObjSpawn:id()

Первая строка - это создание пользовательского игрового объекта с помощью вызова alife():create(...). create возвращает серверный объект. Это факт, хотя об этом и так можно догадаться - объект же создаётся на серверной стороне. Далее для этого объекта вызывается метод ObjSpawn:id(). Но у серверного объекта нет метода id, у него есть свойство. А к свойству нужно обращаться иначе: ObjSpawn.id

 

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

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

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

 

Ссылка на комментарий
Это серверный объект, а ты пытаешься вызвать метод клиентского

вопрос на засыпку: клиентский/серверный объекты, это не тоже самое что объект в оффлайн/онлайн?

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Ссылка на комментарий
вопрос на засыпку: клиентский/серверный объекты, это не тоже самое что объект в оффлайн/онлайн?

оно родимое =)

серверный == оффлайновый

клиентский == онлайновый

я в коде обычно подчёркиваю это добавляя к имени переменной префикс 'c' - для клиентского и 's' - для серверного: cobj/sobj

 

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

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

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

 

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

Ура!!!! Всё сделал: непись появляется и дохнет через три минуты:

 

function main_menu:OnButton_credits_clicked()
    local ObjSpawn
    local long = 1
    local section = "sim_default_duty_"..math.random(0,4)
    local prob = 101
    if math.random (1,100) < prob then
        local ArLong = {
            [0] = 2.5,
            [1] = 3.5,
            [2] = 4.5,
            [3] = 9
        }
        local obj = db.actor
        local dir = vector()
        local pos = vector()
        pos = obj:position()
        dir = obj:direction()
        pos.x = pos.x - dir.x * ArLong[long]
        pos.z = pos.z - dir.z * ArLong[long]
        ObjSpawn = alife():create(section,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id())
        if kill_object_id then
            number_obj_kill = number_obj_kill + 1
            kill_object_id[number_obj_kill] = ObjSpawn.id
        else
            kill_object_id = {}
            number_obj_kill = 1
            kill_object_id[number_obj_kill] = ObjSpawn.id
        end
        db.actor:give_info_portion ("enabled_timer")
        StartMinutes = tonumber(level.get_time_minutes())
    end
end

function timer1()
--проверка неписей    
if has_alife_info ("enabled_timer") then
    if StartMinutes == tonumber(level.get_time_minutes()) - 3 then
        RealLog("Disabled info")
        db.actor:disable_info_portion ("enabled_timer")
        local i
        local obj
        RealLog (number_obj_kill)
        for i = 1, number_obj_kill do
            obj = level.object_by_id(kill_object_id[i])
            RealLog(kill_object_id[i])
            RealLog(obj:id())
            RealLog(obj:character_community())
            obj:kill(obj)
            number_obj_kill = 0
        end
        kill_object_id = nil
    end
end
end

 

 

Но вот вопросы:

1. Насчёт метода kill(). В параметрах метода указывается игровой объект. Зачем, если метод применяется к объекту? Что за объект указывается в скобках? Мб, убийца?

2. При вызове метода kill() непись убивается: её здоровье снижается до нуля. Как скриптом нанести неписю урон в голову (ногу, руку, пах...)?

Ссылка на комментарий
2. При вызове метода kill() непись убивается: её здоровье снижается до нуля. Как скриптом нанести неписю урон в голову (ногу, руку, пах...)?

Есть метод hit, у него есть единственный параметр - это объект класса hit (см. LuaHelp). У класса hit кроме типа урона и импульса есть ещё и метод bone, который очевидно отвечает за часть тела.

 

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

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

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

 

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

Доброго времени суток!

 

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

 

- где зашито "дыхательное" раскачивание оружия? В самом стволе (idle-анимация)? Или где-то в конфигах/скриптах?

 

- Возможно ли скриптом ограничить возможность поворота ГГ с отдельно взятым стволом в руках? Скажем на 90° по гор. и 45° по вер.

 

- Возможно ли, при подбирании ствола, класть его принудительно в слот, а не в инвентарь? Причём независимо от того, что в руках. Скажем в руках АК/нож/граната/болт, подбираем ствол - АК/нож/граната/болт уходит в рюкзак, ствол появляется в руках.

 

Заранее спасибо за ответы!

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

www.amk-zone.de

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

И как написать? Мб, так:

local a = vector ()

a = db.actor:direction()

a.x = -a.x

a.z = -a.z

obj:hit(a,nil[что такое draftsman?],400,0.5,2[это, как я понимаю, константа типа урона пулей. Правильно?]):bone("bip01_head")

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

Есть вопрос. Каким образом повредить или наоборот "починить" предмет скриптом?

 

И еще один. Как добавить окошко (по типу "выбросить") в инвентарь, и назначить на него действие?

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

Посмотри пример в xr_motivator.script. У меня он начинается со строки 296. (версия АМК)

 

Есть вопрос. Каким образом повредить или наоборот "починить" предмет скриптом?

И еще один. Как добавить окошко по типу "выбросить" в инвентарь, и назначить на него действие?

Для онлайнового объекта (game_object) есть метод set_condition. Вроде бы им можно. Для оффлайнового можно использовать нетпакеты.

 

Окошко вероятно можно сделать также, как это сделано для матраса. Поищи в топике или в архиве.

 

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

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

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

 

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

Господа,всем здрасте.Есть тут кто-нибудь из Новосибирска?Пытаюсь разобраться в СДК,но не хватает серого вещества))) :dash2::dash3: .ОЧЕННО нужна помощь!Кто-нибудь готов взять шефство над бездарем?

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

и снова вопрос по аптечкам

вот кусок из xr_wounded

function Cwound_manager:eat_medkit()
  if self.can_use_medkit == true then
    local medkit_eaten=false
    if self.npc:object("medkit") ~= nil then
      self.npc:eat(self.npc:object("medkit"))
      medkit_eaten=true
    elseif self.npc:object("medkit_army") ~= nil then
      self.npc:eat(self.npc:object("medkit_army"))
      medkit_eaten=true
    elseif self.npc:object("medkit_scientic") ~= nil then
      self.npc:eat(self.npc:object("medkit_scientic"))
      medkit_eaten=true
    end
    if medkit_eaten then
--      amk.mylog("medkit eaten be "..self.npc:name())
      local sobj=alife():object(self.npc:id())
      sobj.wounded=false -- позволяем выйти из состояния раненности
      self.medkit_eaten=true
      self.can_use_medkit = false
    end
  end
  self:hit_callback()
end

он отвечает за непосредственное лечение НПС ?

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

Свободу всем Даром!

Моя Зона Full Realism Mod STSoC by Wolkolak

"Безвыходных ситуаций не существует в принципе."(с) Ред Шухов

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

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

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

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

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

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

Войти

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

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

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