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

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


Svoboда

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

Зачем эктив-слот? Вот проверка наличия брони в слоте

Скрытый текст

local actor = db.actor
local item = actor and actor:item_in_slot(6)
return item

 

  • Согласен 1

Здесь могла быть ваша реклама.

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


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

При отсутствии в оллспаун указанных для объекта путей получаю зависание объекта и сообщение в лог:

Скрытый текст

Scheduler tried update object <имя_объекта>

Возможно ли в этот момент отловить косяк и проинформировать сообщением на худ?

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
Только что, AndreySol сказал:

Данное сообщение движковое

Я так и думал. Ф-ии abort и правки xr_logic в лучшем случае позволяют получать СМС при сохранении...

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
9 часов назад, Libery сказал:

Не получается

Я бы посоветовал применить рекомендацию, которую дал @AndreySol и протестить на самом простеньком и безобидном коде, что бы понять на практике самому, "как надо, что бы работало".

Изменено пользователем mole venomous
  • Спасибо 1
  • Согласен 2

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
10 минут назад, Libery сказал:

что бы человек не мучился

Я не просто так посоветовал попробовать самому применить на практике, взяв за основу простой скрипт. На практике понимаешь, что делаешь. Это в дальнейшем пригодится, это личный опыт.

  • Согласен 4

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
5 минут назад, Libery сказал:

Моды это как хобби

Если меня сейчас поволочёт, модераторы переместят к чертям это.  Я думаю, с моддингом и спортом можно провести параллели. Это как хобби, к этому есть привыкание. Застойное состояние снижает интерес, а успехи вдохновляют ещё больше. Понятно, что во всём сам не разберёшься. Тебя подталкивают, а дальше сам. В итоге ты благодарен за помощь, но успех вдвойне приятен, потому что "дальше сам".

Тебе вот такое посоветовали

Скрытый текст

if item:clsid() ~= clsid.obj_bolt and item:clsid() ~= clsid.device_pda then -- пример для болта и ПДА
         actor:transfer_item(item, box)

    end

А следующий твой пост без этого. Выходит, ты не использовал? Как тогда оно будет работать?

  • Согласен 2

Здесь могла быть ваша реклама.

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


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

Решил по быстрому заспавнить освещение скриптом. Использовал код из AEM (для смены освещения на арене). Всё спавниться и работает, но после сейв/лоада объекты меняют свой direction. По висячим лампам "ильича" этого не видно, а несимметричные объекты, типа настольной лампы, доставляют. Думаю, в коде нужны дополнительные манипуляции с direction и если так, то какие? Код почти без правок, добавил аргументы lvid и gvid:

Скрытый текст

function v3f(x,y,z) 
    return vector():set(x,y,z)
end

 

пример спавна

add_lamp(v3f(139.67343139648,-6.1285934448242,180.18035888672),1203772,3686,v3f(0,-1.0,0),"physics\\light\\lampa_01_on",0.8,true)

 

function add_lamp(pos, lvid, gvid, dir, visual, brightness, shadow, color)
    local light_flags = 56                
    if shadow then light_flags = light_flags + 2 end
    local packet = net_packet()
    packet:w_u16(gvid)
    packet:w_float(0.0)
    packet:w_s32(1)
    packet:w_s32(lvid)
    packet:w_s32(-70)                
    packet:w_stringZ("")
    packet:w_s32(-1)
    packet:w_s32(-1)
    packet:w_stringZ(visual)
    packet:w_u8(0)
    packet:w_stringZ("$editor")
    packet:w_u8(0)
    packet:w_u16(-1)
    if color ~= nil then
        packet:w_s32(color)
        packet:w_float(brightness)
        packet:w_stringZ("")
    else
        packet:w_s32(-1)
        packet:w_float(brightness)
        packet:w_stringZ("light\\light_omni_white_idle")
    end
    packet:w_float(14.0)
    packet:w_u16(light_flags)
    packet:w_stringZ("$editor")
    packet:w_stringZ("link")
    packet:w_float(100.0)  
    packet:w_float(0.1)    
    packet:w_float(4.0)    
    packet:w_float(0.3)    
    packet:w_stringZ("")
    packet:w_stringZ("")
    packet:w_stringZ("bone_lamp")  
    packet:w_float(1.0)            
    packet:w_stringZ("")
    packet:w_float(0.7) 
    packet:w_stringZ("bone_omni")

    local se_obj = alife():create("aem_lamp", pos, lvid, gvid)
    se_obj:STATE_Read(packet, packet:w_tell())

    if dir ~= nil then
        se_obj.direction = vector():set(dir)
    end
end

После спауна (как запланировано):

https://yadi.sk/i/Wqubj3MUGLwvhA

После сейв/лоада(повёрнута):

https://yadi.sk/d/aqF7QfAZH5y5GQ

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

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
4 часа назад, UriZzz сказал:

_g.script:1382: attempt to call global 'exit'

А что это за эксит? Начни с него. Я хелпера не сразу подключил, тоже из _g на него ругань сыпалась. Правда на 1.0006 всё было, но уже со значительными вмешательствами в глобальное пространство. 

Ругался, вроде, на функцию log или abort...

 

4 часа назад, UriZzz сказал:

Scheduler tried to update object

А это и всё остальное из скриптов следом идёт.

@Colder

Вот ссылка:

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

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

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
20 минут назад, UriZzz сказал:

Помогите с одной функцией

Может, я не так понял вопрос, но если использовать флаг enemy и оператор break?

Для примера оригинальный код АМК:

Скрытый текст

    if alife():object(oid)==nil then
        local enemy=false
        for a=0,65534 do
            local obj=level.object_by_id(a)
            if obj then
                if (( IsStalker(obj) and amk.get_npc_relation(obj,db.actor)=="enemy" ) or 
                    IsMonster(obj)) and obj:position():distance_to(db.actor:position())<40 
                    and obj:see(db.actor) then
                    enemy=true
                    break
                end
            end
        end
        if enemy==true then
            amk.send_tip(game.translate_string("not_need_sleep_enemy"),nil,nil,5)
        else
            if amk.load_variable("blowout",-1)>-1 and amk.load_variable("blowout",-1)<5 then
                amk.send_tip(game.translate_string("blowout_not_sleep"),nil,nil,5)
            else
                if amk.load_variable("block_sleep_menu",0)==0 then
                    if amk.load_variable("gg_need_sleep",0)>10 then
                        local spwn=ui_cheat.cheat(get_hud())
                        level.start_stop_menu(spwn,true)
                    else
                        amk.send_tip(game.translate_string("not_need_sleep"),nil,nil,5)
                    end
                else
                    amk.send_tip(game.translate_string("not_need_sleep_nrg"),nil,nil,5)
                end
            end
         end
        amk.spawn_item_in_inv("matras")
    end

 

  • Спасибо 1

Здесь могла быть ваша реклама.

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


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

Возник вопрос по GPS-меткам с хабаром от Idler'а. Вернее, по их работе на движке OGSR. С переходом на новый движок они стали работать только до перезагрузки. Т.е. метка ставиться, список хабара или имя НПС отмечены, после сейв/лоада ничего уже нет. Просмотр отладочной информации мне даёт понять, что при загрузке "найдено 0 маячков и метка удалена". Кто-нибудь сталкивался с подобным при адаптации?

Здесь могла быть ваша реклама.

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


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

@Jekyll насчёт последствий не знаю наверняка. Но в НС2016 (вероятно и не только там) есть способ удаления, цитата: 

"функция удаляющая объект с неверным вертексом(определение на валидность не только game, но и level вертекса)"

Если имеются ввиду именно такие объекты, то это как способ (костыль) решения возможных последствий.

 

  • Спасибо 1

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
7 минут назад, Zander_driver сказал(а):

Может быть, все же раскроете секрет?

Нет, не раскрою. Это лишь предположение, основанное на том, что раз есть способ принудительного удаления, он для чего то нужен.

Здесь могла быть ваша реклама.

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


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

@Zander_driver я бы вообще ничего не писал, но аномалии он удалять может. @Jekyll поинтересовался о возможных проблемах, я выразил своё предположение (у меня всегда удаляет на НИ одни и те же зоны).  А заодно у меня есть вариант положить в свою копилочку маленько знаний на очередном мини-заседании.

Здесь могла быть ваша реклама.

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


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

@Colder обозначь аномалию, как объект и установи условие, при котором между ГГ и объектом будет меньше указанного расстояния для выполнения необходимого действия. И, как и обозначил Zander, это перебор 65 тысяч объектов, но способ рабочий.

Если движок 10006 и ранее, посмотри в файлах амк-мода (amk_anoms.script), как определить аномалию. Дальше методом научного тыка тебе станет уже понятнее.

Изменено пользователем mole venomous
  • Спасибо 1

Здесь могла быть ваша реклама.

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


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

@h0N0r Может, поможет такая проверка?

if (obj.parent_id and obj.parent_id == 65535)

  • Смешно 1

Здесь могла быть ваша реклама.

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


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

По поводу артефактов. С самого начала использую скрипт art_mgr и всё мне нравится, кроме того, что порой арты спаунятся где-нибудь в недоступности для ГГ (за колючкой, например). ГГ их взять не может, мобы тоже там не ходят, вот и лежит артефакт там всё время. Но по легенде, на открытом воздухе он "тратится" и когда его condition менее нижнего предела, попросту удаляется. И вот тут моих знаний не хватает, что бы пользоваться стандартными ф-иями, банальные методы condition() и set_condition() приводят к вылету. Пришлось средствами m_netpk через биндер net_spawn отнимать у валяющихся артов понемногу кондиции (плюс-минус рандом) каждые несколько часов.

  • Сомнительно 1

Здесь могла быть ваша реклама.

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


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

@Colder 

function check_community(community)
    if db.actor then
        return db.actor:character_community() == community
    end
    return false
end    

Скрытый текст

if check_community("actor") then 
    action 1
else
    action 2
end    

 

  • Нравится 1

Здесь могла быть ваша реклама.

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


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

Не поленился и проверил. Конкретно эта лампочка (light_uglovaya_1_glass_0006) замечательно удаляется, как источник света. Оставшийся светильник это декор на локации.

@I am Dead ,

способ вполне рабочий, что предложил@AndreySol , только , как уже указали, там кавычки нужны.

Скрытый текст

    local sim = alife()
    local s_obj = sim:object("light_uglovaya_1_glass_0006")
    if s_obj then
        sim:release(s_obj, true)
    end

Сам всё проверил, поставил вызов ф-ии при загрузке левела.

Изменено пользователем mole venomous
  • Нравится 2
  • Согласен 1
  • Полезно 1

Здесь могла быть ваша реклама.

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


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

Думаю, проверки на наличие s_obj достаточно, но если нужна проверка  поршня, лучше сделать из bind_stalker, биндер net_spawn что-то вроде:

Скрытый текст

if not has_alife_info(инфо) then
     self.object:give_info_portion(инфо)    
     экшн
end 

 

Изменено пользователем mole venomous
  • Спасибо 1

Здесь могла быть ваша реклама.

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


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

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