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

[SoC] Ковыряемся в файлах


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

elfog

Да-а-а... У тебя получилось что-то среднее между вызовом функции и самой функцией... Работоспособность - закономерный ноль... К сожалению, ты пока не понимаешь элементарных вещей, без которых в скриптах ловить ну совсем нечего. Попробую объяснить.

 

Смотри: сама функция выглядит так:

function имя_функции(аргументы_функции)
    последовательность действий
end

Здесь аргументами будут только переменные, а не конкретные значения. Конкретные значения переменных, с которыми надо производить указанные в функции действия, функция получит в момент вызова.

 

Вызов функции находится в другой функции и выглядит так, если вызываемая функция в том же файле, что и та функция, ИЗ которой происходит вызов:

   ...
   имя_функции(аргументы_функции)
   ...

либо так, если вызываемая функция находится в другом файле:

   ...
   имя_файла.имя_функции(аргументы_функции)
   ...

 

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

Например, есть функция fun с одним аргументом. Пусть надо ее вызвать с аргументом, равном 2. Вызов

fun(2)

и конструкция

local x = 2
fun(x)

эквивалентны.

Во втором случае агрументом является переменная Х: сначала определяется переменная Х, ей присваивается значение 2, и затем функция fun вызывается с аргументом, равным 2, как и в первом случае, когда аргументом является число. Писать

local x = 2
fun(2)

просто бессмысленно, хотя ошибки и не возникнет.

 

 

Для спавна аномалий тебе нужно из функции spawner:spawn_zone_mincer_weak() вызвать функцию an_spawn с правильными аргументами. То есть функции должно быть как минимум две ;) Попробуй еще раз с новой информацией.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Кто-нибудь знает как включить бампы на статике уж очень надо, очень.

Сообщение от модератора n6260
"Ковырнуть" движок :)

ЯДиск папка с крутым схроном!

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

Kirag, И снова я по поводу спавна аномалий...

Можешь дать готовую функцию спавна, с её вызовом как пример, а то когда перед глазами есть пример учиться гораздо проще.

А ссылку (если есть таковая) на полную статью по функциям можно? А то ведь это основа основ... забегать наперёд для меня было лишним.

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

morda. cod4 player

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

elfog

Если хочется научиться основам, то советую настроить Scite с Lua, как это сделать можно прочитать тут - http://www.lua.ru/forum/posts/list/21.page (3 пост, заголовок Настройка компилятора Lua в Scite можно опустить). Когда установишь, там будет оф. справка по языку.

Так же советую скачать тутор от хорошего человека Gun12, он не завершён (пока), но читать его легче будет, чем официальный, и инфы больше. Качать отсюда - http://ifolder.ru/17766560

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

На счёт слова "ПОКА".

Абсолютно не хватает времени для того, чтобы закончить, хотя и есть чем "заполнять".

Так же массу времени отнимает оформление. Так что пока слово "пока" останется в силе (намеренная тавтология :) ).

Да и вообще делал в принципе для себя как шпаргалку.

Так что есть комментарии, рассуждения и неточности, которые обнаружились уже позже (с опытом так сказать)

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

shooting unicorn, ковырни локу ЧАЭС2 в Народной Солянке.

Intel Centrino Mobile (Dual-core) T2700 2,328 GHz, Intel GMA 945GM, 2x1024 MB DDR2-667, WD Scorpio 1200BEVS

Microsoft Windows 7 Professional N + Novell Linux 11.2 (OpenSUSE) Dual boot

S.T.A.L.K.E.R. SHOC 1.0004 + AMK 1.4.1 + NS3 + NLC3 + Arsenal + Arsenal beta +New weapons

 

Опытный американский дробовик XM1014 =O

Хозяйке на заметку: Не спешите выбрасывать чеку от использованной гранаты Ф-1 или РГД-5 - с её помощью можно легко и удобно прикрепить игрушечного пингвинчика к своему рюкзаку. © not me

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

есть функция :get_bleeding() - для получения уровня кровотечения. Посмотрел в lua_help, значений она не принимает => установить уровень кровотечения с помощью этой функции невозможно. Кто знает, как поменять этот уровень скриптом?

Untitled-1.png

Ссылка на комментарий
есть функция :get_bleeding() - для получения уровня кровотечения. Кто знает, как поменять этот уровень скриптом?

Наносить скриптом хит, подобрав силу и тип. Вроде после chemical_burn появляется только кровотечение

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

Вопрос такого смысла: Как редактировать шрифт в игре, всмысле заменить letterica16 на что-нибудь другое, где записаны шрифты игры?

S.T.A.L.K.E.R. - Зов Припяти 1.6.00 + повелитель Зоны + мои всякие наработки = какая-то глобалка размером в 1,04 ГБ (1 117 802 496 байт) которая содержит 5580 файлов в 467 папках.

Ссылка на комментарий
Kirag, И снова я по поводу спавна аномалий...

Можешь дать готовую функцию спавна, с её вызовом как пример, а то когда перед глазами есть пример учиться гораздо проще.

А ссылку (если есть таковая) на полную статью по функциям можно? А то ведь это основа основ... забегать наперёд для меня было лишним.

 

Ссылку дать не могу, объяснял своими словами. В качестве готового примера:

 

Вот эта функция у тебя вызывается при нажатии на кнопку в меню:

 

function spawner:spawn_zone_mincer_weak()
    if self:check_game() then -- вызов проверки, запущена ли игра. Агрументов нет, они здесь и не нужны. 
                                          -- Если проверка прошла успешно, игра запущена - двигаемся дальше

        -- Здесь мы устанавливаем конкретные значения аргументов для вызова функции спавна аномалии
        local anom_name = "zone_mincer_weak" -- устоновили секцию
        local plosh = 4 -- установили радиус
        local distance = plosh + 4 -- расстояние от актора до центра аномалии = радиус 
                                              -- аномалии (см. предыдущую строку) + 4 метра
        local position = vector():mad(db.actor:position(),db.actor:direction(),distance) 
        -- переводим из координат относительно актора в координаты на уровне.
        local level_vertex_id = db.actor:level_vertex_id() -- устанавливаем левел вертекс
        local game_vertex_id = db.actor:game_vertex_id() -- устанавливаем гейм вертекс
        local powers_a = 500 -- устанавливаем силу аномалии

        -- Все, значения аргументов установлены, теперь вызываем функцию спавна с
        -- этими аргументами. Конкретные значения подставятся сами!
        an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_danger
os)
    end
end

 

Теперь сама функция спавна. Если ее не будет - вылетит. Но, она нужна в файле только один раз. Когда будешь делать следующую аномалию, второй раз писать эту же функцию в файл не нужно. Просто вызови ее с другими аргументами, в том и состоит смысл выносить этот код в отдельную функцию ;)

 

function an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_danger
os)
    -- все значения аргументов подставятся в функцию в момент вызова
    local con = get_console()
    local obj = alife():create(anom_name,position,level_vertex_id,game_vertex_id)
    local pac = net_packet()
    obj:STATE_Write(pac)
    local game_vertex_id = pac:r_u16()
    local distance = pac:r_float()
    local direction = pac:r_u32()
    local level_vertex_id = pac:r_u32()
    local object_flags = pac:r_s32()
    local custom_data = pac:r_stringZ()
    local story_id = pac:r_s32()
    local spawn_story_id = pac:r_s32()
    local shape_count = pac:r_u8()
    for i=1,shape_count do
        local shape_type = pac:r_u8()
        if shape_type == 0 then
            local center = pac:r_vec3()
            local plosh = pac:r_float()
        else
            local box = pac:r_matrix()
        end
    end
    local restrikror_type = pac:r_u8()
    local powers = pac:r_float()
    local owner_id = pac:r_s32()
    local on_off_mode_enabled_time = pac:r_u32()
    local on_off_mode_disabled_time = pac:r_u32()
    local on_off_mode_shift_time = pac:r_u32()
    local offline_interactive_radius = pac:r_float()
    local artefact_spawn_places_count = pac:r_u16()
    local artefact_position_offset = pac:r_s32()
    local last_spawn_time_present = pac:r_u8()
    if pac:r_elapsed()~= 0 then 
        -- abort("left=%d",pac:r_elapsed())
    end
    pac:w_begin(game_vertex_id)
    pac:w_float(distance)
    pac:w_u32(direction)
    pac:w_u32(level_vertex_id)
    pac:w_u32(object_flags)
    pac:w_stringZ(custom_data)
    pac:w_s32(story_id)
    pac:w_s32(spawn_story_id)
    pac:w_u8(1)
    pac:w_u8(0)
    local sphere_center = vector()
    sphere_center:set(0,0,0)
    pac:w_vec3(sphere_center)
    pac:w_float(plosh)
    pac:w_u8(restrikror_type)
    if powers_a ~= nil then 
        powers = powers_a 
    end
    pac:w_float(powers)
    if time_dangeros == nil then 
        owner_id = bit_not(0) 
    else 
        owner_id = time_dangeros 
    end
    pac:w_u32(owner_id)
    pac:w_u32(on_off_mode_enabled_time)
    pac:w_u32(on_off_mode_disabled_time)
    pac:w_u32(on_off_mode_shift_time)
    pac:w_float(offline_interactive_radius)
    pac:w_u16(artefact_spawn_places_count)
    pac:w_u32(artefact_position_offset)
    pac:w_u8(last_spawn_time_present)
    pac:r_seek(0)
    obj:STATE_Read(pac,pac:w_tell())
    return obj
end

 

Ну, вызов функции spawner:spawn_zone_mincer_weak() у тебя вроде был правильным

 

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Стоит АМК 1.4.1 с Arsenal Mod от Borg. Увидел в одной теме ссылку на WA2000 и решил добавить. Добавляю впервые. В weapon.ltx прописан, иконку для инвентаря добавил, в конфиге винтовки добавил положение в инвентаре, прописал Бармену на продажу. Ну и когда начинает генерироваться бармен с оружием, происходит вылет:

 

Expression : fatal error

Function : CInifile::r_section

File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp

Line : 342

Description : <no expression>

Arguments : Can't open section 'wpn_Walther_WA_2000'

 

Тут сказано, что еще надо прописать в prefetch.ltx, однако такого файла в геймдате от АМК с Арсеналом нету. Помогите, пожалуйста.

 

З.Ы. Извиняюсь, что тут добавляю. Знаю, что с АМК не связано, но всё же.

 

Оффтоп. Shader, перемести в Ковыряемся, будь добр. [kokkai]

 

Сообщение от модератора Shader
Перенес
Изменено пользователем Shader

Защити зону от Долга! вступай в www.shoc-role.ucoz.ru !!!

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

Elliond

Ты лог учись читать... У тебя секцию найти не может, а это значит, что ты никуда не прописал инкюд файла w_Walther_WA_2000.ltx

попробуй дописать инкюд на подобии того что в weapons.ltx (gamedata/config/weapons/weapons.ltx)

Это судьба

Ник St.A.R. узрел - это я

St.A.R..gif

 

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

Ты лог учись читать... У тебя секцию найти не может, а это значит, что ты никуда не прописал инкюд файла w_Walther_WA_2000.ltx

попробуй дописать инкюд на подобии того что в weapons.ltx (gamedata/config/weapons/weapons.ltx)

Дык вот

 

95692981.png

 

И это было написано в моем первом сообщении

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

Защити зону от Долга! вступай в www.shoc-role.ucoz.ru !!!

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

Elliond,

Это то же самое, что и не прописано, поскольку строка закомментирована знаком ";" и не читается. Чтобы инклуд читался, нужно убрать знак ";" перед инклудом, т.е. раскомметировать строку.

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

Убрал точку с запятой. Всё равно вылетает с этим логом.

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

Защити зону от Долга! вступай в www.shoc-role.ucoz.ru !!!

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

Большие буквы убери Arguments : Can't open section 'wpn_Walther_WA_2000' проверь правильно все ли поставил...

И если что редактируй свое предедущее сообщение а то на твой вопрос 5 страниц надо будет ;)

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

Мой архив

Сталкером не занимаюсь.

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

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

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

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

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

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

Войти

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

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

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