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

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


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

CON, изъясняйся в конце концов не на "своем жаргоне", а на общепонятном языке ... если конечно хочешь получать ответы а не отмазки!

Упомянутую "схему" не видел и нет особого желания.

в худы вещей скрипт спавнит ...
В худ (HUD) ничего не спавнится. "ПОстоянно" спавнит говоришь - ну-ну очень понятно ...

 

CON: как бы мне сделать
- ключевая фраза!

Если именно тебе самому сделать - выше написал как определить "пропажу" детектора из слота и как удалять ... и если что непонятно - спрашивай/уточняй (на нормальном языке!).

Если же ждешь, чтобы "дядя" тебе сделал - ... жди, может кто за тебя и сделает. (Навсякий случай напомню: мы в топике "Школа ...", а не "Стол заказов")

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

 

В следующий раз выбирай соответствующую тему.

ColR_iT

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

Появился вопрос...покопался, поставил зомби на карту ( ну как поставил...вместо кабана). Так вот...он есть на месте, все нормально, но как только я ему с дробовика зарядил в голову...он умер, конечно же, но и я вылетел на рабочий стол с логом:

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

Такой же вылет получал при добавлении БМ16 полного от Псевдыча. Но там разобрался, полностью переписал конфиг, а тут что...Закомментирование строки не помогает, вылет происходит также, но уже ссылается на другой скрипт.

 

А поднять глаза и прочитать это: #8105 - религия не позволяет? --/Artos

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

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

 

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos, самому не по плечу. Но если Вы поможете.))

Принцип я понял. Нужно прописать xml-парсер с инфопоршенями, где скрипт будет искать нужный поршень, и если не найдёт, то с помощью else можно вместо вылета поставить появление сообщения, но вот как этот парсер прописать...

 

"Парсер" от английского слова parse. Переведи слово и ты поймёшь для чего это предназначается.

ColR_iT

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

Artos- Внял Вашему совету и перелопатил тему, все, что я нашел так то, что Ваш пост где пишется ( в _g.script поменять стандартный аборт на то то и то то ). Если я на правильном пути, это хорошо, а если нет, то ткните меня носом я даже не обижусь. Так как если чего-то не знаешь или не умеешь ни когда не поздно научиться ( на то она и Школа ).

А вот LuaChecker-0.3 Может я не правильно пользуюсь? ( Кто и где эту прогу выложил не помню ).

Чекер

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

smeh,

пользуйся другим чекером - script Syntax Checker - есть на stalkerin.gameru.net. Не виснет на больших скриптах и может скрипты проверять группой. :rolleyes:

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

На вопрос "как увеличить коичество трупов в игре" мне сказали что это невозможно... Может кому пригодится но это делается так:

1)Отключение уборщка трупов.

Если у вас машина мощная то для реализма будет самое то... Горы трупов по всей Зоне...

Путь:

папка "gamedata"-> "scripts"-> "xr_motivator.SCRIPT":

Строка:

release_body_manager.get_release_body_manager():moving_dead_body(self.object) --' Distemper 11.02.2008

Её надо закомментировать, чтобы выглядело так:

--release_body_manager.get_release_body_manager():moving_dead_body(self.object) --' Distemper 11.02.2008

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

2)Настройка уборщика трупов.

Способ:

Путь: папка-"gamedata">папка-"skripts">файл-"release_body_manager.SKRIPT"

Строка:

self.body_max_count = 10 -- количество тел которое одновременно может находится в игре

Меняем число на более весомое...и вуаля:

self.body_max_count = 60 -- количество тел которое одновременно может находится в игре

Теперь хабар никуда от вас не денется!

И игра стала НАМНОГО привлекательнее...

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

Nic101

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

А теперь по твоему посту:

Файла release_body_manager.script в игре просто не существует, не по тому, что ты неправильно написал расширение файла, а потому, что разработчики просто такового не создавали. Поэтому и комментировать в файле xr_motivator.script, будет нечего, и открывать собственно также нечего.

Всё бы ничего, но ты не ошибся, т.е. решение действительно рабочее. Но вот есть одна большая проблема: ты не в изначальном вопросе, не в посте выше не указал версию игры, хотя пишешь ты в тему по ковырянию ТЧ (Тень Чернобыля), а не в тему по Зову Припяти, где твой ответ будет актуальным и то с некоторыми оговорками.

Итого:

1. Правильно выбирай тему;

2. Правильно задавай вопрос;

3. Нашёл решение - поделись, а не бросайся полученными знаниями;

4. И пиши, пожалуйста, грамотнее.

Спасибо за понимание.

Изменено пользователем ColR_iT
Ссылка на комментарий
Artos, а я атеист:) Ну глянул я строки над фатал еррором - жалуется на звуки кабана, не прогнанные через сдк. И вылет с зомби точно не из-за этого.
Ссылка на комментарий

ШиЗ, атеизм и тугодумие не взаимоисключающие понятия ....

Я не "кашпировский" и ткнуть в нужную строку твоего лога не могу по причине отсутствия такового твоего лога), но если в логе строка типа:

[error]Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:XXX: bad argument #2 to 'format' (string expected, got no value)

- это однозначно говорит о том, что из некоего скрипта была вызвана функция принудительного прерывания игры _g.abort(...), в которую "виновный" скрипт передал (как правило) свое сообщение. Это сообщение должно (если не закомментированы строки в abort) быть выведено в консоль перед тем, как сама abort выполнит недопустимую операцию по форматированию.

 

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

 

smeh, вот набор функций для включения (замены существующих) в _g.script которые позволяют и выводить любые свои сообщения в лог и при аборте дают информацию:

--/------------------------------------------------------------------
--/ Functions for Print-Log
--/------------------------------------------------------------------
--/ конвертер вывода строки лога
function fFormatToString(fmt,...)
  --/ локальная функция: перевод аргумента в стринг
  local to_str = function(val,typ)
    if typ == 'string' then
      return val --/>
    elseif typ == 'number' then
      return tostring(val) --/>
    elseif typ == 'boolean' then
      return tostring(val) --/>
    elseif typ == 'table' or typ == 'userdata' then
      if tonumber(val.x) and tonumber(val.y) and tonumber(val.z) then
        if typ == 'table' then
          return string.format('tbl{x=%.3f:y=%.3f:z=%.3f}',val.x,val.y,val.z) --/>
        end
        return string.format('vec(x=%.3f:y=%.3f:z=%.3f)',val.x,val.y,val.z) --/>
      end
    end
    return "<"..typ..">" --/>
  end
  --/ основное тело функции: парсинг исходной строки
  if type(fmt) == 'string' then
    if fmt:match('%\%[s|d]') then --/ есть патерн(ы)
      if next({...}) then --/ есть аргумент(ы)?
        local arg,val,typ,i = {...},nil,nil,nil
        for i=1,#arg do
          val = arg[i] --/ значение текущего аргумента
          typ = type(val) --/ тип текущего аргумента
          if typ == 'string' then
            fmt = fmt:gsub('%\%s',val,1)
          elseif typ == 'number' then
            if fmt:match('%\%d') then
              fmt = fmt:gsub('%\%d',val,1)
            else
              fmt = fmt:gsub('%\%s',val,1)
            end
          else
            fmt = fmt:gsub('%\%s',to_str(val,typ),1)
          end
        end
      end
      fmt = fmt:gsub('%\%[s|d]',"<NOT_arg!>") --/ заглушка от отсутствия аргументов
    end
  else
    fmt = to_str(fmt,type(fmt))
  end
  --/ с заменой обычных пробелов (sym_space='\032') на печатные ('\160')
  return fmt:gsub('%s','\160') --/>
end
--/------------------------------------------------------------------
--/ printf (функция вывода информации в лог игры)
--/------------------------------------------------------------------
local console = get_console()

function printf(fmt, ...)
  if not console then console = get_console() end
  console:execute("*INFO:"..string.sub(this.fFormatToString(fmt,...),1,250)) --/ +префикс строки лога (STCS|SCoP: "load ~:")
  console:execute("flush") --/ команда записи буфера лога в файл (в игре можно закомментиировать!)
end
--/------------------------------------------------------------------
--/ Abort (функция принудительного прерывания игры)
--/------------------------------------------------------------------
function abort(fmt, ...)
  printf("ВНИМАНИЕ! Ошибка! Информация по ошибке в строках ниже !")
  printf(string.gsub("ERROR!: "..string.sub(this.fFormatToString(fmt,...),1,250),'%s','\160'))
  assert(false,"ВНИМАНИЕ! Игра прервана! Информация в строках выше.") --/ прерываем с выводом строки на консоль
  exit() --/> прерываем игру при фатальных ошибках
end
--/------------------------------------------------------------------

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

ColR_iT

 

 

1. Ошибся разделом извиняюсь! Перелопатил кучу форумов, и посему крайне невнимательно "кидал" комментарии, везде либо просто игнорируют либо пишут "такого сделать невозможно"

2. Данное решение заработало и на ТЧ

3. Ввеси в гугл названия файлов выдаст сотни вариантов однако можно просто прописать в пустом блокноте эти строчки у меня заработало так...

 

Хотел написать для всех, потому как долго искал и никто о таком не знал...

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

Nic101, не нужно флудить, бесполезная и что более важно, ошибочная информация - никому не нужна!

Помимо того, что в ТЧ без непростой для неопытных модмейкеров адаптации скрипта release_body_manager в игру (потребуется даже в биндер актора влезать), в модах наоборот работаю скрипты-чистильщики трупов и твои потуги/советы по "засорению" локаций в общем то бессмысленны.

И не нужно с упорством твердить, что "это заработало на ТЧ". Не может на ТЧ подобное заработать, что о чем тебе уже разъяснил ColR_iT. Если ты о некоем моде, куда внедрили этот скрипт, то ... предполагаю что читающие этот топик врядли о нем ведают и не обобщай это на ТЧ.

 

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos- Воспользовался Вашим набором функций ( кстати за это благодарю ), вот какой теперь лог

 ! Missing ogg-comment, file:  d:\Игры\сталкер\тени чернобыля\s.t.a.l.k.e.r\gamedata\sounds\characters_voice\scenario\video\intro_gsc_wp_r.ogg
[16-9] get_xml_name for[ui_mm_main.xml] returns [ui_mm_main.xml]
[16-9] get_xml_name for[scroll_bar.xml] returns [scroll_bar.xml]
* DVB created: 1536K
* DIB created: 512K
- r__tf_aniso 16
- r1_tf_mipbias 0.
* SSample: 2048x1526
* SSample: enabled
* GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)
* GPU vertex cache: recognized, 24
*** RESET [161 ms]
"d:\Игры\сталкер\тени чернобыля\s.t.a.l.k.e.r\bin\xr_3da.exe" 
* phase time: 0 ms
* phase cmem: 69516 K
Кэширование объектов...
Loading objects...
Loading models...
* [prefetch] time:    15954 ms
* [prefetch] memory:  84865Kb
* phase time: 16026 ms
* phase cmem: 143511 K
Сервер: Старт...

FATAL ERROR

[error]Expression    : ai().script_engine().functor(start_game_callback,functor)
[error]Function      : CALifeSimulator::CALifeSimulator
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_simulator.cpp
[error]Line          : 64
[error]Description   : failed to get start game callback


stack trace:

Помогите разобраться.

Мои предположения- может это быть из-за того, что в stalker_nebo_1.ltx содержится инклуд не зарегистрированный ни в одном из файлов? Или это бред?

 

Строгое предупреждение от модератора ColR_iT
Сейчас "засунул" под спойлер, в следующий раз просто удалю пост.
Изменено пользователем ColR_iT
smeh..gif
Ссылка на комментарий

smeh, теперь строка лога говорит о том, что в файле _g.script имеется ошибка, отчего и не может стартовать игра.

Проверь правильность вставки функций.

И совет, после ковыряний в файлах скрипта, дабы не терять время - проверяй файлы чекером. Только не тем, который ты упоминал, а "Syntax Checker" (by Gun12), который тебе уже посоветовал Капрал Хикс.

Не смог найти сейчас живую ссылку на этот чекер ... поэтому выложил временно сюда: script Syntax Checker

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Здравствуйте.

Пытался освоить рестрикторы - столкнулся с проблемой - почему-то он не работает. Ума не приложу почему. Вроде бы всё сделал правильно. Вот файлы:

[874]

; cse_abstract properties

section_name = space_restrictor

name = kevsts

position = =122.554,-26.236,-468.079

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 11

distance = 0

level_vertex_id = 130015

object_flags = 0xffffff3e

custom_data = <<END

[logic]

active = sr_idle

[sr_idle]

on_actor_inside = %+stor%

END

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 6.5,0,0

shape0:axis_y = 0,6.5,0

shape0:axis_z = 0,0,6.5

shape0:offset = 0,0,0

; cse_alife_space_restrictor properties

restrictor_type = 3

 

<info_portion id="stor">

<action>text.tester</action>

</info_portion>

 

function tester(first_speaker, second_speaker)

news_manager.send_tip(db.actor, "%c[255,255,128,128]Блаблабла:\n%c[default]Проверка", nil, nil, 30000)

end

 

Не подскажете, в чем может быть ошибка? Вроде бы всё правильно, но при заходе в точку ничего не происходит, текст не высвечивается.

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

MIDERY

Во-первых, из рестриктора можно вызывать и функцию напрямую, но она должна быть в файле xr_effects.script, вот так:

on_actor_inside = %=tester%

И функцию измени, чтобы не принимала никаких аргументов, вот так:

function tester()
    news_manager.send_tip(db.actor, "%c[255,255,128,128]Блаблабла:\n%c[default]Проверка", nil, nil, 30000)
end

Во-вторых, ты темой ошибся.

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

Идёт вылет, если пробывать сделать, как вы сказали

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: e:\s.t.a.l.k.e\gamedata\scripts\_g.script:21: bad argument #2 to 'format' (string expected, got no value)

 

Перепрочти сообщения на этой странице пару раз - может тогда будет понятна никчемность твоего лога для понимания проблемы/ошибки и что же нужно для этого. --/Artos

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

MIDERY

Ругается на эту запись

position = =122.554,-26.236,-468.079

"= =" такого выражения не существует.

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

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

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

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

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

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

Войти

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

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

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