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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

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

хзхзхзхз

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

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

У НПС падают только их стволы и всякая хрень вроде пда, гитары, гармошки. А патронов ниукого нет, как будто они у них только в стволе были=((

Как изменить список вещей, всегда остающихся у игрока во время боёв на Арене?

Вопрос к знатокам. У меня есть два класса - "SV_DM" и "CL_DM". Первый является серверным классом для дедматча в мп, а второй является клиентским классом для дедматча. В функции register файла game_registrator регистрирую их:

object_factory:register ("game_last_sv.game_sv_LastStanding","SV_DM","game_sv_LastStanding")

object_factory:register ("game_last_cl.game_cl_LastStanding","CL_DM","game_cl_LastStanding")

 

Но проблема в том есть мой серверный класс вызывается, а вот клиентский - нет. Где ошибка? Файл "game_last_cl кешируется

Задался вопросом, как убрать значение из пстора. Делал так

local key = "key_1"
local vol = nil
xr_logic.pstor_store(db.actor,key,vol)

При этом общеизвестная ругань:

Arguments : LUA error: e:\stalker\gamedata\scripts\_g.script:20: bad argument #2 to 'format'

Как нормально удалить значение из пстора?

PS: понял, почему вылетает, но вопрос еще открыт.

Изменено пользователем Desertir
KD87, ну это напрямую, а если в xr_logic.pstor_is_registered_type(tv) добавить еще одну проверку tv ~= "nil"? Думаю он и nil запишет без выпендрежа :)
Zander_driver ... падают обычно те предметы которые у нпс были в наличии при жизни

Обычно, с трупа удаляется большинство того, что было 'при жизни' и спавнится 'лут' (loot), т.е. то, что прописано в конфигах для спавна при смерти.

 

 

speczadanie, список остающегося у ГГ при заходе на Арену практически нерегулируем. Удаляются предметы методом итерации по всему рюкзаку (inventory_for_each), при котором остаются только квестовые предметы и предметы с меткой 'не торговать'. Хочешь изменить список - изменяй метод на свой.

 

 

_Призрак_, тебе стОит почитать материалы из "Справочника по классам и функциям". Как минимут в этом вопросе важна информация 'на какой игре' (ТЧ/ЧН/ЗП) ты экспериментируешь.

 

 

Desertir, не говори глупость. 'nil' - не записывается! Это азы Lua и пр. программрования. Присваивание 'nil' ключу в массиве - это по сути удаление этого ключа (вместе с его значением), если такой ключ существовал.

 

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

speczadanie, Как можно получить все предметы в инвентаре игрока, не помещенные в слоты?
Пробегаешь итерацией по рюкзаку игрока (iterate_inventory) и исключаешь все предметы, которые находятся в слотах (if not db.actor:item_in_slot(N) then ...).

 

(что-то банальные вопросы пошли задаваться, для получения ответа на которые достаточно всего лишь половинкой своей извилины шевельнуть ...)

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

Artos,

'nil' - не записывается! ... Присваивание 'nil' ключу в массиве - это по сути удаление этого ключа (вместе с его значением), если такой ключ существовал.

всё-таки nil записывается, поскольку это - одно из возможных значений переменных, такое же законное, как и любое другое. Будет при этом удалена переменная или нет, зависит от того, где она находится. Если в стеке, то никуда не денется до конца блока кода, если в таблице, то будет удалена при определённых условиях. Насчёт таблиц мы же это даже вместе выясняли.

Artos

 

Согласен, но патроны никогда не удаляются. Где-то я со скриптами накасячил, и даже неизвестно, где искать. А если сделать даже малейший неправильный шаг - вылет. Бесит уже((

malandrinus

Наверное не стОит нам заниматься тавтологией ... ;-) (записать/запомнить 'ничто' - невозможно)

Записывается ли 'nil' или это 'первичная инициализация' или же 'обнИление/очистка' ... каждый по своему воспринимает в зависимости от контекста.

В данном контексте вопроса - "запись" в массив 'pstor' в качестве значения ключа nil'а - это именно удаление/стирание/обнИление поля в массиве (стек вообще тут не поминаем).

Заносить, как сделано в АМК и как предложил Desertir в метод записи данное значение как одно из возможных - дело вкуса, конечно.

По сути, исходный (в игре) метод называется запись (сохранение - stor) и разработчиками, которые НЕ дали такую возможность (сохранять nil), именно попытка такого "сохранения" считается ошибкой. Плохо это иль хорошо - зависит от задач, которые преследует кодер/программист.

KD87 дал как раз недостающий для 'классического' варианта метод 'xr_logic.pstor_delete(db.actor,key)', который более правильно бы добавить для 'чисток', чем 'извращать' 'сохранение'. Попытка сохранить 'nil' в оригинальной игре является именно ошибкой, которая может при принудительном сохранении "записанного" повлечь последствия (в тот же нет-пакет - 'nil' уже не записать!).

 

 

хзхзхзхз, вмеcто 'беситься', стОит перепроверить свои правки ... А тут гадать что ты там у себя наковырял - бесперспективно. Перепроверяй 'death_manager.script'.

 

 

_Призрак_, тогда расшифровывай свое:

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

Что в твоем понимании 'вызов класса'?

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

_Призрак_

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

Вот кусок скрипта на ТЧ:

if db.actor.radiation>0.3 then
   if db.actor:object("bread") then 
      del_item(db.actor:object("bread"))
      spawn_item("bread_rad")
   elseif db.actor:object("kolbasa") then 
      del_item(db.actor:object("kolbasa"))
      spawn_item("kolbasa_rad")
   elseif db.actor:object("chocolate") then 
      del_item(db.actor:object("chocolate"))
      spawn_item("chocolate_rad")
   end
end

При входе в радиацию у актера удаляется еда и добавляется новая, радиоактивная, но игра ругается на этот код.

Вот функции:

function spawn_item(item)
alife():create(spawn_item, db.actor:position(),    db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

function del_item(item)
local obj = alife():object(item:id())
alife():release(obj, true)
end

Где ошибка?

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

Darkscape

Всегда лог прикладывай.

Кроме ошибки, указанной Desertir-ом пока ничего не видно.

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

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

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

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

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

Войти

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

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

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