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

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

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

@Zander_driver можешь какой-нибудь гайд подсказать? Порылся в нете, потом в коде, и вроде ничего по существу не нашел. 

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

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

Гайд по... передаче инфы в лог? :blink: стесняюсь спросить, а какой информации ты ждешь от такого гайда? Ответы на какие вопросы хочешь там найти?

Я честно, без стеба или чего такого, не понимаю. Может быть, конкретизируй свой вопрос?

printf(твое_сообщение) // или

log(твое сообщение) // или

log1(твое сообщение) // в OGSR почему-то называется так, или на худой конец

console():execute('load ~~~'..твое сообщение) // так делали в древних модах на 1.0004

Вот и все, вроде бы. В консоли их тоже видно. Все 4 варианта. В коде любого мода и оригинала, примеров море. Какие вопросы здесь возникают?

 

  • Полезно 1
  • Смешно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Пытаюсь вернуть часть денег за покупку у торговцев. Но функция срабатывает со 2 покупри. Может кто посмотреть что не так.

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

function round(amount)
    return math.floor(amount + 0.5)
end

local actor_last_money = 0

function actor_binder:on_trade(item, sell_bye, money)
    if sell_bye == true then
    game_stats.money_trade_update(money)
    else
    game_stats.money_trade_update(-money)
end
    if sell_bye then
    actor_last_money = db.actor:money()
    return
end
    local function cashback()
    local money = db.actor:money()
    local cashback = round((actor_last_money - money) * 0.3)

    if cashback < 1 then
    actor_last_money = money
    return true
end
    db.actor:give_money(cashback)
    local news_text = gts(tostring(cashback))
    local msg = "\\n"..news_text
    db.actor:give_game_news(msg, "ui\\ui_iconstotal", Frect():set(581,376,83,47), 0, 10000)
end
end

 

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

@Colder 1. форматируй код так, чтобы закрывающий элемент был на одном уровне с открывающим. Трудновато читать твои примеры взглядом, лишний раз это делать не хочется.
2. Где вызывается функция cashback()? В какой момент? Ни малейших следов вызова не представлено, опять с тобой приходится играть в гадалки.
3. По существу: при первой итерации у тебя local actor_last_money = 0, поэтому ты сваливаешься в условие "if cashback < 1 then" со всеми вытекающими.

  • Нравится 2
Ссылка на комментарий

@Zander_driver Видимо, я чего-то не догоняю, но не могу понять в какой лог printf выводит информацию. В логе _appdata_\logs\xray_user.log ничего не появилось после исполнения функции и выхода из игры.

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

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

@Balavnik именно в тот лог и выводит. А вообще, было предложено 4 варианта (3 без модифицированных движков), но вопрос почему-то возник только по одному из них. Остальные, видимо, не пробовал?

В конце концов, если приспичило использовать именно printf, но штатный вариант по каким-то причинам не срабатывает, можно сделать переопределение самым топорным и древним вариантом, на который уже указывал @Zander_driver.

local console
printf = function(fmt,...)
  if not console then console = get_console() end
  console:execute("load ~:"..string.format(fmt,...))
end

И добавить это в самый конец _g.script.

  • Нравится 3
  • Полезно 1
Ссылка на комментарий

Гайс, ай хэв а проблемс.

Заспавнил(через скрипт) я значит НПС, в деревне новичков. 

Всё прописал как надо, по народному:russian_ru:. В spawn_sections.ltx прописал ему custom_data = esc_torgash.ltx, но она не работает. Персонаж тупо идёт в разрушенный домик, где толик должен сидеть, и стоит там. Диалоги тоже, от охранников из деревни новичков(что-то вроде "Меченый вали с глаз долой...").

Вероятно это происходит из-за "присасывания" к свободной работе в террейне. Но решения я так и не нашёл. Что бы ни делал, и террейн деревни удалял и много чего ещё. Хеелп!

Вот из spawn_sections.ltx:

Цитата
[esc_torgash]:stalker
$spawn				=  "respawn\esc_torgash"
character_profile	= esc_torgash
spec_rank = regular
community = stalker
custom_data = scripts\esc_torgash.ltx

 

Вот логика из esc_torgash.ltx:

Цитата
[logic]
active = walker@torg

[walker@torg]
path_walk = walker_stay_at_position_walk	; 
path_look = walker_stay_at_position_look	; Эти строки взял на форуме в теме по созданию НПС
meet = meet@start

[meet@start]
meet_state		= 15|guard@wait
meet_state_wpn	= 15|backoff@threat_weap
victim		= 15|actor
victim_wpn		= 15|actor
use			= true
use_wpn		= false
syndata		= backoff@threat_weap
meet_dialog = {-trader_shurik_start_end} trader_shura_start, hello_dialog
  • Не нравится 1

"Do you like what you see?" © Billy Herrington

Boneset-HQ.gif

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

@boneset-hq надо запретить ему заходить в смарты.
Это пишется в кастом дате персонажа в all.spawn, но никак не в ltx файле.

То бишь надо написать:
[smart_terrains]

none = true

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

@imcrazyhoudini 

Проблема в том что я спавню НПС через скрипт, поэтому в all.spawn у меня его нету. Другого способа нету? Или придётся мучиться с all.spawn'ом?

"Do you like what you see?" © Billy Herrington

Boneset-HQ.gif

Ссылка на комментарий
4 минуты назад, boneset-hq сказал:

я спавню НПС через скрипт

И кастом-дату можно записать через скрипт.

В OGSR напрямую, а в более древних движках через нетпакет.

  • Нравится 1
  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
2 часа назад, boneset-hq сказал:

Или придётся мучиться с all.spawn'ом?

а что там мучиться, если у тебя оригинал ТЧ стоит, берёшь распаковщик и разбираешь спавн ACDC, поправил и запаковал снова, с распаковкой спавна некоторых модов там где классы менялись да могут возникнуть проблемы, но ручками подправить файлы самого распаковщика надо будет, кстати там же в аллспавне и файлы вей-поинтов ,которые тебе тоже нужны будут, чтоб направить непися туда куда нужно path_walk и path_look, мучиться это если пересобирать и править кучу секций в спавне, а тебе пару строк поправить)

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

Вечер добрый, знает кто-нибудь как реализована визуальная отдача у оружия в моде AA 2.1?

(тряска камеры с блюром)

Изменено пользователем Stalkeruga_238
Ссылка на комментарий
50 минут назад, Stalkeruga_238 сказал:

Вечер добрый, знает кто-нибудь как реализована визуальная отдача у оружия в моде AA 2.1?

(тряска камеры с блюром)

Смотри скрипт rx_shoot_enable.script

Добавлено  Купер,

Изучите "Правила цитирования". https://www.amk-team.ru/forum/topic/13514-obyavleniya/

 

  • Полезно 1
Ссылка на комментарий

По какой-то неизвестной причине значение, аргумент npc некоторой функции kill1(npc) является nil, даже если я туда подаю second_speaker, зная, что он не равен nil. В чём может быть ошибка?

 

Проблемы притягиваю со страшной силой...:dance2:

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

Ссылка на комментарий
3 часа назад, Balavnik сказал:

По какой-то неизвестной причине значение, аргумент npc некоторой функции kill1(npc) является nil

А можно увидеть текст вылета? :)

Что-то мне подсказывает, что причина его (вылета) немного в другом.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@Zander_driver Вот

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

function kill1(npc)
    --local npc = db.actor
    local a = vector()
    local pos = npc:position()
    local text
    local ab = 1
    text = "load ~"..a.pos
    printm(text)
    npc:kill()
end

P.s. уже разобрался, что a.pos возвращает nil. Исправил. Однако появился новый вопрос - почему npc:kill() не убивает персонажа(Напр. Фаната)

P.s.s. Извиняюсь за глупые вопросы, для меня эта тема особенно сложная.

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

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

@Balavnik Ну давай разбираться.
 

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


function kill1(npc)
    --local npc = db.actor
    local a = vector() -- Ты же в курсе, что это просто пустой вектор, без значения? Ему ничего не присвоено.
    local pos = npc:position() -- Ок, тут у нас позиция нпс, ЕСЛИ npc - это клиентский объект (Такой метод емнип только там есть)
    local text -- Объявил переменную, ок.
    local ab = 1 -- Что это, зачем? Нигде не используется.
    text = "load ~"..a.pos --В векторе нет поля pos, поэтому естественно здесь будет nil. (А вылета concatenate string with nil тут не возникло? странно. Должно было вылететь здесь)
  --В векторах как правило есть поля x, y, z. НО, при условии что вектор имеет значение. Вектор a никакого значения не имеет, и пытаться его читать бессмысленно.
    printm(text) -- это своя обертка для вывода в лог? Ладно, ОК. Только выводится text который не содержит никакой полезной информации.
    npc:kill() -- А здесь у объекта npc вызывается метод kill. 
  	-- И здесь внимание. Результат зависит от того, ЧТО за объект ты передал в функцию. Вызываем-то у него.
  	-- Если передал клиентский объект. То у него нет такого метода, и будет вылет attempt to call 'kill' a nil value. Или как-то так.
  	-- Если же передается не клиентский объект, то у него не будет метода position и аналогичный вылет будет несколькими строками раньше.
  	-- Подводя итог - определись, ты хочешь Фаната грохнуть в онлайне или в оффлайне. В зависимости от этого и выстраивать свои действия, с каким объектом работать. ЕМНИП, серверный метод kill не на всех версиях движков работает, мб дело в этом. 
end 


 

Полезно будет разобраться в различиях между клиентским и серверным объектом, разном ассортименте методов и возможностей у них.

 

  • Нравится 2
  • Полезно 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Метод "убить" для онлайн-объектов требует записи жертва:kill(убийца), в противном случае не срабатывает.

Если не хочется портить отношения с группировками, надо оформлять убийство NPC как суицид.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
31.01.2024 в 19:12, Zander_driver сказал:

Ну давай разбираться.

И не лень расписывать это все?) Вопросы очевидные, тут документацию только читать, читать и еще раз читать.

  • Нравится 1
  • Согласен 1
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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