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

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


Svoboда

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

(изменено)

Всем здрасте, у меня возникла проблема при спауне НПС, Нет я его прописал нормально через all.spawn, но я хочю чтоб он сидел и например ел колбасу! :D но какую логику ему надо прописывать?

 

Вот здесь собрана достаточно подробная информация о логиге НПС и не только, почитай. >>Clik Me<< ColR_iT

Изменено пользователем ColR_iT

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


Ссылка на сообщение
(изменено)

Здрасте, у меня вопрос, как заспанить переход? Неважно как, я читал статьи на вики, толку ноль не понел! Прошу помощи! Сталкер ТЧ 1.0004

 

Если для тебя даже от статей с вики-сайтов толку ноль, то неужели ты надеешься что тут тебе все разжуют и разъяснят? Ну ... ну.

Совет: захотелось помоддить - засучивай рукава и начинай грызть гранит "науки", пока хоть какой-то толк не выйдет ... ;-) --/Artos

Изменено пользователем Artos

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


Ссылка на сообщение
(изменено)

Я могу спанить НПС и т.д. но там что-то не понятно, там идёт какойто бред и не написано какой файл трогать, и там основа для фриплэя написана, так что я не понел! плиз помогите! И ещё один вопрос как прописать диолог не старому НПС а новому? можно пример?

 

Как спавнить переход используя all.spawn, можно увидеть здесь: Переход между уровнями

А на остальные свои вопросы используй поиск, поскольку они начального уровня, да и на той же Wiki есть ответы на них, загляни так же сюда: Уроки по модостроению, так же найдёшь много полезной информации.

P.S. Да, и выбирай соответствующую тему для своих вопросов.

ColR_iT

 

Добавлено через 122 мин.:

Спасибо переход зделал!

Изменено пользователем ColR_iT

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


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

Здравствуйте, у меня вопрос, как мне прописать скриптом преход на другую локацию? И ещё один вопрос как например на новой подключённой локации заспанить без логики например 20 кобанов чтоб просто бегали по локации? И если кто может поделитель пожалуйста файлами чужих, но только их плиз! Заранее спасибо! Это всё для ТЧ

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


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

Здрасте, у меня вопрос как заспанить Монстра через скрипт? Кол-во не имеет значение, но если можно то лучше через алл. Плиз с примером на кордоне!

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


Ссылка на сообщение
(изменено)
Daniar299, функция спавн монстра ничем не отличается от спавна того же НПС или же какого-нибудь предмета. Примеры тебе предоставили разработчики в оригинальных файлах. Вооружаешься поиском по словам (выбрать есть из чего) и вперёд на фронт в геймдату.
Да я согласен функции тежи! Но например та же логика, story_id, spawn_sections, character_profile, откуда брать их? точнее что туда писать для монстра без логики, чтоб просто бегал! Изменено пользователем ColR_iT

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


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

Здрасте, у меня такой вопрос, как прописать переход в один конец скрипом? Я освоил как сделать простой переход по известным точкам туда и обратно, но мне нужно в один конец! Плиз подскажите функцию!

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


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

Всем здрасте, я прописывал переход на другую локацию, и у меня возник вылет, в чём тут проблема я разобрался, но как я не менял цифры, ничего не меняется, подскажите что делать? основа МОда АМК 1.4.1 с 2мя патчамии

Expression : no_assert

Function : CALifeStoryRegistry::add

File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_story_registry.cpp

Line : 30

Description : Specified story object is already in the Story registry!

 

 

 

[915]

; cse_abstract properties

section_name = level_changer

name = exit_to_marsh

position = -259.36654663086,-18.755743026733,-160.60395812988

direction = 0,-0,-0

 

; cse_alife_object properties

game_vertex_id = 9

distance = 7

level_vertex_id = 6344

object_flags = 0xffffff3e

custom_data = <<END

[pt_move_if_reject]

path = esc_way_if_reject

END

story_id = 91212

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 2.22939944267273,0,0

shape0:axis_y = 0,4.83859968185425,0

shape0:axis_z = 0,0,2.22939944267273

shape0:offset = 0,0,0

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

; cse_alife_level_changer properties

dest_game_vertex_id = 3337

dest_level_vertex_id = 484

dest_position = 565.511291503906,3.22908997535706,-180.930603027344

dest_direction = 0,-0.174531996250153,0

dest_level_name = alife_marsh

dest_graph_point = start_actor_01

 

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


Ссылка на сообщение
Artos, Да, я прочитал, но я не совсем понел что делать? Что менять? Ведь до этого я спанил сталкера, но у него нет такого вылета! Он появился после 915 секции, чтож мне теперь делать? Если это теперь не исправить, я повторяю свой старый вопрос, дайте функцию на создание перехода через скрипт!

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


Ссылка на сообщение
(изменено)

Artos, Как я понел, мне нужно это acdc -parse alife_l01_escape.ltx -old 0 -new 934? но как их вводить, точнее куда? Пытался в консоле не работает, у меня стоит win7

 

[x]

Изменено пользователем Artos

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


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

У меня два алл.спавна, один с добавлением перехода, другой без него, на первом работает всё, на втором, ничего!

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


Ссылка на сообщение
(изменено)

Здрасте, помогите пожалуйста, как будит выглядеть функция создания перехода через локацию в один конец? (вызовом диолога, основа ТЧ) Я покопался тут http://antreg.ucoz.ru/forum/5-10-1 но что то непонел, прошу помогите! Очень надо!

 

Прав *Shoker*, говоря о достаточно детальном примере по указанной тобою ссылке.

Если непонятно - то и спрашивай о непонятом, а не проси чтобы повторно таким же примером пытались втолковать. --/Artos

Изменено пользователем Artos

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


Ссылка на сообщение
(изменено)
function tropa_rostok()
    -- создается переход c РОСТОКА НА АРМЕЙСКИЕ СКЛАДЫ
    if (not has_alife_info( "info_tropa_rostok" )) then
        y_level.create_level_changer(
        20017,
        vector():set( -289.735,0.099,192.842 ),
        295,
        1340,
        13812,
        1847,
        vector():set( -408.979,-13.798,400.699 ),
        vector():set( 0.0,2.0,0.0 ),
        "l07_military",
        0)
        db.actor:give_info_portion("info_tropa_rostok")
    end
end

 

Я создаю скрипт, но со своими значениями. такой Прописываю его, но ничего не_работает, или я неправильно его вписываю. Я его прописываю в файл escape_dialog.scripts в строки на выдавание оружия

--------------------------------------------------------------------------------------------------------
-- Trader
--------------------------------------------------------------------------------------------------------


function transfer_deneg(first_speaker, second_speaker)
    dialogs.relocate_money(second_speaker, 300, "in")
    dialogs.relocate_item_section(second_speaker, "detector_simple", "in")
    dialogs.relocate_item_section(second_speaker, "amk_metka", "in")
    dialogs.relocate_item_section(second_speaker, "treasure_item", "in")
end
   

function give_weapon_from_trader(trader, actor)
    dialogs.relocate_item_section(trader, "wpn_bizon", "in")
    dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")
dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")
dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")
dialogs.relocate_item_section(trader, "wpn_knife", "in")
moi_mod.spawn_patefon() 
moi_mod2.spawn_patefon()  
moi_mod3.spawn_patefon()  
moi_mod4.spawn_wpn_p90()  
moi_mod5.spawn_stalker_outfit()

tropa_marsh()

    --dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")
end

 

Изменено пользователем Artos

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


Ссылка на сообщение
(изменено)

 function create_level_changer( 
p_story_id, -- STORY_ID нового level_changer (понадобится нам позже) 
p_position, -- вектор, координаты точки, в которой будет располагаться центр нового level_changer 
p_lvertex_id, -- level_vertext_id - идентифицируют уровень, на котором будет создан level_changer 
p_gvertex_id, -- game_vertext_id 

p_dest_lv, -- level_vertex_id - идентифицируют уровень, на который level_changer будет перебрасывать игрока 
p_dest_gv, -- game_vertex_id 
p_dest_pos, -- координаты точки, в которой на новом уровне окажется игрок 
p_dest_dir, -- направрение взгляда игрока 
p_dest_level, -- название уровня, например "L11_Pripyat" 
p_silent -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход) 
) 
local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id) 

level.map_add_object_spot(obj.id, "level_changer", "") 

local packet = net_packet() 
obj:STATE_Write(packet) 

-- свойства cse_alife_object 
local game_vertex_id = packet:r_u16() 
local cse_alife_object__unk1_f32 = packet:r_float() 
local cse_alife_object__unk2_u32 = packet:r_u32() 
local level_vertex_id = packet:r_u32() 
local object_flags = packet:r_u32() 
local custom_data = packet:r_stringZ() 
local story_id = packet:r_u32() 
local spawn_story_id = packet:r_u32() 

-- свойства cse_shape 
local shape_count = packet:r_u8() 
for i=1,shape_count do 
local shape_type = packet:r_u8() 
if shape_type == 0 then 
-- sphere 
local center = packet:r_vec3() 
local radius = packet:r_float() 
else 
-- box 
local axis_x_x = packet:r_float() 
local axis_x_y = packet:r_float() 
local axis_x_z = packet:r_float() 
local axis_y_x = packet:r_float() 
local axis_y_y = packet:r_float() 
local axis_y_z = packet:r_float() 
local axis_z_x = packet:r_float() 
local axis_z_y = packet:r_float() 
local axis_z_z = packet:r_float() 
local offset_x = packet:r_float() 
local offset_y = packet:r_float() 
local offset_z = packet:r_float() 
end 
end 

-- свойства cse_alife_space_restrictor 
local restrictor_type = packet:r_u8() 

-- свойства cse_level_changer 
local dest_game_vertex_id = packet:r_u16() 
local dest_level_vertex_id = packet:r_u32() 
local dest_position = packet:r_vec3() 
local dest_direction = packet:r_vec3() 
local dest_level_name = packet:r_stringZ() 
local dest_graph_point = packet:r_stringZ() 
local silent_mode = packet:r_u8() 

packet:w_begin(game_vertex_id) -- game_vertex_id 
packet:w_float(cse_alife_object__unk1_f32) 
packet:w_u32(cse_alife_object__unk2_u32) 
packet:w_u32(level_vertex_id) -- level_vertex_id 
packet:w_u32( bit_not(193) ) -- object_flags = -193 = 0xFFFFFF3E 
packet:w_stringZ(custom_data) 
packet:w_u32(p_story_id) -- story_id 
packet:w_u32(spawn_story_id) 

packet:w_u8(1) -- количество фигур 
-- packet:w_u8(0) -- тип фигуры: сфера 
-- packet:w_vec3(vector():set(0, 0, 0)) -- sphere_center 
-- packet:w_float(3.0) 
packet:w_u8(1) -- тип фигуры: box 
packet:w_float(2) -- axis_x_x 
packet:w_float(0) -- axis_x_y 
packet:w_float(0) -- axis_x_z 
packet:w_float(0) -- axis_y_x 
packet:w_float(4) -- axis_y_y 
packet:w_float(0) -- axis_y_z 
packet:w_float(0) -- axis_z_x 
packet:w_float(0) -- axis_z_y 
packet:w_float(4) -- axis_z_z 
packet:w_float(0) -- offset_x 
packet:w_float(0) -- offset_y 
packet:w_float(0) -- offset_z 

packet:w_u8(3) -- restrictor_type 

packet:w_u16(p_dest_gv) -- destination game_vertex_id 
packet:w_s32(p_dest_lv) -- destination level_vertex_id 
packet:w_vec3(p_dest_pos) -- destination position 
packet:w_vec3(p_dest_dir) -- destination direction (направление взгляда) 
packet:w_stringZ(p_dest_level) -- destination level name 
packet:w_stringZ("start_actor_02") -- some string, always const 
packet:w_u8(p_silent) -- 1 for silent level changing 

packet:r_seek(0) 
obj:STATE_Read(packet, packet:w_tell()) 
news_manager.send_tip(db.actor, "Новый путь", nil, nil, 20000) 
end

 

Я не совсем понимаю что надо прописывать в первые 10 строк, и ещё в какой форме это написать! и как я понимаю это оставить как есть? news_manager.send_tip(db.actor, "Новый путь", nil, nil, 20000)

 

А что тебе не понятно? Там ведь есть отличные комментарии... яснее не куда.

Для send_tip, можешь вместо текста в кавычках написать свой, можешь оставить.

И, пожалуйста, пиши в конце концов грамотнее.

ColR_iT

Изменено пользователем ColR_iT

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


Ссылка на сообщение
(изменено)
function Tropa_Rostok()
  local story_id = 20017
  if not alife():story_object(story_id) then
    local position,lvid,gvid = vector():set(-253.30751037598,-19.407945632935,-154.47235107422),8672,8 --/ координаты перехода
    local soLvChg = alife():create("level_changer", position, lvid, gvid) --/ спавн перехода
    local pk = get_netpk(soLvChg) --/ запрос нет-пакета
    if pk:isOk() then --/ получен доступ к нет-пакету объекта?
      local data = pk:get() --/ читаем данные из нет-пакета
      data.story_id             = story_id
      --data.shapes:addSphere(3) --/ задаем форму сферы радиусом в 3м
      data.shapes:addBox(vector():set(3,0,0),vector():set(0,5,0),vector():set(0,0,3),vector():set(0,0,0))
      data.restrictor_type      = 3 --/ RestrictorTypeNone
      data.dest_level_name      = "marsh"
      data.dest_game_vertex_id  = 9
      data.dest_level_vertex_id = 6344
      data.dest_position        = vector():set(-259.36654663086,-18.755743026733,-160.60395812988)
      data.dest_direction       = vector():set(0.0,2.0,0.0)
      data.dest_graph_point     = 'start_actor_02'
      data.silent_mode          = 0
      --data.custom_data:setString("[pt_move_if_reject]\npath = "..path) --/ "точка возврата"
      pk:set(data) --/< запись в нет-пакет
      level.map_add_object_spot(obj.id, "level_changer", "")
      news_manager.send_tip(db.actor, "На Болота", nil, nil, 20000)
    end
  end
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: .... - shadow of chernobyl2\gamedata\scripts\amk.script:832: attempt to index global 'escape_dialog' (a nil value)

 

Вот те строчки, не понимаю что тут не хватает?

function on_item_take(obj)
    [b]escape_dialog.have_a_art()[/b]
    flamethrower.have_a_fire_kolobok()
    flamethrower.have_a_trubki()
    flamethrower.have_a_manometr()
    flamethrower.have_a_vodko()
    flamethrower.have_a_gorelka()
    
    remove_spot_from_map(obj:id(),"red_location")
    mod_call("check_usable_item",obj)
end

 

Вылет был при начале новой игры!

Изменено пользователем ColR_iT

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


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

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

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: ...shadow of chernobyl2\gamedata\scripts\y_level.script:6: attempt to call global 'get_netpk' (a nil value)

Вот скрипт

function Tropa_Rostok()
  local story_id = 20017
  if not alife():story_object(story_id) then
    local position,lvid,gvid = vector():set(-253.30751037598,-19.407945632935,-154.47235107422),8672,8 --/ координаты перехода
    local soLvChg = alife():create("level_changer", position, lvid, gvid) --/ спавн перехода
    local pk = get_netpk(soLvChg) --/ запрос нет-пакета
    if pk:isOk() then --/ получен доступ к нет-пакету объекта?
      local data = pk:get() --/ читаем данные из нет-пакета
      data.story_id             = story_id
      --data.shapes:addSphere(3) --/ задаем форму сферы радиусом в 3м
      data.shapes:addBox(vector():set(3,0,0),vector():set(0,5,0),vector():set(0,0,3),vector():set(0,0,0))
      data.restrictor_type      = 3 --/ RestrictorTypeNone
      data.dest_level_name      = "marsh"
      data.dest_game_vertex_id  = 9
      data.dest_level_vertex_id = 6344
      data.dest_position        = vector():set(-259.36654663086,-18.755743026733,-160.60395812988)
      data.dest_direction       = vector():set(0.0,2.0,0.0)
      data.dest_graph_point     = 'start_actor_02'
      data.silent_mode          = 0
      --data.custom_data:setString("[pt_move_if_reject]\npath = "..path) --/ "точка возврата"
      pk:set(data) --/< запись в нет-пакет
      level.map_add_object_spot(obj.id, "level_changer", "")
      news_manager.send_tip(db.actor, "На Болота", nil, nil, 20000)
    end
  end
end

 

 

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


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

У меня такой вопрос, я хочу чтоб НПС сидел и кушал, получается мне ему в логику надо прописать это?

[remark@dinner]
anim = sit_knee
no_move = true
target = actor
meet = meet@dinner
danger = danger_condition

[meet@dinner]
meet_state    = 5|eat_bread@wait| 3|eat_energy@wait
meet_state_wpn    = 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead

если ошибся, попрошу поправить!

 

Добавлено через 6 мин.:

И ещё такой вопрос, как заспанить мутанта через скрипт? Несовсем понимаю в чём ошибка этой функции:

function spawn_dog_weak()
    local item = "dog_weak"
    alife():create(monsters,vector():set(-224.17195129395,-19.261228561401,-165.32530212402),32807,47)


end

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


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

Ещё такой вопрос, спанил через Алл бандитов, но почему то словил вылет без лога, кому несложно покажите пример спауна враждебных НПС, прошу очень нужно!

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


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

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

AMK-Team.ru

×
×
  • Создать...