Пользователей: 0
Гостей: 1341
Всего: 1341

» Подробно
» Сегодня

Привет, гость!









Автор Сообщение
Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 16:57 GMT3 час. #1277534   
Mehanik Yar
Или формулируй вопрос 'что нужно конкретно' или 'почему не получается' при выбранном способе.
Ты думаешь, что все что ты написал многим, кто может ответить, не известно? И не думаешь, что твои предполагалки, далеко НЕ описывают все возможные способы?

Правильно заданный вопрос экономит в первую очередь твое время!

ИМХО, ты задаешь вопрос:
"Как проверить в диалоге с НПС наличие у него некоторого предмета?"

Если так, то банальные (не раз тут мусолившиеся) коды тебе дадут желаемое:

my_script.Has_NPC_MyItem

function Has_NPC_MyItem(first_speaker,second_speaker)
  return first_speaker:object("my_item") ~= nil
--/ "my_item" - секция предмета
end

Остается подобрать нужную фазу диалога или заменить first_speaker =>second_speaker (при необходимости), иначе будет проверяться актор.

отредактировал(а) Artos: 24-06-2010 17:28 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Mehanik Yar
    
Посты: 469
Откуда: Уфа
Возраст:
24-06-2010 17:27 GMT3 час. #1277551   
Спасиб! Все понял, дык и пример под носом валялся это сидору флешку принести.


Николай ФеНиКс
    
Посты: 1493
Откуда: От Туда!
Возраст: 29
24-06-2010 17:29 GMT3 час. #1277552   
**5001c54314580bda8be6**


Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 17:31 GMT3 час. #1277554   
Mehanik Yar
Вот поэтому и повторяю постоянно, что вначале нужно определиться ЧТО тебе требуется, затем 'сделать' алгоритм (блок-схема последовательности действий/проверок), после чего выбрать способ реализации и ... только потом писать/подбирать коды (которые могут быть и уже готовые)!

При подобном подходе вероятность 'попасть' с первого раза - велика.
Если же идти с конца - долбиться/тыкаться/переделывать можно ... о-о-очень долго.

Внимание!, в примере с Сидорычем и принесенной флешкой проверка идет актора, а не собеседника по диалогу! Но использовать можно, поменяв их местами (как уже пиал выше).


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Stalk15
    
Посты: 1023
Откуда: Как-бэ Новосибирск(Точно не знаю=))
Возраст: 30
24-06-2010 17:35 GMT3 час. #1277558   
Что, ни кто не знает что ли, как спавнить в инвентарь НПС без определенного Id'а?:-G...
Вот, что у**5001c54314580bda8be6** end
end
end
end
end
end
[/code]

И "вызывная" есть(только работает, когда Id определен):
[code]function spawn_pda_in_killer()
local tab_items ={{[1]="PDA"}
local tab_where = 006
this.uni_spawn_mnogo_itemsov(tab_items,tab_where)
end[/code]

Нужно преобразовать 2 функцию, чтоб спавнила "Без Id'ному НПС", я подумал, но ни чего толкового не пришло в голову...Зная, что не смогу, все равно попробовал.:-).Вот, что получилось(не полностью - как дальше - не знаю):
[code]
function spawn_pda_in_killer()
for a=1,65534 do --наверно надо добавить Перебор айди
local obj = alife():object(a)
if obj and obj:section_name() == "Секция нужного НПС" then
local tab_items ={{[1]="PDA"}
local tab_where = 006
this.uni_spawn_mnogo_itemsov(tab_items,tab_where)
end
[/code]

Незнаю куда деть local tab_where = 006 - может просто стереть и аргумент tab_wherе убрать...Да и ваще, в правильную "сторону" я копаю...
Дальще не знаю, как делать.Знаю, что написал полную лажу, но старался:-)...Не подскажете, как дельше правильно сделать?Или вариант спавна неписю без определенного Id'а ни кому не известен?

отредактировал(а) Stalk15: 24-06-2010 17:43 GMT3 час.

Новые фишки для сталкера(см. журнал)
Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 17:42 GMT3 час. #1277561   

Stalk15: Да и ваще, в правильную "сторону" я копаю...

'Копать' нужно туда, куда ТЕБЕ нужно, а не пытаться 'подкапывать' нечто уже готовое, в надежде ... мож туда куда нужно выведет!
Нередко, вноь сделать - проще, чем перекапывать готовое, но мало подходящее.

Сфрмулируешь что же тебе нужно вообще, а не от конкретной функции - проще будет кому-то ответить.
(Может и я в очередной раз потрачу время ..., не все ж erlik'у париться с тобою. Уже жаль его. :-) )


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Darien Fx
    
Посты: 1372
Откуда:
Возраст: 30
24-06-2010 17:44 GMT3 час. #1277563   
Stalk15
Не может НПС быть без id. Ты можешь не знать его, но он есть в любом случае :-). Для начала стоило сказать, НПС оффлайн или онлайн.


Stalk15
    
Посты: 1023
Откуда: Как-бэ Новосибирск(Точно не знаю=))
Возраст: 30
24-06-2010 17:49 GMT3 час. #1277566   
Artos

Сфрмулируешь что же тебе нужно вообще

Ну, вот я заспавнил НПС - создал его секцию, новый профиль, ну, и логику ...Мне пригодилось этому НПС заспавнить в инвентарь, например, пушку rg7(мне для квеста нужно, то есть я его убиваю и в его инвентарь спавнится rg7, следовательно при обыске я у него возьму rg7...Ну вот, сформулировал:-)

добавлено спустя 32 секунд

Darien Fx
Онлайн.

отредактировал(а) Stalk15: 24-06-2010 17:49 GMT3 час.

Новые фишки для сталкера(см. журнал)
С Н А Й П Е Р
    
Посты: 115
Откуда: Самара
Возраст: 31
24-06-2010 17:51 GMT3 час. #1277568   
Люди, как узнать ид непися?


Очень обидно, когда у тебя Stayr Aug A2 и Нано-костюм, а какой-то драный бандит снял тебя с ПМ в голову!!!
Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
24-06-2010 17:55 GMT3 час. #1277571   
Artos
Вариант :
[s**5001c54314580bda8be6**[/code]


Не стань номинантом премии Дарвина.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 17:59 GMT3 час. #1277573   
Stalk15
Да-а-а, с формулировкой у тебя ну оч.большие проблемы. Как ты себы сам то понимаешь?

Подсказки, которые могут навести на 'шальные' мысли:
1. При спавне непися ты уже можешь получить его ID.
Далеко искать не нужно, Взгляни на предыдущую страничку:
  local soObj = alife():create("musnuk",vector():set(-220.73,-18.87,-151.811),34237,66)

Соответственно сразу же запомнив его ID = soObj.id - тебе не нужно будет его разыскивать ...

2. Если ты ищешь конкретного НПС, то всегда есть его отличительные признаки от других: имя, секция, визуал, ранг, ... сид, ...
Используй это, для определения его ID, если забыл запомнить или действительно не знаешь.


Gun12

Вариант неплох. Но ... ИМХО, то что ты вынес|jcnfdbk определение 'oNPC' только во 2-й функции, в которой это всего ли ж проходной аргумент, а не оставил перепроверки и присвоения в 1-ой, в которой это уже критически важный параметр, не есть безопасно.

Автономное использование 1-ой функции в твоем варианте:

- небезопасно и требует обязательного наличия аргумента 'oNPC' на входе!

- оч. неоптимально, при самых практически многочисленных вызовах на проверку у актора (или непися) некоего предмета (типа: bHasActor = Has_N_Item("артефакт")).

В таком случае при достаточно набитом рюкзаке ГГ (а плюшкиных ой как не мало играется) даже частичная иттерация рюкзака (пока до нужной секции дойдет ...) может давать лаги.
Все же я бы оставил на этот случай упрощенный вариант через: bHas = oNPC:object(sSection) ~= nil
В этом случае доп. проверка на кол-во == 1 ничтожна по ресурсам, а доп строка - не такое уж загромождение кода.
Да и ... два варианта определения наличия предмета (иттерацией и прямой проверкой) - подспорье молодым мододелам, заглянувшим в код.


отредактировал(а) Artos: 24-06-2010 18:21 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Николай ФеНиКс
    
Посты: 1493
Откуда: От Туда!
Возраст: 29
24-06-2010 18:10 GMT3 час. #1277581   
Всё правильно или**5001c54314580bda8be6**se)
end
end
end[/code]


Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
24-06-2010 18:21 GMT3 час. #1277589   
Artos
Забыл сказать, что, по моей задумке, первая функция напрямую не используется (несмотря на наш разговор). Ну вот захотелось мне так - и не могу с собой ничего поделать. Нравиться именно так, несмотря на тайминги и Ко...
Всё определяется и защищается во второй функции.
Ещё насчёт защиты. От дураков :
после
for i = 1, arg.n do
добавить
if type(arg[i+1]) ~= 'string' and type(arg[i+1]) ~= 'number' and type(arg[i+1]) ~= 'table' then return false end
и после
for k,v in pairs(arg) do
добавить
if type(k) ~= 'string' and type(k) ~= 'number' and type(v) ~= 'string' and type(v) ~= 'number' then return false end
---------------------------------------------------------------
Теперь наконец-то до конца понятна Ваша позиция. Чего-то сегодня туго доходит.
Надёжность - это без комментариев, но я согласен немного рискнуть ею ради эстетики.
------------------------------------------------------------------
Можно и вложить. Это ведь только сырой вариант.
А в общем - согласен. Не годится. Будем искать.

отредактировал(а) Gun12: 24-06-2010 18:40 GMT3 час.

Не стань номинантом премии Дарвина.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 18:23 GMT3 час. #1277591   
Gun12
Это тоже понятно и не требует оправданий/пояснений. :-)
Я же высказываю свою точку зрения и предложенная связка из трех/двух функций мною позиционируется как 'набор' кирпичиков, каждый из которых безопасен, автономен в использовании, и относительно оптимизирован.
У тебя же (ИМХО) получается и ограничение в применении и заточенность под некое конкретное/частно применение.

Тогда уже может уже иметь смысл вложить 1-ю функцию в качестве локальной во вторую, чтобы исключить некорректность ее автономного вызова ... :-)


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Stalk15
    
Посты: 1023
Откуда: Как-бэ Новосибирск(Точно не знаю=))
Возраст: 30
24-06-2010 18:33 GMT3 час. #1277595   
Artos
Это вот так что ли спавнить м


Новые фишки для сталкера(см. журнал)
Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 18:35 GMT3 час. #1277596   
Николай ФеНиКс
А отформатировать скр

отредактировал(а) Artos: 24-06-2010 18:52 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Николай ФеНиКс
    
Посты: 1493
Откуда: От Туда!
Возраст: 29
24-06-2010 18:42 GMT3 час. #1277599   
Artos
Разжевывать не надо, я сам понял к чему и поч

отредактировал(а) Николай ФеНиКс: 24-06-2010 18:54 GMT3 час.

Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 18:45 GMT3 час. #1277602   
Николай ФеНиКс

Artos: и объяснишь скрипту/иль нам, где ему 'npc' брать ...
еже как-то разжевать нужно?

И со


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Stalk15
    
Посты: 1023
Откуда: Как-бэ Новосибирск(Точно не знаю=))
Возраст: 30
24-06-2010 18:54 GMT3 час. #1277607   
Artos

В твоем же приведенном куске - ID уже глобальной переменной становится. Тебе это нужно?

Нет.А как же тогда будет првильно?


Новые фишки для сталкера(см. журнал)
Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 19:00 GMT3 час. #1277614   
Stalk15
Эх ..., уже и смеяться/ругат

отредактировал(а) Artos: 24-06-2010 19:09 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Николай ФеНиКс
    
Посты: 1493
Откуда: От Туда!
Возраст: 29
24-06-2010 19:01 GMT3 час. #1277615   
Artos
Ой ссори я не то скопипастил!
ща исправлю!


___________
а что ещё? я больше и не знаю зачем писать это...
хотя...

отредактировал(а) Николай ФеНиКс: 24-06-2010 19:11 GMT3 час.

Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 19:04 GMT3 час. #1277618   
Николай ФеНиКс
Если ты еще десяток раз скопипастишь одно и тоже, даже не потрудившись дважды повторенное понять и исправить - 'вернее' твой "код" НЕ будет! 8-(


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Николай ФеНиКс
    
Посты: 1493
Откуда: От Туда!
Возраст: 29
24-06-2010 19:13 GMT3 час. #1277621   
Вот теперь вроде всё но**5001c54314580bda8be6**nd
end
end
[/code]

отредактировал(а) Николай ФеНиКс: 24-06-2010 19:40 GMT3 час.

Stalk15
    
Посты: 1023
Откуда: Как-бэ Новосибирск(Точно не знаю=))
Возраст: 30
24-06-2010 19:19 GMT3 час. #1277626   
А что тогда в самой функции спавна вместо числа указыв**5001c54314580bda8be6**s.uni_spawn_mnogo_itemsov(tab_items,tab_where)
end[/code]


Новые фишки для сталкера(см. журнал)
Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 19:30 GMT3 час. #1277633   
Николай ФеНиКс
Прекрати гадать и выкладывая - проверь и подумай!
Во второй же строке 'local ipos = actor:position()' - откуда скрипт узнает про переменную 'actor' ???
Или ты уже где то в ко**5007c54314580bda8be6**"af_cristall_flower"},
{[1]="wpn_fn2000"},{[5]="ammo_5.56x45_ss190"},{[3]="bread"},
{[5]="medkit_army"}}
this.uni_spawn_mnogo_itemsov(tab_items,idMyNPC)
end[/code]

отредактировал(а) Artos: 24-06-2010 20:00 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Николай ФеНиКс
    
Посты: 1493
Откуда: От Туда!
Возраст: 29
24-06-2010 19:37 GMT3 час. #1277640   
Artos
всё исправлено же Q8-|


Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 19:48 GMT3 час. #1277652   
Николай ФеНиКс
Работат будет, но:
- см. мое замечание выше 'по сути'
- определив переменную 'actor' - продолжаешь использовать 'db.actor' - лень и спешка, батенька!
- насчет этого условия 'if not (item and item:section() == "fak") then' непонятно - но это тебе разбираться. что ты там и когда хочешь получить - нам неведомо.
- и я бы 'db.storage' насиловал, чем весь диапазон IDs


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Николай ФеНиКс
    
Посты: 1493
Откуда: От Туда!
Возраст: 29
24-06-2010 19:56 GMT3 час. #1277663   
Artos
т.е.
вот так:
local actor = db.actor
local ipos = db.actor:position()
будет разумнее?;-)
_______________

Ясно=)
_______________



и я бы 'db.storage' насиловал, чем весь диапазон IDs

ссори но не знаком а чем лучше-то?

отредактировал(а) Николай ФеНиКс: 24-06-2010 20:06 GMT3 час.

Artos
    
Посты: 4176
Откуда:
Возраст: 65
24-06-2010 20:04 GMT3 час. #1277675   
Николай ФеНиКс
Погадальщик ты наш ... :-)
Если один раз используешь db.actor - то можно и так.
Если больше - то проще же один раз определить 'actor = db.actor' и далее использовать 'actor'.
Ты же тратишься и на новую переменную и продолжаешь мусолить массив 'db'.

Разумнее или так или иначе, но не вместе!


Что быстрее и проще перепроверить: диапазон ids = 1...65535 или массив (db.storage) из кол-ва реально имеющихся объектов на одной текущей локации (что на порядок и более меньше)?


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Николай ФеНиКс
    
Посты: 1493
Откуда: От Туда!
Возраст: 29
24-06-2010 20:11 GMT3 час. #1277679   
Ясно=), но не совсем... а как использовать в дальнейшем actor?

и как использовать db.storage?
так:
for i= db.storage do
В db storage функцией не является... вроде.

___ убей если я туплю:-G
или так:
for k,v in pairs(db.storage) do
local obj = level.object_by_id( k )

??




Форумы Архив » Свалка Вопросы и ответы (по 15.07.10)


Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для
просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.

Использование материалов сайта возможно с разрешения администрации. Все права защищены. © 2004–2025 «Stalker-Portal.ru»