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

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


Svoboда

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

Всем привет! Начал ковыряться в логике, получается не всё( вот не знаю как из файла логики обратиться к скрипту, как? Всё перерыл, ничего не нашел

 

Вот допустим функция в файле test.script:

function conf_door()

...

return true

end

 

А вот логика:

[ph_door@locked]

locked = true

closed = true

on_info = {тут обращение к функции должно быть как я понимаю} ph_door@open ; как тут обратиться к своей функции в моём скрипте?

 

Заранее спасибо

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


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

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

 

Пишу свой мод, свой сюжет, если что

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


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

У меня в сталкере, если подбираешь артефакт, то он наноси мне хит. Когда я выкидываю этот арт и подбираю, я сделал так чтиобы он мне не наносил хит повторно, но!!! но подобрав много артов и когда я произвожу рестарт игры меня тупо убивает.... как выполнить проверку на арты которые я уже подбирал.

 

local art_params = {

["af_ameba_mica"] = {0.4, 0.5, hit.shock},

["af_ameba_slime"] = {0.4, 0.8, hit.strike},

["af_ameba_slug"] = {0.6, 0.8, hit.fire_wound},

["af_blood"] = {0.8, 0.9, hit.shock},

["af_cristall"] = {0.9, 0.3, hit.strike},

["af_cristall_flower"] = {0.9, 0.7, hit.strike},

["af_drops"] = {0.1, 0.4, hit.explosion},

["af_dummy_pellicle"] = {0.7, 0.5, hit.burn},

["af_electra_flash "] = {0.8, 0.1, hit.telepatic},

["af_electra_moonlight"] = {0.4, 0.3, hit.wound},

["af_electra_sparkler"] = {0.7, 0.7, hit.strike},

["af_fireball"] = {0.4, 0.1, hit.radiation},

["af_fuzz_kolobok"] = {0.8, 0.6, hit.explosion},

["af_gold_fish"] = {0.8, 0.1, hit.radiation},

["af_gravi"] = {0.4, 0.3, hit.telepatic},

["af_medusa"] = {0.5, 0.7, hit.burn},

["af_mincer_meat"] = {0.5, 0.3, hit.radiation},

["af_night_star"] = {0.6, 0.7, hit.explosion},

["af_rusty_kristall"] = {0.1, 0.2, hit.telepatic},

["af_rusty_sea-urchin"] = {0.4, 0.3, hit.explosion},

["af_rusty_thorn"] = {0.5, 0.8, hit.strike},

["af_soul"] = {0.9, 0.9, hit.shock},

["af_vyvert"] = {0.4, 0.9, hit.telepatic}

}

 

local tbl_exists = {}

 

--- #$ Функция обновление рэндома хита радиактивного дождика

function artefacts_hit(object)

if object then

local section = object:section()

 

if section and art_params[section] then

-- Проверка на существование

if not tbl_exists[object:id()] then

-- Заполняем tbl_exists чтоб когда мы выбрасываем и подбираем его снова нам урон не наносился

table.insert(tbl_exists, object:id())

tbl_exists[object:id()] = section

 

local hit = hit()

 

hit.draftsman = db.actor

hit.direction = vector():set(0,0,0)

hit.impulse = art_params[section][2]

hit.type = art_params[section][3]

hit.power = art_params[section][1]

 

level.add_pp_effector("amk_shoot.ppe", 2011, false)

db.actor:hit(hit)

end

end

end

end

 

 

 

эту функцию я повесил на actor_binder:on_item_take

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

 

 

Народ, как это исправить?

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

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


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

class "MapTex" (CUIScriptWnd)
function MapTex:__init() super()
    self:Init(0, 0, device().width, device().height)

    self.overlay = CUIStatic()
    self.overlay:Init(15, 15, 256, 256)
    self.overlay:InitTexture("MapTex\\MapTex") -- текстурка
    self.overlay:SetStretchTexture(true)
    self.overlay:Show(true)
    self:AttachChild(self.overlay)
end

 

 

Мне нужно скриптом повернуть эту текстуру, как?

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


Ссылка на сообщение
В конфиге статика указать параметр heading="1".

Это динамический статик, я не прописываю ему никакой конфы в ui_custom_msgs.xml

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


Ссылка на сообщение
local health_hud = nil
local power_hud = nil
local spots = {}
local spot_init_table = {}
local maptex = nil
local is_hide = false
local health = nil
local power = nil

function start_update()
    for id = 1, 65535 do
        local sobj = alife():object(id)
        if sobj then
            local ssect = sobj:section_name()
            for _, v in ipairs(list_arts) do
                if ssect == v then
                    artefacts[id] = {}
                    artefacts[id].spot = false
                    artefacts[id].time_beep = 0
                    
                    a_m.Tips:show(sobj:section_name(), "CAutoGnomTest",nil,5)
                end
            end
        end
    end
end

class "CAutoGnomSpot" (CUIScriptWnd)
function CAutoGnomSpot:__init(owner, id, x, y) super()
    self:Init(0, 0, device().width, device().height)

    self.owner = owner
    self.id = id

    if spots[self.id] == nil then
        spots[self.id] = CUIStatic()
        spots[self.id]:SetAutoDelete(true)
        spots[self.id]:InitTexture("autognom_minimap\\white_dot")
        spots[self.id]:SetStretchTexture(false)
        spots[self.id]:SetWndRect(x, y, 2, 2)
--        spots[self.id]:SetFont(GetFontLetterica16Russian())
        spots[self.id]:Show(true)
        
        self:AttachChild(spots[self.id])
    end
end

function CAutoGnomSpot:Update()
    CUIScriptWnd.Update(self)
    local obj = level.object_by_id(self.id)
    
    if obj and obj:position():distance_to_xz(db.actor:position()) <= self.owner.max_distantion and obj.health > 0 then
        local x, y = self.owner:get_pos_data(obj:position())
        spots[self.id]:SetWndRect(x, y, 2, 2)
        
        if is_hide == false then
            spots[self.id]:Show(true)
        else
            spots[self.id]:Show(false)
        end

        local color = self:get_color(self.id)
        spots[self.id]:SetColor(color)
        
        if obj.health <= 0 then
            RemoveSpot(self.id)
        end
    else
        spots[self.id]:Show(false)
    end
end

function CAutoGnomSpot:get_color(id)
    local obj = level.object_by_id(id)
    local so = alife():object(id)
    local stalker = IsStalker(so)

    if obj:alive() then
        if obj:id() == db.actor:id() then
            return GetARGB(255, 255, 132, 0) -- its me)
        end
        
        if stalker then
            if obj:relation(db.actor) == game_object.friend then
                return GetARGB(255, 0, 255, 0) -- green
            elseif obj:relation(db.actor) == game_object.enemy then
                return GetARGB(255, 255, 0, 0) -- red
            else
                return GetARGB(255, 255, 255, 0) -- yelloy
            end
        end
    else
        return GetARGB(255, 127, 127, 127)
    end
end

-- *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
-- *_# Класс полоски здоровья
-- *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
class "CAutoGnomHealth" (CUIScriptWnd)
function CAutoGnomHealth:__init() super()
    self:Init(0, 0, device().width, device().height)

    self.overlay = CUIStatic()
    self.overlay:Init(157, 173, 128, 128)
    self.overlay:InitTexture("autognom_minimap\\green\\autognom_green_25")
    self.overlay:SetStretchTexture(true)
    self.overlay:SetAutoDelete(true)
    self.overlay:Show(true)
    self:AttachChild(self.overlay)
end

function CAutoGnomHealth:Update()
    CUIScriptWnd.Update(self)
    
    if health ~= db.actor.health then
        local num = math.floor(db.actor.health * 25)
        health = db.actor.health

        if num >= 0 then
            self.overlay:InitTexture("autognom_minimap\\green\\autognom_green_" .. tostring(num))
        else
            self.overlay:InitTexture("autognom_minimap\\green\\autognom_green_0")
        end
    end
    
    if is_hide == false then
        self.overlay:Show(true)
    else
        self.overlay:Show(false)
    end
end

-- *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
-- *_# Класс полоски выносливости
-- *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
class "CAutoGnomPower" (CUIScriptWnd)
function CAutoGnomPower:__init() super()
    self:Init(0, 0, device().width, device().height)

    self.overlay = CUIStatic()
    self.overlay:Init(145, 10, 128, 128)
    self.overlay:InitTexture("autognom_minimap\\blue\\autognom_blue_25")
    self.overlay:SetStretchTexture(true)
    self.overlay:SetAutoDelete(true)
    self.overlay:Show(true)
    self:AttachChild(self.overlay)
end

function CAutoGnomPower:Update()
    CUIScriptWnd.Update(self)

    if power ~= db.actor.power then
        local num = math.floor(db.actor.power * 25)
        power = db.actor.power

        if num >= 0 then
            self.overlay:InitTexture("autognom_minimap\\blue\\autognom_blue_" .. tostring(num))
        else
            self.overlay:InitTexture("autognom_minimap\\blue\\autognom_blue_0")
        end
    end
    
    if is_hide == false then
        self.overlay:Show(true)
    else
        self.overlay:Show(false)
    end
end


-- *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
-- *_# Класс миникарты
-- *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
class "CAutoGnomMiniMap" 
function CAutoGnomMiniMap:__init()
    self.max_distantion = 70
    self.map_radius = 85 
    self.map_cntr_x = 138
    self.map_cntr_y = 138 
    self.disabled = false
    
    self.signal_power = {
        l01_escape         = {90, 100},
        l02_garbage     = true,
        l03_agroprom     = true,
        l04_darkvalley     = true,
        l05_bar         = true,
        l06_rostok         = true,
        l07_military     = true,
        l08_yantar         = true,
        l10_radar         = true,
        l11_pripyat     = true
    }

    self.time_update = time_global() + 1000
    self.update_map_r = false
end

function CAutoGnomMiniMap:update_map_radius(signal)
    self.map_radius = signal
end

function CAutoGnomMiniMap:update_map_radius_random()
    if self.update_map_r == true then
        local now_time = time_global()
        if now_time > self.time_update then 
            self.time_update = now_time + math.random(500, 2000)

            local signal = math.random(self.signal_power[level.name()][1], self.signal_power[level.name()][2])
            
            self:update_map_radius(signal)
        end
    end
end

function CAutoGnomMiniMap:get_pos_data(tpos)
    local cam_dir = device().cam_dir
    local dir = tpos:sub(db.actor:position())

    vect = vector_rotate_y(vector():set(dir.x / self.max_distantion * self.map_radius, 0, 
        -dir.z / self.max_distantion * self.map_radius), math.atan2(-cam_dir.x, cam_dir.z) / math.pi * 180)

    return vect.x + self.map_cntr_x, vect.z + self.map_cntr_y
end

function CAutoGnomMiniMap:is_disabled()
    if self.disabled == true then
--
        return true
    end
    
    return false
end

function CAutoGnomMiniMap:update()
    if self:is_disabled() then
        return
    end

    local hud = get_hud()

    if maptex == nil then
        ShowPowerHud()
        ShowHealthHud()
        ShowMapTex()
    end

    for id, obj in pairs(db.storage) do
        local obj = level.object_by_id(id)
        local sobj = alife():object(id)

        if sobj and obj then
            local stalker = IsStalker(sobj)
            
            if stalker and obj:position():distance_to_xz(db.actor:position()) <= self.max_distantion then
                local x, y = self:get_pos_data(obj:position())
                
                if obj.health > 0 then
                    local id = obj:id()
                --    if spots[id] == nil then
                        AddSpot(self, id, x, y)
                --    end
                end
            end
        end
    end
end

-- *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
-- *_# Класс текстурки миникарты
-- *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
class "CAutoGnomMapTex" (CUIScriptWnd)
function CAutoGnomMapTex:__init() super()
    self:Init(0, 0, device().width, device().height)

    self.overlay = CUIStatic()
    self.overlay:Init(15, 15, 256, 256)
    self.overlay:InitTexture("autognom_minimap\\autognom_minimap")
    self.overlay:SetStretchTexture(true)
    self.overlay:Show(true)
    self.overlay:SetAutoDelete(true)
    self:AttachChild(self.overlay)
end

function CAutoGnomMapTex:Update()
    CUIScriptWnd.Update(self)
--self.overlay:SetHeading(math.rad(math.random(360)))
    if is_hide == false then
        self.overlay:Show(true)
    else
        self.overlay:Show(false)
    end
end

function ShowMapTex()
    if maptex == nil then
        maptex = CAutoGnomMapTex()
        get_hud():AddDialogToRender(maptex)
    end
end

function RemoveMapTex()
    if maptex ~= nil then
        get_hud():RemoveDialogToRender(maptex)
        maptex = nil
    end
end

function CAutoGnomMapTex:__finalize()
    RemoveMapTex()
end

function ShowHealthHud()
    if health_hud == nil then
        health_hud = CAutoGnomHealth()
        get_hud():AddDialogToRender(health_hud)
    end
end

function RemoveHealthHud()
    if health_hud ~= nil then
        get_hud():RemoveDialogToRender(health_hud)
        health_hud = nil
    end
end

function CAutoGnomHealth:__finalize()
    RemoveHealthHud()
end


function ShowPowerHud()
    if power_hud == nil then
        power_hud = CAutoGnomPower()
        get_hud():AddDialogToRender(power_hud)
    end
end

function RemovePowerHud()
    if power_hud ~= nil then
        get_hud():RemoveDialogToRender(power_hud)
        power_hud = nil
    end
end

function CAutoGnomPower:__finalize()
    RemovePowerHud()
end


function AddSpot(owner, id, x, y)
    if spot_init_table[id] == nil then
        spot_init_table[id] = CAutoGnomSpot(owner, id, x, y)
        get_hud():AddDialogToRender(spot_init_table[id])
    end
end

function RemoveSpot(id)
    if spot_init_table[id] ~= nil then
        get_hud():RemoveDialogToRender(spot_init_table[id])
        spot_init_table[id] = nil
    end
end

function CAutoGnomSpot:__finalize()
    RemoveSpot(self.id)
end

function HideAllStatics()
    is_hide = true
end

function ShowAllStatics()
    is_hide = false
end

Когда загружаю игру, все мои статики корректно отображаются, всё работает без проблем, игра загружается через F6 без прблем

 

Проблема в следующем: при переходе на другую локацию, игра крашится без лога. Показывается "Сервер: старт игры" и вылет без лога. Понять не могу вчём тут дело, помогите пожалуйста

 

Както не хочется бросать эти наработки на пол дороги

 

Используй для кодов соответствующий тэг (code), чтобы сохранять форматирование/отступы. --/Artos

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

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


Ссылка на сообщение
AutoGnom, Я пишу свою модификацию, много чего не знаю ещё, учусь), хочется своих нароботок, а не копипастов))

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


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

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