Помогите пожалуйста, разобраться с метками.
Вобщем вот в чем дело хочу заспавнить НПС с меткой, а потом убрать с него метку скриптом.
Вот так спавню с меткой:
function metka_on()
local obj = alife():create("npc_test",vector():set(69,-3,-137),341318,160)
if obj then
level.map_add_object_spot(obj.id, "user", "Метка на НПС")
end
end
Вот так пытаюсь убрать:
function metka_off()
local obj = alife():object("npc_test")
if obj then
if level.map_has_object_spot(obj.id, "user") then
level.map_remove_object_spot(obj.id, "user")
end
end
end
Не получается убрать метку с НПС. Как убрать метку с НПС?
karavan
obj.id -то бишь айди - надо запоминать\сохранять.
А ты пытаешься заново определить своего npc и надеешься, что здесь if obj then будет true - а ты поставь в это место вывод мессиджа, чтобы понять - проверка проходит или нет - и все поймешь.
Так что или сделай своему неписю сид(можно легко через нетпакет ему его записать - не используя allspawn) или запоминай полученный при спавне айди (записать айдишку можно в pstor - примеров записи в pstor в геймдате хватает).
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Понимаю что туплю или просто не знаю как. Возился с метками более полугода назад и всё забыл. Да честно сказать это мои не единственные попытки снять метку с НПС.
Про то что Айди нету для снятия то же догадывался.
Короче если можеш помоги.
Пытался записывать в таблицу Айди НПС с меткой:
local ids = {}
function metka_on()
local obj = alife():create("npc_test",vector():set(69,-3,-137),341318,160)
table.insert(ids, obj.id)
if obj then
level.map_add_object_spot(obj.id, "user", "Метка на НПС")
end
end
karavan
Прочитать твою айдишку - если она там всего одна в таблице - можно так ids[1] -- то есть значение таблицы с индексом 1
если не одна - тогда итерацией -
for k, v in pairs (ids) do
local id = v -- в переменную id и будут поочередно(но не по порядку - для порядка нужно ipairs использовать) попадать все записанные значения из таблицы
end
в таблицу записать можно и так
ids[obj.id] = true -- true в этом случае значение формальное - вместо него все, что угодно можно ставить.
тогда айдишка - если делать перебор таблицы - будет значением k
for k, v in pairs (ids) do
local id = k
end
Но таблицу нужно еще сохранять через нетпакет - иначе все ее данные будут потеряны при сейв\лоаде.
Гораздо проще нужное значение просто в pstor эктора записать: xr_logic.pstor_store(db.actor,"id",айдишка) --"id" это произвольное строковое имя ключа - второй аргумент собственно значение переменной, которое нам надо сохранить.
считать можно так local id = xr_logic.pstor_retrieve(db.actor,"id")
И все :-)
добавлено спустя 3 минут
Блин - какого фига у меня иконка никак не вставляется с альфой - че то совсем забыл как это делается...
Делаю выделение белым - а она просто исчезает.
отредактировал(а) erlik: 25-08-2010 00:31 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Спасибо уже есть продвижения.
А как очистить таблицу local ids = {} ?
--------------------------------------
Еще не совсем понял как прочитать записаное значение xr_logic.pstor_store(db.actor,"id",ids) из нет пакета?
local ids = {}
function metka_on()
local obj = alife():create("npc_test",vector():set(69,-3,-137),341318,160)
table.insert(ids, obj.id) xr_logic.pstor_store(db.actor,"id",ids)
if obj then
level.map_add_object_spot(obj.id, "user", "Метка на НПС")
end
end
Это нужно создать отдельную функцию и биндить её?
function poket()
local id = xr_logic.pstor_retrieve(db.actor,"id")
end
Stalk15 Это самый ПЛОХОЙ вариант. Подобная итерация долж**50146ea8aab1bb10eeba**ode]local sobj = alife():object("esc_wolf")[/code]
В данном случае мы получим серверный объект волка. Как с ним работать дальше, думаю объяснять не надо. :-)
karavan При каких условиях метка должна ставиться, а при каких сниматься?
отредактировал(а) singapur22: 25-08-2010 09:27 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Народ как сделать так чтобы фонарик можно было вешать на пояс?
При дописании строк:
belt = true
move_to_ruck = true
Ничего не происходит, а если поменять слот с 9 на 8 то фонарик фешается на пояс, но не работает
singapur22 Для начала вот две небольшие функции с метками.
Ставим метку:
local ids = {}
function test_metka_on()
local obj = alife():create("test_save", vector():set(69,-3,-137),341318,160)
table.insert(ids, obj.id)
if obj then
level.map_add_object_spot(obj.id, "user", "Метка")
end
local tbl = amk.read_stalker_params(obj)
-- tbl.sid = 481543 -- id
tbl.health = 0.01
tbl.updhealth = 0.01
amk.write_stalker_params(tbl, obj)
news_manager.send_tip(db.actor, "Спавним на Карту", 0, nil, 5000)
end
Убираем метку:
function test_metka_off()
for k, v in pairs (ids) do
local id = v
level.map_remove_object_spot(id, "user")
news_manager.send_tip(db.actor, "Убираем метку", 0, nil, 5000)
end
end
Условия:
Метка на НПС после его спавна и вешания на него этой метки, должна быть на нем до тех пор пока эту мекту не захотим убрать. Т.Е. до момента вызова второй функции.
При сейв-лоаде, метка на НПС должна сохраняться и соответственно убиратся после вызова функции.
Еще есть один момент. Метка на НПС должна висеть только в том случае если он жив, а если умер то сниматся с него. За это я еще не брался но скорей всего что сдесь понадобится отдельная функция которую нужно биндить. Условия же наличия мекти на НПС те же. До востребования.
МалышоГ Билд - это отдельная игра. Ее не нужно класть поверх ТЧ, ЧН, ЗП. Извлекай в любую папку, и запускай батник. Обычно это батники в названии которых присутсвуют слова START. Батник знаешь что такое?
karavan В принципе, то что ты написал вполне рабочее, но... Я так понимаю, ты собираешься работать не над одним нпс, раз использовал таблицу для сохранения идов. Ну и как ты в этом случае собираешься снимать метку с отдельного нпс, а не со всех сразу?
Ещё раз спрашиваю. Какие условия снятия метки? Тоесть, при каких условиях должна вызываться функция test_metka_off() ???
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
karavan
Ну если ты сид своему NPC сделал - тогда таблицы нафиг не нужны. И pstor тоже - туда кстати надо было не таблицу записывать, а полученный obj.id.
Хотя может туда и табличку можно записать - не пробовал.
И метку лучше ставь серверную level.map_add_object_spot_[gre**50016ea8aab1bb10eeba** if level.map_has_object_spot( nid , "user") then -- проверяем висит ли метка
level.map_remove_object_spot( nid "user") --убираем нафиг
news_manager.send_tip(db.actor, "Убираем метку", 0, nil, 5000)
end
end
end [/code]
можно и по другому - делать проверку на апдейте if not obj:alive() then - где obj - клиентский объект NPC.
---------------------------------------------------------------------------------------------------------------------------
Ты действительно поясни - а собственно скока у тебя NPC на которых ты собираешься вешать метки и прочие условия.
отредактировал(а) erlik: 25-08-2010 11:27 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Привязка сталкера к конкретной позиции ( к vertex_id)
xr_position.setPosition(obj, position)
obj – обжект сталкера, обычно это self.object
position – vertex_id ноды, к которой он будет привязан.
Если вам нужно, чтобы в каком то экшине он был в данной позиции, то нужно сделать:
action:add_precondition (world_property(properties["position"], true))
где properties["position"] = xr_evaluators_id.position
Ни чоё не понял.Что за vertex_id ноды?И вообще тут правильно написано?И это тоже непонятно:"obj – обжект сталкера, обычно это self.object"
vertex_id ноды -- собственно имелись ввиду левел_вертексы
"obj – обжект сталкера, обычно это self.object" -- а тут что не понятно? То и имеется ввиду "клинтский объект сталкера", тобишь как вы уже привыкли = "npc".
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22 Пока рассматриваю только одного НПС. Таблицу использую для того что бы спавнить НПС с меткой и удалять метку с НПС через время, т.е. последовательность такая:
1) Спавнится НПС-с меткой.
2) Снимаем метку
2.1) Снимаем метку если НПС мертв.
2.2) Снимаем метку с НПС, через диалог.
Эта последовательность будет повторятся. Т.е. проходить не один раз.
Условий вызова функции test_metka_off() два:
1) Через диалог с НПС, с которого нужно снять метку.
2) Снять метку при смерти НПС.
Нужно что бы метка оставалась на НПС после сейв-лоада.
erlik Спасибо за пример. Но пожалуй мне не совсем подходит использование death_callback в файле xr_motivator. Хотелось бы как-то по проще. Сид ставил просто как вариант. Хотя кто знает может я еще не понял суть примера.
Ну и на кой чёрт тебе таблица? Достаточно будет одной переменной. И итерация уже не понадобится. Это раз.
Второе. Тебе erlik уже объяснил ка**50036ea8aab1bb10eeba**
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22, karavan, erlik
Вы все ещё решаете глобальные вопросы? :-) Молодцы, а мне можете помочь? ;-)
Мне нужно научиться делать новые точки переходов с локу на локу при помощи алл.спавна. Можете мне кинуть статью какую нибудь, пожалуйста, а я в долгу не останусь :-beer) И ещё желательно можно к этой же статье дать заметку о том чтобы точка пути появлялась только после диалога.
Новый проект в разработке, ищи в моём журнале.
В теории - всё легко, а вот на деле - гораздо сложнее.
Stalk15
Так просто? :lok5) Хе хе, да это же 15 минутная работа, ура! Ну конечно за это спасибо, а вот если я не ошибаюсь на переход же ещё нужно метку повесить чтоб на карте было видно. Верно? Как это сделать?
Новый проект в разработке, ищи в моём журнале.
В теории - всё легко, а вот на деле - гораздо сложнее.
Выложил в журнал тестовую версию мода "Рандомные тайники" - версия на данный момент хардовая - так как нет системы подсказок для подбора шифра к закодированным схронам.
Все это пока в разработке - а то что есть можете уже потестить :-)
------------------------------------------------------------------------- Fantom2323
Через allspawn переходов не делал ни разу(через скрипт меня вполне устраивает) - хотя там по моему ничего сложного нет - делаешь секцию по аналогии с имеющимися и правишь цифры. Статьи на данную тему не нашел.
добавлено спустя 3 минут
Николай ФеНиКс
Как сделал? Тестируй методы физики - и узнаешь. Но управлять машиной нельзя - она у меня либо просто поднимается\опускается либо прыгает по пологой кривой. Для управления нужен во первых математический алгоритм для движения +куча кнопок с каллбеками на нажатие - и без кейлоггера тут никак не обойтись. У меня каллбеки только на ЛКМ и ПКМ.
отредактировал(а) erlik: 25-08-2010 15:14 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Я сам уже не помню как гулаги настраивать. Чтоб всё вспомнить, нужна практика. Посему помочь пока не смогу. Но на сколько я помню, проблема в настройках гулага, к которому они привязаны.
Fantom2323
Вот пример создания перехода:
Только пример не полный. Нужно ещё указать куда переместить актора при нажатии "отмена". Если данный поинт не задать, то ...
Или отключить вопрос о разрешении перехода.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Fantom2323
А, про метку забы сказать.Надо переходу сто**50016ea8aab1bb10eeba**18.3,0.22,-3.0 --/ ГГ
dest_direction = 0,0,0
dest_level_name = l08_yantar --/Левел, где игрок должен появится
dest_graph_point = start_actor_01[/code]
Потом в скрипт level_tasks прописать:
[code]obj = sim:story_object(9999)
if obj then
level.map_add_object_spot(obj.id, "level_changer", "На Болото")
end[/code]
singapur22
Гляну еще какая у стандартных гулагов логика, мож что найду.Еще когда НПС онлайн, он возращается на место, типа хочет сбежать пока ГГ не видит:-)
Stalk15 Могу только посоветовать. Не нужно пытаться копировать гулаги из АМК. Самый простой способ создания гулагов (без лишних накруток) находится в файле gulag_escape.script
А точнее, лагерь новичков. По его аналогии и делай.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.