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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий

Garry_Galler

Expression : !m_error_code

Function : raii_guard::~raii_guard

File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

Line : 748

Description : ....e.r. - Зов Припяти\gamedata\scripts\xr_logic.script:1306: attempt to index local 'obj' (a nil value)

 

 

Может я неправильно в бинд_сталкере дописал? я поставил

dialogs_mod_marsh.change_relationship()

end

перед последним end в actor_binder:update(delta)

Не соответствует. N6260

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

ZeeK

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

А лог твой мне ни о чем не говорит.

function change_relationship()
local  actor = db.actor
local outfit=db.actor:get_current_outfit() 
if outfit then 
   if find_in_string(outfit:section(),"stalker_monolith_outfit") then 
      if actor:character_community() ~= "monolith" then 
       actor:set_character_community("monolith" ,0,0)
       end 
    else 
      if actor:character_community() ~= "actor" then 
      actor:set_character_community("actor",0,0)
         end
      end 
   end 
end

 

TRAMP14

А может у него своя 'обертка' ? Поэтому я исправлять не стал.

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

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

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

а есть ли чтото вроде

db.actor:set_actor_position

для неписей?

 

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

И ещё вот такой момент:

Вот код

    for k, v in pairs(one_slot) do
        local kol = 0
        db.actor:iterate_inventory(function (dummy, item)if item:section() == v then kol=kol+1 end end, nil)
        return kol
        if  kol > kol_one then
            tramp.drop(v)
        end
    end

И вот такая ошибка

перед 'if' ожидается 'end'  
(необходимо закрыть 'for' в строке 110)

 

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

Disord

Существует. Но не в оригинале, а в не выложенном в открытый доступ патче для ТЧ. (патч делается эксклюзивно для одного мода).

 

TRAMP14

Цикл for закрой end-ом. Чекер тебе написал все что нужно сделать. И nil можешь убрать - он не нужен. А дабы не путаться вместо анонимной функции итерации пиши локальную.

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

Disord, предмет из слота скидывается так:

function drop_item_to_inventory(number)
local actor=db.actor
local item = actor:item_in_slot(number)
if item then
    actor:drop_item(item)
    local sobj=alife():create(item:section(),actor:position(),actor:level_vertex_id(),actor:game_vertex_id(),0)
    actor:transfer_item(item,actor)
    alife():release(sobj,true)
end
end

 

Ссылка на комментарий
Цикл for закрой end-ом. Чекер тебе написал все что нужно сделать. И nil можешь убрать - он не нужен.

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

А дабы не путаться вместо анонимной функции итерации пиши локальную

Если честно не понял :(:blush: Создать одну в начале и подгружать? Было такое дело. Не вылета небыло, ничего, но и функция не заработала :(

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

Сделал логику, но мне нада что бы она хватала НПС, потом отпускала вновь в симуляцию, ждала пару часов и вновь становилась активной. Знаю как все сделать кроме-отпускала в симуляцию. Подскажите плз

Не соответствует. N6260

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

TRAMP14

Очень плохо что не понял. Локальная функция - это именованная функция внутри функции. Посмотри примеры в модах.

for у тебя не закрыт. Ты не соблюл правила lua - так что вперед изучать теорию.

И вообще зачем изобретать велосипед - возьми пример готовой функции из любого мода (поиск по iterate) которая итерирует инвентарь - сделай себе из нее то что нужно.

Изменено пользователем Garry_Galler
Ссылка на комментарий
for у тебя не закрыт. Ты не соблюл правила lua - так что вперед изучать теорию.

НУ как не закрыт? Вот вся функция без изменений:

function oOne()
    for k, v in pairs(one_slot) do
        local kol = 0
        db.actor:iterate_inventory(function (dummy, item)if item:section() == v then kol=kol+1 end end, nil)
        return kol
        if  kol > kol_one then
            tramp.drop(v)
        end
    end
end

Всегу нужно 3 endа. Так? 1 для функции, 2 для for и 3 для if.

p/s/ Спасибо за идею таких названий (вроде: oOne, tTwo)!

Очень плохо что не понял. Локальная функция - это именованная функция внутри функции. Посмотри примеры в модах.

Это вроде

local function.....()
...
end

?

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

Явная ошибка:

function oOne()
    for k, v in pairs(one_slot) do
        local kol = 0
        db.actor:iterate_inventory(function (dummy, item)if item:section() == v then kol=kol+1 end end, nil)
        if  kol > kol_one then
            tramp.drop(v)
        end
        return kol
    end
end

После ретурн ничего не должно стоять

Freedom

Ссылка на комментарий
А если его убрать ничего не будет? Я собственно и ставить его не хотел, но.....

Если не знаешь Lua - изучай. Если не хочешь - верь чекеру.

Я его писал с использованием стандартной библиотеки Иерусалимски. Т.е. ошибки не придумывал.

Конечно можно предположить что при написании кривые руки были у меня и у автора Lua, но только не у тебя. Так?

Если не так и если чекер говорит что после return ... должен стоять end, то может быть так оно и есть?

Ну а если возникнет вопрос "Почему?", то см. первую строку этого сообщения.

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

А кто сказал что rеturn лишний? Может лишнее то, что после него?

Всё зависит от того, что именно ты хотел сделать.

Но в любом случае метод тыка ("Не хотел ставить, но решил ...") в скриптовнии не проходит.

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

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

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

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

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

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

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

Войти

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

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

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