Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Скрипты
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6
vintprog
Какие возможности у скрипта LUA?

Можно например реализовать:
Гравитационое оружия,
Литания на самолетах,
Огнемет,
прикрепление приклада и.т.д?
shad0w
Хотелось бы научиться данному языку хоть немного.Подскажите кто-нибудь нормальный учебник по этому делу.
Stalbar
Цитата(vintprog @ 05.07.2009, 20:03) *
Какие возможности у скрипта LUA?

Можно например реализовать:
Гравитационое оружия,
Литания на самолетах,
Огнемет,
прикрепление приклада и.т.д?

Вы это хотите "чисто на скриптах" изобразить??

Цитата(Shadow. @ 05.07.2009, 20:10) *
Хотелось бы научиться данному языку хоть немного.Подскажите кто-нибудь нормальный учебник по этому делу.

учебник там --> http://www.lua.ru/doc/
vintprog
Нет я просто интересуюся можно ли создать такое.

Скриптингом только недавно начал заниматса в STALKER,а так я программирую на Delphi немного знаю C++,
еще хачю найти учебники по модингу,
и по создания нового HUD -оружия
Neo][
Цитата(vintprog @ 05.07.2009, 19:20) *
еще хачю найти учебники по модингу,
и по создания нового HUD -оружия

vintprog, в помощь SI: Wiki
vintprog
Neo][
Спасибо больщое,
а что правдо выйдет SDK для одиночной игры?
Lance
Цитата(vintprog @ 05.07.2009, 21:10) *
Neo][
Спасибо больщое,
а что правдо выйдет SDK для одиночной игры?

хочется ответить словами из песни:
"... наверно, в следующей жизни, когда я стану кошкой..."
vintprog
Ну что можно реализовать те возможности, что я описал выше в скрипти Stalker?
Unstoppoble
Цитата(vintprog @ 05.07.2009, 18:23) *
Ну что можно реализовать те возможности, что я описал выше в скрипти Stalker?


Цитата
Гравитационое оружия,
Литания на самолетах,


Речь об этом ? smile.gif Если да, то ответ - нет.
AKMC47U
http://www.lua.ru/doc/
Научись сначала писать правильно
Можно например реализовать:
Гравитационое оружия, -> Гравитационное оружие
Литания на самолетах, -> Летание на самолетах
vintprog
А вобще можно?
Орион
Цитата(Unstoppoble @ 05.07.2009, 17:42) *
ответ - нет.
vintprog
А перемещать npc на координаты, и ставить партиклы на координаты это хоть можно в скриптенги?
Stalbar
Цитата(vintprog @ 05.07.2009, 22:14) *
А перемещать npc на координаты, и ставить партиклы на координаты это хоть можно в скриптенги?

В "скриптенги" точно нельзя. Ибо нет такого, не то что понятия, - слова такого нет. Тебе дали кучу ссылок на информацию - читай, изучай, пробуй. Будут адекватные вопросы - будут адекватные ответы.
Chopku
Цитата(vintprog @ 05.07.2009, 16:03) *
Огнемет,

АМК уже давно сделали огнёмёт rolleyes.gif

Цитата(Stalbar @ 05.07.2009, 16:13) *
учебник там --> http://www.lua.ru/doc/

о,спс,давно искал)
ux.loke
vintprog, поставь мозилу файрфокс , он умеет подчеркивать не правильные грамматически слова и выдавать верные решения .
BAC9-FLCL
Видимо, заметить тему было сложно.
http://www.gameru.net/forum/index.php?showtopic=14792
vintprog
Все облазел не могу найти учебники по скриптпингу s.t.a.l.k.e.r,
будь он не ладный этот LUA пока внем разберещся борода вырастет,лутчи был бы Pascal или c++,
срочно нужно сделать моды новых миссий новых возможностей,
пожалуйста помогите мне найти учебники или статьи по скриптпингу.
shad0w
Как-бы с такой грамматикой ты далеко не пойдёшь...
А лучше скажу - выкинь эту мысль из головы,с нуля вот так,взять и начать писать скрипты тебе будет сложно.Хотя почему....даже невозможно
www.lua.ru
ДмитрийТ
Луа на вики там ссылок много
введение в LUA
Если применительно к Сталкеру то примеры есть в билде 1935 и на АМК и OGSE форумах.
vintprog
В сталкере невидел var,
мне нужно знать функцыии для
создания NPC, как заставить их ийти на заданые координаты,
как выдать им пушки, как заставить их стрелять в кого либо...
***** в Delphi и C++ программить и то лутче.

кто знает эти функцыии?


1. маты запрещены правилами форума
2. безграмотные сообщения тоже
ДмитрийТ
Вот тебе простой пример
Создание NPC "привязанного к точке" автор Меченый(Стрелок) (amk-team)
Снайпер

*1
Для начала создадим профиль!
Откроем фаил character_****.xml
и создаем там новый профиль
Пример:
<specific_character id="название_секции" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>иконка</icon>
<map_icon x="1" y="0"></map_icon>
<bio>Опытный сталкер. Детальная информация отсутствует.</bio>

<class>класс</class>
<community>группировка</community> <terrain_sect>stalker_terrain</terrain_sect>
<snd_config>characters_voice\human_01\папка с названием группировки\</snd_config>

<rank>цифры от 0 до 900</rank>
<reputation>цифры от 0 до 1000</reputation>

<visual>путь до модели"визуала"</visual>
<supplies>
[spawn] \n
оружие \n
патроны к этому оружию = 5 \n
</supplies>
#include "gameplay\character_criticals_4.xml"
#include "gameplay\character_dialogs.xml"
</specific_character>

*2
Теперь нужно прописать класс нашего НПС в npc_profile.xml
Пример:
<character id="название_секции из character_****.xml">
<class>класс прописанный вами ранее</class>
<specific_character>название_секции из character_****.xml</specific_character>
</character>

*3
Теперь зарегистрируем Нашего НПС в spawn_section.ltx
Пример:
[секция спавна(название пишите сами)]:stalker
$spawn = "respawn\секция спавна"
character_profile = название_секции из character_****.xml
spec_rank = regular ;это ранг непеся оставляйте как есть ,особой роли не играет
community = группировка которую вы приписали этому (название_секции из character_****.xml)
custom_data = scripts\sniper_addon\sniper_addon_***_logic.ltx;*** - если группировка НПС нейтральна к вам или дружелюбна ,то friend , в противном случае enemy

*4
Потом открываем xr_conditions.script
и добавляем вот такую функцию
function is_sniper_enemy(enemy, object)
return enemy:id() ~= db.actor:id()
end
PS:Если нет такого фаила ,то возьмите из оригинальной Игры!

*5
Теперь осталось Заспавнить Нашего НПСа
PS:Тем кто делает это впервые ,прочитайте дальше smile.gif,а если сталкивались ,всё равно читайте smile.gif

*5.1
Для Начала нам нужно снять координаты того места Где появится наш Снайпер.
Для этого открываем ui_main_menu.script
находим вот примерно такое
if dik == DIK_keys.DIK_Q then
self:OnMessageQuitWin()
end
и делаем так :
if dik == DIK_keys.DIK_Q then
self:OnMessageQuitWin()
elseif dik==DIK_keys.DIK_W then
self:position_info()
end
И в конец фаила.В Самый Конец!!!
function main_menu:position_info()
local a = db.actor:position()
local vid = db.actor:level_vertex_id()
local gvid = db.actor:game_vertex_id()
local text = "GPS:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid
news_manager.send_tip(db.actor, text, nil, nil, 30000)
end
Сохраняем!!!
*5.2
Заходим в игру ,добегаем до места где бы хотели чтобы сидел снайпер,выходим в Меню и в меню жмём на W , потом возвращаемся в игру
И Делаем скриншот (F12)
*5.3
Далее создаём скрипт спавна
(создаётся с помощью блокнота или Notepad++)
Например sniper_add.script
В нём будем писать функции!
function start_add_spawn()--\\*Это "список".Сюда будем вписывать вызов всех функции спавна
--\\*Сюда вписываем название ваших функций
--пример:
spawn_sniper_one()
end

function название_латиницей()--\\spawn_sniper_one()
local x= смотрим скриншот и переписываем сюда x
local y= смотрим скриншот и переписываем сюда y
local z= смотрим скриншот и переписываем сюда z
local level_vertex= смотрим скриншот и переписываем сюда level_vertex
local game_vertex_id= смотрим скриншот и переписываем сюда game_vertex_id
alife():create("тут название вашей из spawn_section.ltx",vector():set(x,y,z),level_vertex,game_vertex_id)
end

function save_variable(variable_name, value)
xr_logic.pstor_store(db.actor, variable_name, value)
end
function load_variable(variable_name, value_if_not_found)
return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)
end

*5.4
Когда вписали всех наших Снайперов и все функции спавна и внесли их в "список",то добавляем вызов нашей функции в bind_stalker.script

в функцию actor_binder:update(delta)
перед последнем end'ом этой функции
добавляем
if sniper_add.load_variable("spawn_sniper",false)==false then
sniper_add.start_add_spawn()
sniper_add.save_variable("spawn_sniper",true)
end

Сохраняем!

*6
Теперь работаем с логикой.
в папке configs/scripts создаём папку с sniper_addon , открываем её
*6.1
Создаём два фаила
sniper_addon_friend_logic.ltx и sniper_addon_enemy_logic.ltx
*6.2
открываем sniper_addon_friend_logic.ltx
и вписываем туда:
;SNIPER ADDON
;Меченый(Стрелок)
[logic]
active = remark@search

[remark@fire]
combat_ignore_cond = {!is_sniper_enemy}
radius = 0
anim = hide
on_info = {=health_le(0.5)} remark@search
wounded = wounded@work
sniper = true

[remark@search]
combat_ignore_cond = true
combat_ignore_keep_when_attacked = false
anim = hide
target = actor
on_info = {=see_enemy} remark@fire
wounded = wounded@work
[smart_terrains]
none = true
[wounded@work]
hp_state = 0|wounded_heavy@help_heavy
hp_state_see = 0|wounded_heavy@help_heavy
hp_victim = 0|nil
hp_fight = 0|false
hp_cover = 0|false

Сохраняем этот фаил и открываем второй
и вставляем туда
;SNIPER ADDON
;Меченый(Стрелок)
[logic]
active = remark@search

[remark@fire]
combat_ignore_cond = {!is_enemy_actor}
radius = 0
anim = hide
on_info = {=health_le(0.5)} remark@search
wounded = wounded@work
sniper = true
[smart_terrains]
none = true
[remark@search]
combat_ignore_cond = true
combat_ignore_keep_when_attacked = false
anim = hide
target = actor
on_info = {=see_actor} remark@fire
wounded = wounded@work

[wounded@work]
hp_state = 0|wounded_heavy@help_heavy
hp_state_see = 0|wounded_heavy@help_heavy
hp_victim = 0|nil
hp_fight = 0|false
hp_cover = 0|false
vintprog
DmitrjT
Не плохо,интересно есть справочник всех функцый в сталкере,
есл есть тогда можно садитса делать моды на сталкер.
ДмитрийТ
Всех я не встречал, но если надо могу выложить туторы что были в билде 1935.
посмотри на АМК там в школе модинга более менее подробно эти вопросы рассмотрены.
vintprog
DmitrjT
Будь добр выложи пожалйста,
просто по сриптить охота классные моды,
если че потом сделаю мод выложу тоже,
или я че найду тоже выложу полезное.
ДмитрийТ
Пожалуйста >> тыц
Орион

FAQ

Lua в X-Ray

Список всех функций, переменных, классов и т.п. что используются в Сталкере находится по адресу:
Код
gamedata/scripts/lua_help.script

Для получения файла надо распаковать игру. Можно скачать, в принципе smile.gif Тут =>>Ссылко<<=
Уроки

Пример создания непися скриптами ЛУА. Автор: меченый(стрелок)
Скриптинг на инсайде

Lua, LuaJIT, LuaBind, Lua Demo

Программирование на языке Lua. Третье издание. (рус)
ДмитрийТ
Для тех кого интересует скриптинг в Сталкере выкладываю статью тов. KamikaZze (ogse team) к сожалению полностью доделать ее нет времени полный текст материалов можно найти сдесь.
Скачать
jboo7
Можно ли как-то взорвать бочку не причиняя ей вред?) То есть не стрелять, не взрывать её, вообще с ней ничего не делать. Просто заспавнить через скрипт и потом так же через скрипт взорвать. Типа дистанционная бомбаsmile.gif
Орион
Это как? О_о
jboo7
Что "как?"?
Заспавнил бочку где-то рядом с собой, и нажал на заветную кнопку в главном меню, возвратился в игру и ты уже труп, потому что бочка взорвалась от нажатия на ту заветную кнопку. Как это можно было бы реализовать?
Орион
Кнопкой не знаю, если честно.. спейс рестриктором можно. Все помним сцены с туннелями в Рыжем Лесу, куда убегал Стрелок?) Можно по аналогии попробовать.
jboo7
Можно немного поподробнее?)
PATRON
Может попробовать нанести обьекту hit при помощи скрипта? Отследить его id, и дать хитом?
jboo7
А как тогда отследить его id после создания через alife():create?
Stalbar
Цитата(jboo7 @ 19.07.2009, 03:51) *
А как тогда отследить его id после создания через alife():create?

Ну етить... Вот ведь вопросы smile.gif В мануалах всё расписано как, и не только это, кстати... Читайте мануалы, и будет вам счастье. laugh.gif
Код
-- Создаём объект
local obj_name -- имя объекта
local pos, lvid, gvid -- позиция, левел-вертекс, гейм-вертекс
spawn_obj = alife():create(obj_name, pos, lvid, gvid) -- спавним объект
local obj_id = spawn_obj.id -- комментарии нужны? Если да, то это и есть "его id после создания"

Потом, когда нужно, наносим объекту хит, в данном случае взрывом
Код
-- получаем игровой объект по его номеру и взрываем
local boom_obj = level.object_by_id(obj_id)
local boom = hit()
boom.direction = vector():set(0,0,0) -- направление хита
boom.impulse = 10 -- импульс
boom.draftsman = boom_obj
boom.power = 10 -- сила хита
boom.type = hit.explosion -- тип хита, в данном случае, взрыв
if boom_obj then -- проверка, а собственно есть то, что нужно взорвать?
   boom_obj:hit(boom) -- большой бада-бум
end

Не сложно ведь?
PATRON
Stalbar, ну спасибо, давно искал это!
jboo7
Спасибо, Stalbar, проверю счасsmile.gif
jboo7
Попробовал то, что посоветовал Stalbar с канистрой из АМК. Ничего с канистрой не произошло, проверил вот эту строчку local boom_obj = level.object_by_id(obj_id) просто обратившись к объекту boom_obj:name(). Выкинуло, подозреваю, что level.object_by_id попросту ничего не вернуло и в boom_obj ничего нет.
Stalbar
Цитата(jboo7 @ 19.07.2009, 20:57) *
Попробовал то, что посоветовал Stalbar с канистрой из АМК. Ничего с канистрой не произошло, проверил вот эту строчку local boom_obj = level.object_by_id(obj_id) просто обратившись к объекту boom_obj:name(). Выкинуло, подозреваю, что level.object_by_id попросту ничего не вернуло и в boom_obj ничего нет.

Распиши подробно, что делаешь, как обращаешься, откуда и т.п. Пишешь, что выкинуло - лог имеется? Попробуй получить имя, как boom_obj:section_name()
jboo7
Код у меня такой:

local object_s = alife():create("amk_kanistra",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id())
local object_id = object_s.id
local object_n = level.object_by_id(object_id)

--local st = object_n:name() --узнаем имя, для проверки)
--get_console():execute("object_n..name>>"..st)

local boom = hit()
boom.direction = vector():set(0,1,0)
boom.impulse = 1000000
boom.draftsman = object_n
boom.power = 1000
boom.type = hit.explosion

if object_n then
object_n:hit(boom)
else --чтобы не было вылетов, выведем просто в консоль, что объекта нет
get_console():execute("object_n..is..nill>>")
end


Если убрать там комменты, игра вылетит с таким логом:

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...s\s.t.a.l.k.e.r\gamedata\scripts\ui_main_menu.script:452: attempt to index local 'object_n' (a nil value)

Отсюда следует, что object_n = nil ...

Вместо вылетов поставил условие, чтобы не надоедало)
HikeR
Цитата(jboo7 @ 20.07.2009, 02:53) *
localobject_s = alife():create("amk_kanistra",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id())

то есть канистру в инвентарь спавните. а разве level.object_by_id() что-нибудь возвращает для объектов в инвентаре, и присутсвует ли вообще эта канистра в игре как объект, который можно взорвать?
попробуйте просто перед собой заспавнить в паре метров.
Код
local pos = db.actor:position()
local dir = db.actor:direction()
pos = pos:add(dir:mul(5))
-- создаем предмет в 5 метрах прямо перед нами
alife():create(чего_надо, pos, 1, db.actor:game_vertex_id())
jboo7
По сути у тебя тоже самое, что и у меня. Чтобы заспавнить в инвентарь нужно писать так

alife():create("amk_kanistra",
db.actor:position(),
db.actor:level_vertex_id(),
db.actor:game_vertex_id(),
db.actor:id())

тогда канистра попадет в инвентарь.

А так она спавнится под ногами у ГГ
Stalbar
Цитата(jboo7 @ 20.07.2009, 05:53) *
--local st = object_n:name() --узнаем имя, для проверки)
--get_console():execute("object_n..name>>"..st)

Измени и дополни вывод инфы

local st = object_n:section_name() --узнаем имя, для проверки)
get_console():execute("object_n..name>>"..tostring(st))
get_console():execute("object_id>>"..tostring(object_id))


и посмотри, что выдаст

Цитата(jboo7 @ 20.07.2009, 05:53) *
else --чтобы не было вылетов, выведем просто в консоль, что объекта нет
get_console():execute("object_n..is..nill>>")

А вот это отрабатывает в консоль? Если object_n nil то в логе будет такая запись..
andrey_chel_2905
как написать скрипт следования nps за игроком
Орион
andrey_chel_2905,
Изучайте тутор: http://sdk.stalker-game.com/ru/index.php?t...D0%BA%D0%B0_NPC
jboo7
Цитата(Stalbar @ 20.07.2009, 08:28) *
Цитата(jboo7 @ 20.07.2009, 05:53) *
--local st = object_n:name() --узнаем имя, для проверки)
--get_console():execute("object_n..name>>"..st)

Измени и дополни вывод инфы

local st = object_n:section_name() --узнаем имя, для проверки)
get_console():execute("object_n..name>>"..tostring(st))
get_console():execute("object_id>>"..tostring(object_id))


и посмотри, что выдаст


Я попробую, но в принципе в этом нет смысла, потому что в логе написано, что object_n == nil. Для этого я и добавил там в условие else, чтобы узнать есть ли этот объект вообще.

В общем оставил только незакомментеной строчку get_console():execute("object_id>>"..tostring(object_id)). id у неё есть какое-то...

Цитата(Stalbar @ 20.07.2009, 08:28) *
Цитата(jboo7 @ 20.07.2009, 05:53) *
else --чтобы не было вылетов, выведем просто в консоль, что объекта нет
get_console():execute("object_n..is..nill>>")

А вот это отрабатывает в консоль? Если object_n nil то в логе будет такая запись..


Просто консоль попытается это воспринять как команда, но такой команды нет, поэтому, если зайти в консоль и если object_n == nil, то в консол красным будет выведена надпись "object_n..is..nill>>"


При запуске того кода в консол выводится "object_n..is..nill>>".
Stalbar
Цитата(jboo7 @ 20.07.2009, 05:53) *
if object_n then
object_n:hit(boom)
else --чтобы не было вылетов, выведем просто в консоль, что объекта нет
get_console():execute("object_n..is..nill>>")
end

Тогда не парься и давай хит прямо по object_s

if object_s then
object_s:hit(boom)
else --чтобы не было вылетов, выведем просто в консоль, что объекта нет
get_console():execute("object_s..is..nill>>")
end
jboo7
Цитата(Stalbar @ 20.07.2009, 12:56) *
Цитата(jboo7 @ 20.07.2009, 05:53) *
if object_n then
object_n:hit(boom)
else --чтобы не было вылетов, выведем просто в консоль, что объекта нет
get_console():execute("object_n..is..nill>>")
end

Тогда не парься и давай хит прямо по object_s

if object_s then
object_s:hit(boom)
else --чтобы не было вылетов, выведем просто в консоль, что объекта нет
get_console():execute("object_s..is..nill>>")
end


После этого игра вылетает с таким логомsmile.gifsmile.gifsmile.gifsmile.gifsmile.gifsmile.gifsmile.gifsmile.gifsmile.gifsmile.gif

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...s\s.t.a.l.k.e.r\gamedata\scripts\ui_main_menu.script:464: attempt to call method 'hit' (a nil value)

То есть у object_s нема метода hit(). И че делать?)
jboo7
Кто-то знает какого класса объект, возвращаемый alife():create()?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.