Николай ФеНиКс
У него и твой вариант сработал - то бишь получается что проверка
string.find(obj:name(),"bomba") тоже проходит для объекта с секционным именем "bomba" - просто при спавне скриптом его бомбе значит присваивается name в виде bomba_набор_цифр(айди то бишь)
а функция string.find определяет что в имени объекта есть подстрока "bomba" и возвращает true.
Но все равно цикл тут лишний - айдиш
отредактировал(а) erlik: 01-07-2010 15:17 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Люди, подскажите пожалуйста, для регистрации скрипта с гулагами достаточно прописать своё название в файле xr_gulag.script в таблицу level_gulags или надо еще в каком-то файле прописывать?
И еще есть новые локации и на них планируюется создание гулагов, надо ли (обязательно ли) прописывать новый уровень в файле xr_gulag.script в таблице level_groups ?
Еше файл smart_terain.script
тут
--[[ подходит ли объект гулагу?
1) если объект не согласен сюда идти, то smart terrain его не возьмёт
2) если объект согласен идти куда угодно, то проверить, есть ли ещё места, подходит ли он гулагу,
подходит ли он хоть на одну работу
3) если объект согласен идти только в этот смарт, то принимаем даже если нету места (он вытеснит кого-то), проверить,
подходит ли он гулагу, подходит ли он хоть на одну работу
]]
local level_groups = {
l01_escape = "group1",
l02_garbage = "group1",
l03_agroprom = "group1",
l03u_agr_underground = "group1",
l04_darkvalley = "group1",
l04u_labx18 = "group1",
l05_bar = "group1",
l06_Rostok = "group1",
l07_military = "group1",
l08_yantar = "group1",
l08u_brainlab = "group1",
l10_radar = "group1",
l10u_bunker = "group1",
l11_pripyat = "group1",
l12_stancia = "group3",
l12u_sarcofag = "group3",
l12u_control_monolith = "group3",
l12_stancia_2 = "group3"
}
файлы gulag task и smart terain preset.ltx
должны быть связанны точки графа разных локаций
ЗЫ В последнем дополнении к паку локации из зова имеют по ОДНОМУ гейм вертексу на всю локу 8-(
AAAAKKK Спасибо за информацию.
Да конечно в новых дополнениях к мап паку не все так как хотелось бы.
Ты случайно не в курсе как настроить АИ переходы (и возможно ли их настроить) между локациями?
Про програму создающую АИ переходы знаю, только вот НПС не как не хочет переходить с локации на локацию. Честно сказать складывается впечетление что на новых локах движение в оффлайне не возможно.
Товарищи кто знает как проверить есть ли движение в оффлайне на локации или нету? Какие параметры и файлы за это отвечают?
#Fantom2323 :
Вопрос: Как делать цепочки однотипных квестов?
Пример: Добавил волку квест, после его выполнения я не могу сделать так чтобы появился другой квест такого же типа.
Там чето с поршнями мутить надо? Я в поршенах не очень. Помогите кто может.
info_portion
поршни)
Это флажки, используются игрой для проверки условий, например при создании диалогов.
Для использования, их надо сначало обьявить :
сначало обьявить файл содержащий требуемый info_portion
..\config\system.ltx в секция [info_portions]
(можно использовать уже обявленный файл)
а затем а в файле
..\config\gameplay\info_"имя файла".xml
обьявить конкретный info_portion
!!! Для создания своих info_portion, рекомендую выносить их в свой файл, чтобы он не пересекался с другии модами
..
ТИПЫ
- объявляет задание (идентификатор задания id содержится внутри тэга )
СВОЙСТВА
- проверка его наличия, фраза появляется только если он есть - проверка его отсутствия, фраза появляется только если его нет - выдать его - убрать его
ПРИМЕР - Создание неповторяющегося диалога
Привет! 1 2
Скажи 'А'. my_info_portion my_info_portion 11
'А'
Скажи 'Б' my_info_portion 21
'Б'
РЕЗУЛЬТАТ
Первый диалог:
- Привет!
- Скажи 'А'
- 'А'
Все последующие диалоги:
- Привет!
- Скажи 'Б'
- 'Б'
добавлено спустя 8 минут
Хотя имхо лучше юзать для создания линейки квестов, структуру типового квеста. Ведь в его теле есть условия появления, которое почемуто всегда закоментировано, например у того же Волка:
;condlist = {+esc_serious_talk}
насколько я понимаю это и есть проверка возникновеня квеста через поршень. Соответственно через эту элементарную конструкцию, можно легко замутить линейку квестов.
Правдо я пока не понял как через тело типового квеста их выдавать? Мож кто присоветует, чёнить)
отредактировал(а) Alex-San: 02-07-2010 07:29 GMT3 час.
Вобщем так, стоячего НПСа сделать легко, правда после того как к нему с диалогом обратился он не будет смотреть в тот путь который ему прописал, а будет смотреть в сторону куда бы он дальше бы пошел если бы путь не окончился. Ну так вот, как сделать так чтобы он смотрел куда надо и чтоб он сидел наземле? Я сам не могу допереть, сажите плиз.
------------------------------------------------------------
local dead_mess = "Тут твоя могила сталкер."
local zdorovie = db.actor.health
------------------------------------------------------------
--\Актёр трагически погиб.
function dead_actor()
if zdorovie <= 0.1 then
news_manager.send_tip(nil, "Тут твоя могила сталкер",1, "stalker", 10000)
end
end
Функция категорически отказывается работать.
В чём дело?:-)
ДатчикХабара
попробуй:
--\Актёр трагически погиб.
function dead_actor()
get_console():execute("function_start_test_bla_bla_bla_bla")
if db.actor.health < 0.1 then
get_console():execute("Proverka_proshla_test_bla_bla_bla_bla")
news_manager.send_tip(db.actor, "Ты уже почти труп:)", nil, nil, 30000)
get_console():execute("Function_fin_test_bla_bla_bla_bla")
end
end
Если функция не сработает, то закрой игру, найди файл с твоим логом, и посмотри до куда функция сработала. И запустилась ли она вообще
Ma$ter
Дело в том,если ставишь вот так:
if zdorovie >= 0.1 then
,то сообщения бесконечно отсылаются(потому-что здоровье гг больше 10)
А мне надо сделать,как только гг подох так ему пишут "Меченный трагически погиб,теперь на этом месте будет его могила и сталкеры обязательно будут приходить и поминать старого гринго."
ДатчикХабара
**5001c54314580bda8be6**= db.actor.health
if zdorovie <= 0.1 then
news_manager.send_tip(nil, "Тут твоя могила сталкер",1, "stalker", 10000)
stope = true
end
end[/code]
Я на других функциях пробовал так, но не пашет.Поэтому у меня вопрос к знающим людям, как можно остановить функцию подобного типа, что указана выше.Вроде делал по аналогии, а функция, как условие выполнится, беспрерывно выполняет действие.:-G.Я слышал о каких-то флагах-триггерах, но пример их использования так и не удалось увидеть..
отредактировал(а) Stalk15: 02-07-2010 13:49 GMT3 час. Новые фишки для сталкера(см. журнал)
Как сделать проверки:
Если НПС на локации Кордон?
Если текущая локация НПС отличается от локации ГГ?
При условии, что Айди НПС уже известен, например Волк - 006.
karavan
На счет первого: Хм ...Я в скриптах 0(или 1:-)), но ...этож вроде легк**5001c54314580bda8be6** return true
else
return false
end
end
[/code]
Проверяет, находится ли Волк на локации Кордон.
-----------------------------------------------------------------------------------------------------
А на счет второго чет не могу понять, что тебе всетаки нужно проверить:-G
добавлено спустя 4 минут
g-side
В АСДС нужно найти твой ПМ и аксу и просто удалить(воспользуйся пойском, например, в Notepad++)/
В конфиге твоего автомата ищешь строку scope_name и пишешь в нее прицелы, которые ты хочешь надевать.
Stalk15 , ДатчикХаб**5001c54314580bda8be6** end
else
stope = false -- восстанавливаем флаг для апдейта если здоровье норм
end
end
[/code]
добавлено спустя 18 минут
karavan
Для того чтобы узнать где (на какой локации) находится NPC можно сделать так:
узнаешь геймвертекс своего NPC, желательно предварительно проверить в онлайне NPC или оффлайне и только потом в зависимости от результата применять к нему либо клиентский метод либо серверное свойство для получения геймвертекса (какие - сам должен знать)
для проверки онлайн\оффлайн есть метод is_object_online (object_id)
далее используешь нижеприведенные методы:
game_graph():vertex(*gvid*):level_id()
возвращает числовой идентификатор уровня по гейм вертексу
alife():level_name(*level_id*)
возвращает имя уровня по его числовому идентификатору.
отредактировал(а) erlik: 02-07-2010 16:09 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Еще вопрос:
Как можно получить Айди НПС через диалог (так сказать Айди НПС собеседника) и вынести его в таблицу, для того что бы потом, например, его удалить, этого НПС по его Айди?
добавлено спустя 4 минут
Или как из этой функции, полученый Айди обьекта, вынести в отдельную таблицу?
function Dictanse_check_up()
if not Dictanse then Dictanse = 3 end
local PositionActor = db.actor:position() --/ позиция ГГ (вычисляем 1-раз)
local actor = db.actor
local function Compare(id) --/ внутренняя локальная функция сравнения
local npc = level.object_by_id(id)
if npc and IsStalker(npc) and npc:alive() and npc.health > 0.1 then
if npc:position():distance_to(PositionActor) <= Dictanse then
news_manager.send_tip(db.actor, "кто-то близко от ГГ", 0, "default", 8000)
end
end
end
if obj_id then --/ если задан id конкретного сталкера
Compare(obj_id)
else --/ иначе перебираем всех на локации
for id=1,65534 do
Compare(id)
end
end
end
karavan
Объявляешь пустую таблицу
local Tab ={}
в скрипте в нужном месте кидаешь айди в таблицу table.insert(Tab, id) -- айди будут значениями таблицы расположенными в математическом порядке начиная с индекса 1. Итерацию можно делать как через числовой for так и через ipairs.
или Tab[id] = true - в этом случае айди будут ключами таблицы. Итерация такой таблицы возможна только через pairs
или третий способ (никем не применяемый в сталкере - потому что мало кто lua знает :-)) rawset(Tab,ключ,значение) -- произвольный ключ и произвольное значение.
Айди из диалога - через аргументы в скобках (первый спикер, второй спикер)
каждый параметр - это юзердата объекта - применяешь к юзердате метод id() и получаешь айди.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Спасибо, помогло.
А как сохранить Айди удаляемого НПС? Пробую вот так не получается что то.
local Tab_del = {}
local Tab = {}
function release_npc() -- Удаляем НПС по полученому Айди
for k,v in pairs(Tab_del) do
local obj = alife():object(v)
if obj then
table.insert(Tab, obj.id)
news_manager.send_tip(db.actor, "Удаляю НПС по Айди", 0, "default", 8000)
alife():release(obj , true)
end
end
end
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.