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

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


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

Вопрос: что надо сделать, чтобы НПС не считали "костёр" аномалией, а то я поставил мод обход аномалий, так НПС теперь к костру не могут подойти :D

 

Сталкер v 1.004 + Народная Солянка от 14.06 + патч № 0.1 (на 19.06) + ВСЕ ДОПОЛНЕНИЯ СОЛЯНКИ ПО 08.08 + ДОПОЛНЕНИЕ ОТ 10.09 + патч от 17.09 + мод от Monnoroch ( v 1.5.2) + фикс для него

 

добавить в список исключаемых из обхода аномалий - zone_flame_small

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

Gonarh, Мне!!!

Мне в личку!Как в паскале Н-мерный массив создать!Я уже давно бьюсь :)

ты сможешь при помощи них создать n-мерный массив? Т.е массив с заранее неизвестным количество измерений.

Смотря в какой версии. В исходном языке нельзя, и число размерностей задаётся заранее. В последних версиях, которые базируются на .NET, уже используются типы дотнетовские. Там и многомерные динамические массивы есть. За подробностями - в какую-либо книжку. Я сам Delphi не использую, так что просто заглянул в первую попавшуюся. Вот к примеру "Архангельский А.Я. - Delphi 2006. Справочное пособие"

 

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

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

 

Ещё. Для множественных конкатенаций строк рекомендую использовать функцию string.format. Это на порядок производительней, плюс дополнительные возможности по форматированию.

 

лежит распечатанное на раб. столе.

А я никогда не печатаю, мне деревьев жалко =)

 

 

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

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

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

 

malandrinus

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

 

а string.format'oм я позже отформатирую.

 

Вопрос тут созрел - спрашиваю не для себя - челу одному на SP нужно - аномалии скриптовые как удалять?

лично я припоминаю что есть disable_anomaly() но сам им не пользовался. Если все сгенерированные аномалии в табличку занести, а потом их через disable по айди удалять - сработает? Если да, то скрипт я ему накидаю.

И кстати чем отличается clsid.wpn_ak74_s от clsid.wpn_ak74 - этот к примеру просто.

а то захотел создать функцию для проверки объектов на класс аномалий - наподобие isWeapon() или isStalker() но пока не разобрался какие идентификаторы классов мне использовать.

 

...кому что удобнее. Лично мне наглядность нужна, а не абстракция

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

 

Вопрос тут созрел - спрашиваю не для себя - челу одному на SP нужно - аномалии скриптовые как удалять?

лично я припоминаю что есть disable_anomaly() но сам им не пользовался.

Удалять любые объекты можно функцией alife():release().

disable_anomaly() будет, как понятно из названия, только отключать аномалии, но не будет удалять объекты.

 

И кстати чем отличается clsid.wpn_ak74_s от clsid.wpn_ak74

clsid.wpn_ak74 - идентификатор встроенного класса, clsid.wpn_ak74_s - для скриптового класса, зарегистрированного с помощью object_factory. Почитай об этом в теме "справочник по классам"

 

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

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

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

 

Товарищи скриптеры, к Вам вопросец. Нужен простенький скрипт который при наличии определенного предмета присваивает локальной переменной true. При отсутствии этого предмета false.

у кого у непися или у ГГ?

если у ГГ то так:

local has_item = db.actor:object("af_electra_moonlight") --проверяем наличие арта Лунный свет

если у непися -

local has_item = npc:object("af_electra_moonlight")
--npc - это объект непися

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

malandrinus

благодарю за пояснения.

Окей буду стараться впредь по уму ошибки искать. :rolleyes:

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

Gonarh Нужен простенький скрипт который при наличии определенного предмета присваивает локальной переменной true. При отсутствии этого предмета false. Самого этот вопрос интересует вот и решил поддержать его. И еще вот функция:

function global_bind_clock()
if db.actor ~= nil then
return db.actor:object("clock") ~= nil then
db.actor:give_info_portion("clock_activ")
end
return false
end

Где здесь ошибка?

Изменено пользователем кровоSTALKER

смотри внимательней вместо then ... else ты написал then ... then

 

ладно, раз пошли такие пляски вот функция

function has_item(item_name, npc)
  if npc == nil then npc = db.actor end
  return npc:object(item_name) ~= nil
end

 

юзать так:

has_item("af_blood") - для ГГ

has_item("af_blood", npc) - для непися, где npc это объект того сталка у которого хотим прверить наличие предмета

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

О... Да да, точно...

UPD:

Мне нужно вынести ту фунцию (

function global_bind_clock()
if db.actor ~= nil then
return db.actor:object("clock") ~= nil then
db.actor:give_info_portion("clock_activ")
end
return false
end

) в глобальный апдейт ака апдейт через бинд_сталкер.скрипт, но когда я добавляю ее в апдейт (в функции актор_биндер_апдэйт(дельта)) при начале новой игры игра зависает. Как с этим бороться? Итем за именем clock был создан.

Изменено пользователем кровоSTALKER

потому что ты неправильно её написал, вот смотри

function global_bind_clock()
  if db.actor ~= nil then
    return db.actor:object("clock") ~= nil
  else
    --получается по условию у тебя тут db.actor равен nil а ты пытаешься юзнуть метод give_info_portion нила
    db.actor:give_info_portion("clock_activ")
  end
  return false
end

 

 

перечитай еще раз что я написал

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

Ну, я её исправил еще когда ты первый раз мне сказал.

function global_bind_clock_update()
if db.actor ~= nil then
return db.actor:object("clock") ~= nil
else
db.actor:give_info_portion("clock_activ")
end
return false
end

Изменено пользователем кровоSTALKER

кровоSTALKER,

осталась:

else

db.actor:give_info_portion("clock_activ")

end

в эту часть ветки if

ты попадаешь только если db.actor РАВЕН nil

и тогда нет смысла в

db.actor:give_info_portion("clock_activ")

должно быть что то вроде этого:

if db.actor ~= nil then
    if db.actor:object("clock") ~= nil
        return true
    else
        db.actor:give_info_portion("clock_activ") -- это код сработает когда  db.actor ~= nil И db.actor:object("clock") РАВЕН nil
    end
else
    return false
end

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

Всем привет! С дллями разобрался, как мог. Возникли три вопроса по скриптам.

 

1. Можно ли скриптом разрешить трупу/с трупа жрать аптечку? Чтобы на 6 патче не вылетало.

 

2. В 7 mp-патче значительно ускорен курсор в менюшках - очень резво реагирует на движение мышки, удобней вобщем. В его xrgame.dll добавлена такая фишка: CUICursor::UpdateCursorPosition. В 4 и 6 патче такого нет. Можно ли скриптом добавить "акселерацию" мышки в меню?

 

3. Нужен скрипт для переключения оружия из одного слота без захода в инвентарь: то есть, допустим, у нас в руках автомат и в рюкзаке автомат. Нажимаем на 3, и оружие меняется.

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

Нет, что-то вылетает...

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: ...g\s.t.a.l.k.e.r\gamedata\scripts\xr_motivator.script:111: attempt to index global 'xiani_config' (a nil value)

 

что делать?

Изменено пользователем кровоSTALKER

кровоSTALKER,

у меня такая ошибка

attempt to index global

выскакивала когда делал ошибку в синтаксисе скрипта (лишняя скобка, не хватает где то "end" и т.д.)

Arguments : LUA error: ...g\s.t.a.l.k.e.r\gamedata\scripts\xr_motivator.script:111: attempt to index global 'xiani_config' (a nil value)

что делать?

Показывай скрипт xiani_config

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

Вот содержание ксиани_конфиг:

-- показывать время на экране

local ui_show_time = time

end

 

function on_time()

if db.actor:has_info("clock_activ") then

time = true

end

 

-- показывать полоску радиации

ui_show_rad = false -- show radiation bar

 

-- выделять раненых сталкеров на мини-карте

wounded_add_mapspot = true -- to show or not animated mapspot on wounded friendly and neutral npc

 

-- включить уборщик трупов и оружия

cleanup_corpses = false

 

-- восстанавливать солнце

restore_sun = true

 

-- динамическая погода

weather_manager = false

 

-- встречать по одежке

use_outfit_evaluator = true

 

-- not working yet... added for future use

random_starttime = true

spawn_smart_monster_parts = false

 

Тут не 111 строк, это точно видно... Вот что я добовлял.

Изменено пользователем кровоSTALKER

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

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

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

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

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

Войти

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

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

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