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

Какой тип боя Вы предпочитаете ?  

326 голосов

  1. 1. Какой тип боя Вы предпочитаете ?

    • Честная дуэль один на один на равном оружии, стреляться с 11 шагов
      24
    • Пусть враги будут без оружия и связанные
      11
    • Пара-другая врагов в засаде
      57
    • Десяток (больше не надо) врагов, прячущихся за деревьями и в строениях
      162
    • Бежать грудью на пулементы "на время", под угрозой провала квеста
      10
    • Пусть враги набегают со всех сторон с целью убить квестодающего персонажа
      17
    • В чистом поле против роты при поддержке минометной батареи
      16
    • Против 300 БТРов, и пусть в каждом будет полный десант из контролеров верхом на псевдогигантах
      24
    • Чтобы враги матариализовывались из воздуха строго за спиной
      4
    • Чтобы сразу все перечисленное
      66


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

3 минуты назад, Dennis_Chikin сказал:

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

Вообще-то доступа к файловой системе у луа и так не будет - не научен луа разбирать сталкерские архивы. Так что смысла добавлять файловую систему никакого.

 

5 минут назад, Dennis_Chikin сказал:

Кстати, руки дойдут - у себя добавлю, вместо этих бесконечных info2, info3, info1000 и матерных конструкций после них.

А вот добавьте и выложите для сравнения. Например логику Сидоровича. А то вдруг ини-файлы окажутся и не такими матерными конструкциями, как мега-скрипт на луа :)

 

7 минут назад, Dennis_Chikin сказал:

который ТОЖЕ надо пересобирать после каждого чиха.

Тут ровно тоже самое. Выложите свою мега-систему вместа олл.спавна. А то фантазировать мы все горазды, в мечтах у нас ого-ого как все летает. А на деле люди боятся аи-сетку тронуть, чтобы скриптовый спавн(замена тому самому ужасному алл.спавну) не слетел.

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

Ни каких тормозов, ни каких затыков "там не ходи, сюда ходи, а то сюжет встанет", и еще красивостей добавил, для вящей пущести.

А в диетической солянке говорят все скрипты переписали, тоже от странного да не нужного почистили, неужели и там info виноваты были ;)

Изменено пользователем abramcumner
  • Смешно 1
Ссылка на комментарий

Внимательнее надо, однако. Про файловую систему и студентов - это о паскале. И, да, автор так и сказал, что ибо нефиг, по тому что для студентов.

Если говорить за lua и файловую систему, она там не нужна по другой причине. Ибо должен брать с dev/stdin и отдавать на dev/stdout, а там и без него разберутся. Где не разберутся - там как раз хуки, а вот в c доступ к файловой системе точно есть.

 

Логика Cидоровича - вот как раз да, типиный случай, когда скриптом, и только скриптом.

 

И, нет, не все. Пока еще только процентов 10 сделал, от того, что нужно. И, да, в том числе эти самые info.

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

Для каждой задачи свое средство. Логика в ини-файлах - на деле компактно записывается, легко читается и понимается, синтаксис осваивается за полчаса. Чтобы писать логику в луа надо будет еще освоить луа. Вы же видите вопросы в скриптовании - по факту освоить язык программирования весьма не просто.

 

Бесконечные проверки - это как раз кривизна скриптов. В логике прописываются именно события, а вот реализация скриптовая подкачала :)

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

А почему вообще xr_logic.script появился, у тебя вопросов не возникает? :) Зачем делать прокладку между разработчиком и языком программирования с++ в виде луа? 

Вот именно, что есть луа между C++ и юзером, которая интерпретируется. При том, луа, очень крутая вещь, перечислять её преимущества и гибкость нет тут смысла... А вот зачем городить поверх такой хорошей API, свои надстройки, да еще времен динозавров, и писать костыли к ней (кондишены и эффекторы), т. к. у этих надстроек нет нужной гибкости...

29 минут назад, Dennis_Chikin сказал:

Хотя вот зачем у LUA оторвали его родные хуки - тайна сия велика есть. 

Никаких тайн, типа политика безопасности, но есть класс getFS(), правда тоже со своими причудами.

 

31 минуту назад, Dennis_Chikin сказал:

И, переключения по событиям  - то есть, реально по событиям, а не бесконечные проверки -  тоже.

Мысль очень здравая. Я вот люблю ударяться в упоротые дали программирования, есть мысль о создании апдейта не по тикающему таймеру (или как он там реализован), а на событиях вызова ф-ций (в скриптах постоянно что-то происходит, кто-то кого-то вызывает и тд, на этом "шуме", я и думал псевдо апдейт на этом сделать, но вроде это не сделать стандартным луа и его АПИ).

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

Вот именно, что есть луа между C++ и юзером, которая интерпретируется. При том, луа, очень крутая вещь, перечислять её преимущества и гибкость нет тут смысла... А вот зачем городить поверх такой хорошей API, свои надстройки, да еще времен динозавров, и писать костыли к ней (кондишены и эффекторы), т. к. у этих надстроек нет нужной гибкости...

:) Так чего тебе не хватает в логике на ини-файлах? Там есть все что нужно, чего нет - легко добавляется. Очень понятна: есть разные секции, в которых объект делает конкретные действия, есть параметры, которые уточняют действия объекта, и есть события, по которым меняются секции. Все - ты посвящен в секреты логики на ини-файлах.

Костыль это луа - достаточно с++ и логики на ини-файлах. Ну и для сравнения напиши логику Сидоровича на луа.

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

Мдя...Вы вообще о чем сейчас? Тем более в этой теме...

1 час назад, abramcumner сказал:

логику Сидоровича на луа

Хех...А Сидора то зачем?

Покажите хотя-бы простую логику обычного сталкера. Допустим - днем стоит на посту, вечером сидит у костра, ночью дрыхнет. Чтобы хотя-бы можно было сравнить. Интересно же...

Изменено пользователем _Val_
  • Согласен 1
Ссылка на комментарий

[logic]

select = sw_kamp.on_time

[walker@walker1]

path_walk = path1_walk
path_look = path1_look

и т.д.

select = sw_kamp.on_time

[kamp@kamp1]]

...

select = sw_kamp.on_time

[sleep@sleep1]

..

select = sw_kamp.on_time

 

Это если с проверками, а не по событиям. По событиям - не надо дублировать select в каждой секции.

непись передается как обычно, список секций достается из непися. Возвращается сразу имя секции, и на нее и переключаемся.

Но это пример как раз не интересный. Интересный - это когда куча вариантов по куче условий. Скриптиком такие вещи писать на много легче, да и самих возможностей больше. Те же многострадальные армейские склады, например.

 

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

Это же и есть ини-файл. И что такое sw_kamp.on_time? Почему он в каждой секции одинаковый. К каждому файл логики будет прилагаться скриптовый файл с развесистым

function on_time
  if active_section == "walker@walker1" then
    if db.actor.has_info_portion("xxx") then active_section = " kamp@kamp1 " end
 else if active_section == "kamp@kamp1" then
.... портняка иф елсе для каждой секции c портянкой условия переключения
end

Что-то выглядит не по-человечески.

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

Ну это надо просто сделать, и переписать те же АС. Тогда будет понятно.

 

Одинаковый - именно по тому, что разные не требуются. Сразу вернет нужную секцию, а заодно выполнит все, что обычно делается при помощи пачек = + - и т.д., да и скажет тем же гулагам нужный стейт, неписям - онлайны/офлайны/смарты, и т.д.

 

и, нет, такую монстровидную партянку c if ... elseif не надо. Гораздо проще и красивее.

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

напиши логику Сидоровича на луа.

Только часть, ибо писать много не охото

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

logic = {
	on_trade = 'mob_trade@new',
	trade = 'misc\trade_trader.ltx',
	active = "mob_trader@new_start_wait",
	------------------------------------------------------------------------------------------------------
	--СТАРТ
	------------------------------------------------------------------------------------------------------
	--; Ждем немного
	['mob_trader@new_start_wait'] = {
		anim_global = 'chair_hack_idle'
		on_timer = {5000, 'mob_trader@new_start_intro1'},
		can_talk = false,
		--on_info = %=vodka%
		--tip_text = 
	},
	
	--;Подвигаемся к игроку
	['mob_trader@new_start_intro1'] = {
		anim_global = 'chair_hack_to_desk',
		on_signal = {'animation_end', 'mob_trader@new_start_intro3', eff:call(esc_trader_hello_played, arguments)},
		can_talk = false,
		--tip_text =
	},
	--;Первая фраза "я тебя спас..."
	['mob_trader@new_start_intro2'] = {
		anim_global = 'first_phrase'
		anim_head	= 'first_phrase'
		sound_phrase = 'trader_monolog1'
		on_signal = {'animation_end', 'mob_trader@new_start_intro3'}
		can_talk = false
		--tip_text =
	}
}

 

* В коде запятые пропустил, но думаю мысль понятна....

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

 

32 минуты назад, Graff46 сказал:

on_signal = {'animation_end', 'mob_trader@new_start_intro3', eff:call(esc_trader_hello_played, arguments)},

ну эта строчка допустим будет выглядеть не совсем так, а как-то так:

on_signal = {'animation_end', 'mob_trader@new_start_intro3', function (npc, actor) begin eff:call(esc_trader_hello_played, arguments) end},

Вокруг esc_trader_hello_played точно не нужны кавычки?

 

anim_global = 'chair_hack_idle'

Здесь не нужна запятая в конце? А в секции 'mob_trader@new_start_intro2'?

 

Я бы сказал, что профессиональный скриптер ошибся по несколько раз в каждой из трех секций, луа это все проглотит без колебаний ,и привет долгие часы отладки, почему не играется звук, почему Сидор не поворачивается и тд и тп. Вместо написания логики  гейм-дизайнер будет искать парные квадратных скобки, фигурные скобки, гадать нужны ли кавычки и запятые, надо ли ставить бегин енды или не надо.

И вам после этого не нравятся плюсики и минусики... :)

 

А если по animation_end переход в несколько секций в зависимости от инфопоршней? Как вообще будет выглядеть проверка инфопоршней?

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

on_signal = {'animation_end', 'mob_trader@new_start_intro3', eff:call(esc_trader_hello_played, arguments)},

 

Тот же ltx, только в профиль. Те же 100500 операций со строками и вызовами "через 40 скриптов".

        ["on_signal"] = function ( c )
            return st.signals and st.signals[c.v1]
        end,

...

            if n( c ) then
                n = pick_section_from_condlist( actor, npc, c.condlist )
                if n and n ~= "" then
                    n = switch_to_section( npc, st, n )
                    if n then return n end
            end    end

или типа того.

 

Вот от этого надо в первую очередь избавляться.

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

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

ну эта строчка допустим будет выглядеть не совсем так, а как-то так:

Она может выглядеть как у меня, если написать хорошую обвязку.

 

2 минуты назад, abramcumner сказал:

Вокруг esc_trader_hello_played точно не нужны кавычки?

Нет, это объект - "фун-ция"

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

Тот же ltx, только в профиль.

Ну да, в лтх мы 100500 раз парсили строки методами объект-таблицы string. Или же работать с готовыми объектами и ссылками, ни каких парсеров.

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

Или же работать с готовыми объектами и ссылками, ни каких парсеров.

Ну распечатай готовый объект с распарсенной логикой. Логику в таком виде осилит только скриптер 120 уровня :)

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

А если по animation_end переход в несколько секций в зависимости от инфопоршней? Как вообще будет выглядеть проверка инфопоршней?

Классика ини:

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

[logic]
active = {+info1 +info2 -info3 =fun !fin1 !fun2}mob_trader@new_idle1, mob_trader@new_start_intro1


; ------------------------------------------------------------------------------------------------------
; СТАРТ
; ------------------------------------------------------------------------------------------------------
; Ждем немного
[mob_trader@new_start_wait]
anim_global = chair_hack_idle
on_timer = 5000| mob_trader@new_start_intro1
can_talk = false
--on_info = %=vodka%
on_timer  = {+info4} 1000|mob_trader@new_start_intro1 %+setinfo =setfun%

;Подвигаемся к игроку
[mob_trader@new_start_intro1]
anim_global = chair_hack_to_desk
on_signal = animation_end| mob_trader@new_start_intro3 %+esc_trader_hello_played%
can_talk = false
tip_text =

 

Lua

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

logic = {

	active = {
		{is={"info1", 'info2', {fun, p, p2}}, dnt={"info3", fin1, {fun2, d, d2}}, 'mob_trader@new_idle1'}
	},
	
	['mob_trader@new_start_wait'] = {
		anim_global = 'chair_hack_idle',
		can_talk = false
		on_timer  = {1000, is='info4', 'mob_trader@new_start_intro1' set='setinfo', call=setfun)}
	}

}

 

 

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

То есть где-то в скрипте будут еще функции?

Они будут подключены из xr_condition и xr_effects.

Одним из способов (require(), prefetch(), loadfile(), loadstring() )

Также в скрипт не явно можно передать таблицу-окружение _G (папка gamedata\sripts\) и писать полный путь до ф-ции (esc_dialog.myfun)

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

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

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

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

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

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

Войти

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

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

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