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

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

Да-да! И меня тоже интересует вопрос antreg! Я уже задал подобный в теме "Ковыряемся в файлах", там мне сказали, что !возможно! они отслеживаються движково, для ограничения/разрешения. Лично по рестрикторам в кострах, абсолютно ничего не нашел. Единственное оправдание наличия "пустых" рестрикторов, я нашел на Wiki: >>Click Me<< Там, в условиях переключения схем от одной к другой есть такие строки:

on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)
, т.е. выходит, что для такого случая логика для рестриктора не нужна!?

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

Удаление zone_flame_small удалит у тебя огонь как явление, т.е. партикл, а lights_hanging_lamp - свет вокруго него. По всей видимости взаимодействие между этими объектами происходит, непосредственно, при помощи движка.

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

Никто не подскажет, есть ли способ ускорить функцию demo_record, на больших локах тестить неудобно....

Выводы модмейкера:

1)Вылетает - это хорошо. Значит, работает :)

2) Если хочешь сделать что-то хорошо, делай сам!

3) Если падёшь духом, падёт и мод.

4) Он живой... :o

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

Добрый день!

Можно ли удалить скриптовой функцией спейс_рестриктор. Вот такой:

[6565]

; cse_abstract properties

section_name = space_restrictor

name = camp_fire_0011

position = -4.02209758758545,3.58234667778015,200.165649414063

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 2117

distance = 0

level_vertex_id = 73868

object_flags = 0xffffff3e

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 1.7837952375412,0,0

shape0:axis_y = 0,1.93420171737671,0

shape0:axis_z = 0,0,1.7837952375412

shape0:offset = 0,0,0

 

; cse_alife_space_restrictor properties

restrictor_type = 2

 

 

Если да, то как должна выглядеть функция в этом случае?

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

SibireaStalker,

Никто не подскажет, есть ли способ ускорить функцию demo_record, на больших локах тестить неудобно....

shift - замедление

ctrl - ускорение

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

Здравствуйте, надыбал скрипт который не берёт оружие без экзы, но он мне не понравился и я другой сотворил. Но мой почемуто не работает :(

function noweap() -- выкидываем оружие если нет экзы

local exza = db.actor:item_in_slot(6) -- локальные

local grena = db.actor:item_in_slot(2) -- переменные

if exza ~= "exo_outfit" then -- проверяем экзу

if grena and grena == "wpn_gauss" or grena == "wpn_rpg7" or grena == "wpn_fn2000" then -- проверяем оружие

db.actor:drop_item(grena) -- выбрасываем

news_manager.send_tip(db.actor,"Слишком тяжёлое оружие для обычной брони, оденьте эгзоскелет",nil,nil,10000) -- сообщаем об этом

end

end

end

 

Что в нём не так? Луа чекером проверял, вылетов при проверке из игры нет но работать он не хочет :(

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

TRAMP14

db.actor:item_in_slot(6) возвращает юзердату, а не строку. Так что твое сравнение дает false.

Для того, чтобы получить строку с наименованием объекта по секции нужно предварительно применить к нему метод section().

if exza and exza:section()~= "exo_outfit" then

if grena and (grena:section() == "wpn_gauss" и т.д.)

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

Всё заработало, спасибо.

Вот ещё скриптик - тоже неработает :) Смена худа при смене костюмов

function prost()
local hud = get_hud()
local cs = hud:GetCustomStatic("nov_outfit")
local  item_in_slot = db.actor:item_in_slot(6)
    if  item_in_slot ~= nil then
        if  item_in_slot == "novice_outfit" or item_in_slot == "bandit_outfit" or item_in_slot == "killer_outfit" or item_in_slot == "monolit_outfit" or item_in_slot == "soldier_outfit" or item_in_slot == "stalker_outfit" or item_in_slot == "svoboda_light_outfit" or item_in_slot == "svoboda_heavy_outfit" or item_in_slot == "dolg_outfit" or item_in_slot == "outfit_novice_m1" or item_in_slot == "outfit_bandit_m1" or item_in_slot == "outfit_dolg_m1" or item_in_slot == "outfit_killer_m1" or item_in_slot == "outfit_specnaz_m1" or item_in_slot == "outfit_stalker_m1" or item_in_slot == "outfit_stalker_m2" or item_in_slot == "outfit_svoboda_m1" then
            if cs == nil then
                hud:AddCustomStatic("nov_outfit", true)
                cs = hud:GetCustomStatic("nov_outfit")
            end
        else 
            if  cs ~= nil then
                hud:RemoveCustomStatic("nov_outfit") 
            end
        end
    end
end    
function okylar()
local hud = get_hud()
local cs = hud:GetCustomStatic("okul")
local  item_in_slot = db.actor:item_in_slot(6)
    if  item_in_slot ~= nil then
        if  item_in_slot == "dolg_scientific_outfit" or item_in_slot == "ecolog_outfit" or item_in_slot == "protection_outfit" or item_in_slot == "scientific_outfit" then
            if cs == nil then
                hud:AddCustomStatic("okul", true)
                cs = hud:GetCustomStatic("okul")
            end
        else 
            if  cs ~= nil then
                hud:RemoveCustomStatic("okul") 
            end
        end
    end
end
function protivogaz()
local hud = get_hud()
local cs = hud:GetCustomStatic("protivgaza")
local  item_in_slot = db.actor:item_in_slot(6)
    if  item_in_slot ~= nil then
        if  item_in_slot == "outfit_exo_m1" or item_in_slot == "exo_outfit" then
            if cs == nil then
                hud:AddCustomStatic("protivgaza", true)
                cs = hud:GetCustomStatic("protivgaza")
            end
        else 
            if  cs ~= nil then
                hud:RemoveCustomStatic("protivgaza") 
            end
        end
    end
end
function shlemi()
local hud = get_hud()
local cs = hud:GetCustomStatic("shlem")
local  item_in_slot = db.actor:item_in_slot(6)
    if  item_in_slot ~= nil then
        if  item_in_slot == "specops_outfit" or item_in_slot == "military_outfit" then
            if cs == nil then
                hud:AddCustomStatic("shlem", true)
                cs = hud:GetCustomStatic("shlem")
            end
        else 
            if  cs ~= nil then
                hud:RemoveCustomStatic("shlem") 
            end
        end
    end
end

 

Правда в первой функции перечислений много. Она также не работает - худы не выводятся, вылетов нет

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

TRAMP14

Тебе же выше уже объяснили почему не работает.

 

А теперь вот что.

Допустим ты без костюма и статик не установлен.

(Смотрим в любой из функций)

1. Одеваешь костюм :

if item_in_slot ~= nil then -- Истина (костюм уже надет - не равен NIL)

...

if cs == nil then -- Истина (статик пока не установлен)

hud:AddCustomStatic("okul", true) --установить статик

2. Снимаешь костюм :

if item_in_slot ~= nil then -- Ложь (Слот уже пуст - равен NIL)

...

end

end -- функция отработала, НО !

Костюм уже снят, а кто статик будет удалять?

 

Ну и наконец, даже если бы работало, то всё это получилось достаточно затратно в ресурсах.

Можно сделать не только одной функцией, но и оптимизировать. Например :

function HandlerStatic()
    local hud = get_hud()
    local item_in_slot = db.actor:item_in_slot(6)
    local cs
    --Если установлен хотя бы один из статиков, задать переменной "cs" значение, отличное от "лжи"
    if hud:GetCustomStatic("nov_outfit") then
        cs = "nov_outfit"
    elseif hud:GetCustomStatic("okul") then
        cs = "okul"
    elseif hud:GetCustomStatic("protivgaza") then
        cs = "protivgaza"
    elseif hud:GetCustomStatic("shlem") then
        cs = "shlem"
    end
    -- Проверить, надет ли броник...
    if item_in_slot then -- если надет...
        if cs then return end -- ...и есть статик - прекратить работу функции
        local item_section = item_in_slot:section()
        if  item_section == "specops_outfit" or item_section == "military_outfit" then
            cs = "nov_outfit"
        elseif item_section == "outfit_exo_m1" or item_section == "exo_outfit" then
            cs = "protivgaza"
        elseif item_section == "dolg_scientific_outfit" or item_section == "ecolog_outfit" or
               item_section == "protection_outfit" or item_section == "scientific_outfit" then
            cs = "okul"
        else cs = "nov_outfit" -- предполагаю что тут все остальные костюмы. Может ошибаюсь.
        end
        -- если надет и нет статика, то установить статик
        hud:AddCustomStatic(cs, true)
    elseif not cs then return -- если броник не надет и нет статика, то прекратить работу функции
    else -- если броник не надет и есть статик, то удалить статик
        hud:RemoveCustomStatic(cs)
    end
end

 

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

СпасибО!

Вот такой вопрос - есть ли правила когда ставить db.actor:item_in_slot(6) а когда db.actor:item_in_slot(6):section()? А то я почти никогда не ставил и все работало. А сейчас на тех же сравнениях требуется ставить :section()

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

Не подскажете как создать логовище полтергейста на Заводе Юпитер, ну там где входите в главный корпус, когда ищете вертолёт, вроде бы точка Б8. Там много разбросанных вещей, подходящих под метательные снаряды. Хотелось бы создать точку респауна полтергейстов с их постоянным респапуном в этом месте. Как лучше это сделать и какую примерно логику лучше использовать?

Изменено пользователем UX-3000
799cb8cfabad201fceffb0833252c67b.gif
 
То, что меня не убивает - делает меня сильнее

 

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

TRAMP14

Странноватый вопрос у тебя.

Если ты хочешь просто проверить, есть ли итем в слоте или нет, то можно так писать:

local gg = db.actor:item_in_slot(6)
if gg~=nil then

А если тебе надо узнать, какой именно итем в слоте, то тогда надо использовать section().

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

TRAMP14

Уясни наконец разницу между юзердатой и строкой. И вспомни - когда ты использовал только юзердату, с чем ты ее сравнивал? С nil.

То есть делал типа того: if db.actor:item_in_slot(6) ~= nil then - это просто проверка, что предмет в слоте(экземпляр класса) не nil (то есть что там есть хоть какой то предмет - не важно какой секции). Юзердата, которую возвращает метод item_in_slot(number) , в данном случае это просто экземпляр объекта определенного класса вообще. Как допустим ты - экземпляр класса homo sapiens. Но все люди разные и экземпляры объекта одного и того же класса тоже разные. Например у них разные имена - секции. И как раз метод section() их возвращает.

Разница между юзердатой и строкой - огромная. Это совершенно разные типы. И их нельзя (потому что бессмысленно) сравнивать друг с другом.

Поэтому когда тебе нужно сравнить секцию объекта с другой секцией (а это строки) нужно применять метод section(). (или section_name() для серверных объектов).

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

TRAMP14

Давай представил что у тебя в слоте №6 не оружие, а кот. Если ты применяешь такую функцию: local gg = db.actor:item_in_slot(6), то ты как бы берешь кота за шиворот и можешь делать с ним все что угодно. Выкинуть, узнать его имя, массу, рост и т.д. А если ты используешь функцию db.actor:item_in_slot(6):section() то ты только узнаешь имя кота, его секцию в файле итем.

Freedom

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

Ещё хотел спросить что тут правильно:

object():section()

db.actor:object():section()

object:section()

obj:section()?

Или есть ещё какие либо варианты?

1 и 2 дают вылеты

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 chernobyl\gamedata\scripts\glavnaa.script:2: attempt to index a number value

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 chernobyl\gamedata\scripts\glavnaa.script:2: attempt to call method 'section' (a nil value)

 

Боюсь и остальные тоже :(

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

TRAMP14, object:section() и obj:section() одно и тоже!

Что значит правильно? Что ты хочешь сделать?

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

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

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

object():section() - это вообще непонятно что. Максиум, если у тебя есть функция, которая возвращает объект, то тогда это будет рабочее. Но только если у тебя есть функция object() в данном скрипте, которая возвращает объект. Тогда эта строка возвратит секцию объекта, которого возвращает функция object()

db.actor:object():section() - вооще вылетит в любом случае. Ибо ты пытаешься получить объект nil у актора.

object:section() и obj:section() это одно и тоже. Получаешь объект каким либо образом, и применяешь к нему метод section().

Freedom

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

Мне надо посмотреть какой обьект используется и сравнить его с тем который мне нужен, в статье "Звук при использовании предмета" именно ета функция. из неё я собственно и брал. Но вылет :(

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

TRAMP14, тебе же выше писали, если ты хочешь сравнить объект по секции (тип данных string), то сравнивать нужно так:

local obj = db.actor:item_in_slot(6)
local obj_section = obj:section()
if obj_section == "stalker_outfit" then

, если ты напишешь так:

obj = db.actor:item_in_slot(6)
if obj_section  then

, то ты просто проверишь, есть ли вообще, что нибудь в слоте! И таким образом ты можешь делать все, что позволяет класс, к которому принадлежит этот объект. obj - это экземпляр класса. Например, Карась - это экзепляр класса Рыба, а Щука - это уже другой экземпляр, того же класса! :)

Через экземпляр класса ты можешь получить его имя:

local obj_name = obj:name()

, уникальный идентификатор объекта:

local obj_id = obj:id()

, позицию:

local obj_position = obj:position()

, гейм вертекс:

local obj_gv = obj:game_vertex_id()

и так далее и тому подобное.

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

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

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

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

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

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

Войти

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

Войти

AMK-Team.ru

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