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

Скриптование


Svoboда

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

Vano_Santuri, Да можно....

Тебе нужен будет скрипт от АМК(amk.script)

в нём смотри функцию _g_start_timer ,потом _do_timer_action(select_string,params_string)..

к примеру гденить в начале игры стартуешь таймер

..

amk.g_start_timer("my_respawner",0,32,0)

..

потом в _do_timer_action

 

if select_string=="my_respawner" then

--вызов твойх функций

...

amk.g_start_timer("my_respawner",0,32,0)--стартуем таймер заново...

end

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

IQDDD, Собственно вопрос не ко мне,а к xStream'у....

Могу предположить,что таким образом ,как предложили вы,универсальности не будет....

я представляю эту функцию примерно так

 

function new_timer(cr,func_name,min)

local begin = false

timer[cr]=game.time+min

...тут считаем

if begin then

func_name()

begin=false

end

end

собственно загвоздка в том,что нету возможности сохранить имя функции...следовательно...если будет скажем два вызова этой функции(таймера) с разными функциями(переменными),то,когда первый раз begin будет истинным ,произойдёт вызов всех функций....ИМХО...Если покажите свой способ,то попытаюсь объяснить,чем он хуже(хотя возможно и лучше)....

ЗЫ:Насчёт АМК скажу, по моим "данным" в АМК 2.0 не будет функций от xStream'a - следовательно и таймер будет другим...

Поделиться этим сообщением


Ссылка на сообщение

IQDDD,Так бы сразу и писали....А то по одной строчке и не поймешь,в чём вообще задумка..Но меня терзают смутные сомнения насчёт луа в Сталкере...

Вот небольшой пример....

function tert(fun)

--vivod v log,mol vizvali tert

break

fun()

end

function gfga()

--vivod v log,mol vizvali gfga

end

--i gde nit vizovem

tert(gfga)

 

И если в логе будут эти две строки,то значит ,что ваш метод не пойдёт...Думаю сами поймете почему...

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

IQDDD, ругать не буду :)....

break -"разбивать"...

То есть брик прекращает выполнение функции...

следовательно,та запись эквивалентна этой

function tert(fun)

--vivod v log,mol vizvali tert

end

....

А говорил я вот о чём...

проверить ,сколько функций выполнится ...

то есть, если в логе появятся 2 строки,а не одна...то ваш метод не будет работать правильно....

То есть если при таком вызове:

test_func(myscript.func)

будут вызваны две функции сразу....

test_func и myscript.func()...то будет не то ,что вы хотели...

Вот,что я хотел сказать....

Если же вызовется только одна функция(test_func),то тогда ваш метод может вполне сработать...

Поделиться этим сообщением


Ссылка на сообщение

Orange Midday, Собственно ,что вам нужно объяснить по операторам? основные операторы такие же как и в любом языке....if,for,while,repeat,etc....По каким у вас вопросы из остальных?

Вы хотите выводить информацию о сталкере куда? на экран? или как к примеру выводятся имена в оригинале?Поясните...

Поделиться этим сообщением


Ссылка на сообщение

Orange Midday,...Не совсем так...

Операторов вывода инфы на экран нету...функции -есть(к примеру сообщение),а операторов нет :)....

Насчёт вашей задачи, это реализовать можно(знаю на 100%),но эта реализация требует много времени,а его у меня нету,да и желания тоже :)...

Как более легкий вариант:

function npcinfo(first,second)

news_manager.send_tip(db.actor,"npc id:"..tostring(second:id()).." npc name:"..second:name().." npc community:"..second:character_community()..",etc..",nil,1000)

end

далее пишете простенький диалог(или вставляете в существующий),где первой репликой является реплика ГГ и вставляете в action с ссылкой на скрипт...

и когда вы начнёте диалог с нпс (у которого диалог этот конечно же прописан) ,то вы увидите на экране сообщение с данными нпс...

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

Насчёт ОпЕраторов - задавайте конкретный вопрос.К примеру:

break,что он делает?

Влад, есть функция в bind_stalker.script называется on_item_drop в этой функции проверяйте что использовали предмет

if obj:section()=="предмет" then

--вызов вашей функции ,самый простой вариант,но не лишённый недостатка,к примеру выбросите вы предмет условие станет истинным...это можно обойти..просто подумайте как можно поймать предмет

 

end

Поделиться этим сообщением


Ссылка на сообщение
Как перевести выпарсенный список вещей в окошко?

Создаёшь Лист-бокс и запихиваешь туда названия предметов.

self:AddToBox(game_translate(ObjName));

где ObjName - ключ inv_name из секции предмета. Прочитать ключ можно используя функции по работе с ини-файлами.

 

Только, это - метод AddToBox нужно написать самому :)

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

Как и любой другой объект в игре :).

в цикле по инвентарю ищешь название и удаляешь по id

либо просто отбираешь у игрока :)(посмотри в сторону dialogs.script или amk_mod.script)

Поделиться этим сообщением


Ссылка на сообщение

Gektor, хм....

В общем :

Делаешь имена объектов(бочки и электры) уникальными

например

бочка - my_ballon

электра - my_electra

получаешь сначала "бочку" по имени ,её координаты , получаешь электру и через пакет задаёшь ей позицию бочки.

Или поизвращаемся:

спавнишь только бочку

а на её позици проигрываешь любой нужный эффект и при приближении кого-либо даёшь ему хит , играешь звук и эффект.

obj:position = anm:position

А вот это, по моей памяти, ничего не даст :) , кроме как вылета(не факт, не помню).

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

можно воспользоваться известной со школьной доски функцией :) или методом объекта(а точней методом его позиции) distace_to или функцией between из _g.script

math.sqrt(((x2*x2)-(x1*x1))+((y2*y2)-(y1*y1))+((z2*z2)-(z1*z1)));--школьная функция :)

Если теорией то

Расстояние между двумя точками равняется корню квадратному из суммы разностей квадратов соответсвующих координат точек.Или как-то так :)

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение
кровоSTALKER, Ещё как вариант можно сделать "отложенный" update именно твоей функции с помощью , скажем, time_global().Или через таймеры amk .Вариантов много Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

ФеНиКс, думаю,ответ очевиден :)

а НПСы(если ГГ в метре от этих(этого) НПС(ов) ) реагируют, ну допустим, говорят вот это мастер и т.п или отрицательно, т.е. рандомно реагируют на этот звук.

А вот это можно сделать. Правда реализация со звуком никак не связана :)

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

ФеНиКс, Разве не очевиден?

Заставить нпс реагировать именно на звук нельзя доступными средствами, кроме того примера что предоставил ты., где всё решается несколькими проверками и каким нить флагом :)

этой Гитарой уже маюсь.... ух как долго! осталось только скрипт как-то к юзанью этой гитары прицепить и всё!

при чём тут "реакция на звук"?

Про "заюзать скрипт":

1.bind_stalker.script
2.on_item_drop(obj)
3.if obj:section=="Гитара" then
   --заюзали,или выкинули :)

А вот если не надо "выкинули" (:)), то проверяешь что id такого больше нету(для одноразового предмета) и вызываешь не в этом колбэке.

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

ФеНиКс,

невозможно это
.

можно пойти другим ходом :).Его я описал выше.У меня нету сталка(и не будет :)) и "практически" мне будет тяжелее помочь,а я очень ленивый :)

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

кровоSTALKER,

про отметку

"пространство имён" - level

ищи по слову spot.

Также советую почитать lua_help.script и тему про Функциям сталкера на этом форуме - многие вопросы уйдут сами собой.

Первый вопрос решается курением "порядка" вызыва методов апдейтов актёра.

В общем : вставь перед теми строками из-за которых вылет(которые ты удалил) проверку что уровень загружен.опять таки методы "пространства имён" level, если вылет исчезнет,то думаю поймешь почему(хотя бы примерно).

 

PS:Epic Fail.Не читайте это сообщение!

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

ФеНиКс, удалить flobals = true .

for i=1, 65535 do

Это не рационально,если проверка не "отложена" (читать через промежуток)

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение

math.random(table.getn(mes_sucko)) = math.random(#mes_sucko) = math.random(n) (где n - кол-во элементов в таблице).

ФеНиКс,

"%c[255,255,1,1]Татар\\n+%c[255,1,255,1] pos_mes %c[default]"

Внимательно посмотри ;) - у тебя это всё одна строка

 

***

кровоSTALKER,

Поэтому нужно использовать

Зачем?

(table.getn(mes_sucko)) - даст кол-во элементов, следовательно будет выбираться(math.random(table.getn(mes_sucko))) случайное сообщение из всей таблицы.

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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