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

Форуму нужна ваша помощь!

 

Поддержите наш форум

 

Карта Т-Банк: 2200700141548700
Карта Сбер: 4817760205579430

Тиньков сбор: https://www.tbank.ru/cf/3zW0GrGpSDs

USDT TRC-20: TTVDbERdS4sWQh1bAFBrJAUDz1MVRP6QGh
Дмитрий Райз

 

Всем огромное спасибо за помощь, вы приносите неоценимый вклад в поддержание и улучшение нашего уютного форума!

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

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

Пытаюсь после спавна костюма в рюкзак ГГ переместить его в слот. ОГСР движок. Получаю вылет, что не так то?

function upgradeS:spawn_item(spawn_item, dist)
	-- спавним только в игре
	if self:check_game() then
		--self:on_quit()
	 	alife():create	(spawn_item, db.actor:position(),  db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
		db.actor:move_to_slot(db.actor:object(spawn_item))        --Перемещаем объект в слот
	end
end
Скрытый текст

[C]: in function 'move_to_slot'
    ...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:367: in function 'spawn_item'
    ...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:419: in function <...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:374>
[11.03.25 22:09:13.074]     Locals: 
[11.03.25 22:09:13.074]      string (*temporary) : [luabind::detail::class_rep::function_dispatcher] Caught unhandled exception!
[11.03.25 22:09:13.074]     End
[11.03.25 22:09:13.074]     Locals: 
[11.03.25 22:09:13.074]      userdata (*temporary) : (game_object): 000002C97146F1D0
[11.03.25 22:09:13.074]      nil (*temporary) : [not available]
[11.03.25 22:09:13.074]     End
[11.03.25 22:09:13.074]     Locals: 
[11.03.25 22:09:13.074]      Userdata: self
[11.03.25 22:09:13.074]              userdata self.owner : (CUIGameCustom): 000002C9725967B0
[11.03.25 22:09:13.074]      string spawn_item : novice_outfit_aa
[11.03.25 22:09:13.074]      number dist : 1.000000
[11.03.25 22:09:13.074]     End
[11.03.25 22:09:13.074]     Locals: 
[11.03.25 22:09:13.074]      Userdata: self
[11.03.25 22:09:13.074]              userdata self.owner : (CUIGameCustom): 000002C9725967B0
[11.03.25 22:09:13.074]      nil actor : [not available]
[11.03.25 22:09:13.074]      nil npc : [not available]
[11.03.25 22:09:13.074]      userdata outfit : (game_object): 000002C97CC7C9D0
[11.03.25 22:09:13.074]      number UPcost : 200.000000
[11.03.25 22:09:13.074]     End
[11.03.25 22:09:13.074] *********************************************************************************
[11.03.25 22:09:13.074] ********************************************************************************
[11.03.25 22:09:13.074] !![LogStackTrace] Thread: [X-RAY Primary thread]
[11.03.25 22:09:13.097] !!stack trace:

 

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

@Stalkersof, попробуй немного по другому:

function upgradeS:spawn_item(spawn_item, dist)
	-- спавним только в игре
	if self:check_game() then
		--self:on_quit()
	 	local Sobj = alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
		if db.actor:object(Sobj) then
			db.actor:move_to_slot(db.actor:object(Sobj))        --Перемещаем объект в слот
		else
			-- тут действие если Sobj не найден!!!
		end
	end
end

 

Если я в чём-то не прав - вскоре @Купер, меня "поправит", в свойственной ему манере.

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

@ted.80 Не. вылетает.

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

[C]: in function 'object'
    ...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:367: in function 'spawn_item'
    ...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:425: in function <...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:380>
[11.03.25 23:10:23.134]     Locals: 
[11.03.25 23:10:23.134]      string (*temporary) : [luabind::detail::class_rep::function_dispatcher] Caught unhandled exception!
[11.03.25 23:10:23.134]     End
[11.03.25 23:10:23.134]     Locals: 
[11.03.25 23:10:23.134]      userdata (*temporary) : (game_object): 000002623DF0C060
[11.03.25 23:10:23.134]      Userdata: (*temporary)
[11.03.25 23:10:23.134]     End
[11.03.25 23:10:23.134]     Locals: 
[11.03.25 23:10:23.134]      Userdata: self
[11.03.25 23:10:23.134]              userdata self.owner : (CUIGameCustom): 0000026237A52B20
[11.03.25 23:10:23.134]      string spawn_item : novice_outfit_aa
[11.03.25 23:10:23.134]      number dist : 1.000000
[11.03.25 23:10:23.134]      Userdata: Sobj
[11.03.25 23:10:23.134]     End
[11.03.25 23:10:23.134]     Locals: 
[11.03.25 23:10:23.134]      Userdata: self
[11.03.25 23:10:23.134]              userdata self.owner : (CUIGameCustom): 0000026237A52B20
[11.03.25 23:10:23.134]      nil actor : [not available]
[11.03.25 23:10:23.134]      nil npc : [not available]
[11.03.25 23:10:23.134]      userdata outfit : (game_object): 0000026230270A50
[11.03.25 23:10:23.134]      number UPcost : 200.000000
[11.03.25 23:10:23.134]     End
[11.03.25 23:10:23.134] *********************************************************************************
[11.03.25 23:10:23.134] ********************************************************************************
[11.03.25 23:10:23.134] !![LogStackTrace] Thread: [X-RAY Primary thread]
[11.03.25 23:10:23.159] !!stack trace:

 

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

Короче мне ответили на гитхабе ОГСР. Что 

db.actor:move_to_slot()

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

Попробовал так.

function upgradeS:spawn_item(spawn_item, dist)
	-- спавним только в игре
	if self:check_game() then
	    alife():create(spawn_item, db.actor:position(),  db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
		local s_obj = alife():object( spawn_item )
		local c_obj = level.object_by_id(s_obj.id)
		db.actor:move_to_slot(c_obj)        --Перемещаем объект в слот
	end
end

Вылет string (*temporary) : attempt to index local 's_obj' (a nil value)

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

@Stalkersof попробуй так:

Скрытый текст
function upgradeS:spawn_item(spawn_item_sec, dist)
    -- спавним только в игре
    if self:check_game() then
        local s_obj = alife():create(spawn_item_sec, db.actor:position(),  db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        if s_obj then
            local c_obj = level.object_by_id(s_obj.id)
            if c_obj then
                db.actor:move_to_slot(c_obj) -- Перемещаем объект в слот
            end
        end
    end
end

 

Ещё, у тебя метод называется "spawn_item" и параметр в этом методе называется так же --> upgradeS:spawn_item(spawn_item, dist)

В примере выше, изменил параметр на "spawn_item_sec".

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

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

@Shkiper2012 Попробовал и вылета нет и не работает. Да я так тоже пробовал. Короче надо ждать ОГСРовцев может подскажут чего

Убрал условие 

if c_obj then

Вылет. nil c_obj : [not available]

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

@Stalkersof  В огсре по-моему у game_object вообще нет метода move_to_slot.

Я имел в виду движок ОГСР там есть этот метод. 

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

@Stalkersof Ага, посмотрел в двиг, вижу. В lua_help почему-то не добавлен.

 

Похоже, серверный объект уже существует, а клиентский нет. По-моему клиентский объект создаётся на следующем апдейте после создания серверного.

  • Нравится 1

А где зима?

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

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

@Stalkersof  По-моему клиентский объект создаётся на следующем апдейте после создания серверного.

А что делать? Таймер штоль мутить

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

@Stalkersof Можешь и таймер. А используешь огсе-сигналы? Там по идее есть установка на следующий апдейт?

А где зима?

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

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

@Stalkersof А используешь огсе-сигналы? 

Использую, но я пока только научился скрипты к биндеру подключать

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

@Stalkersof , попробуй разнести события по времени. Выше, в общем, правильно суть озвучили. Ты на одном тике и пытаешься создать объект, и тут же им манипулировать.

Что-то наподобие такого:

function upgradeS:spawn_item(spawn_item_sec, dist)
    -- спавним только в игре
    if self:check_game() then
    --* создаём объект
        local s_obj = alife():create(spawn_item_sec, db.actor:position(),  db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        if s_obj then
    --* и вот тут уже пытаемся что-то с ним сделать
	    level.client_spawn_manager():add(s_obj.id, 0, function (id, obj) db.actor:move_to_slot(obj) end)
        end
    end
end

Поиском поищи по форуму level.client_spawn_manager() - что такое и зачем.

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

Ну да в этом проблема была. Я через level.add_call() сделал. Ща поставлю там секунду по времени, а то у меня там еще костюм из слота удаляется. В общем спавню костюм в рюкзак, удаляю в слоте, через секунду(можно и меньше перемещаю в пустой слот. Короче таймер.

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

Я через level.add_call() сделал. Ща поставлю там секунду по времени

Это неверно, тебе нужен асинхронный вызов с условием появления объекта, @Купер уже все правильно написал. Просто отсрочка по времени может не сработать по тем или иным причинам (например в связи с низкой производительностью), да и задержка в секунду явно много - при открытом инвентаре ты буквально будешь наблюдать самопроизвольный "полет" предмета в слот.

 

Вообще, подобного рода вопросы (действия с объектами при выходе в онлайн) уже баян, причем очень давний.

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

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

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

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

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

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

Войти

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

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

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