Правила сайта FAQ Мини-чат
Для добавления необходима авторизация!
16.11.2024, Суббота, 04:41


Модератор форума: romale  
Разборочная комната ТЧ
Сообщение #1
Вы задаёте интересующий вас вопрос и тот, кто может вам на него ответить, пишет свой ответ. Правила темы:

1. Прежде чем задать вопрос, желательно прочитать все предыдущие страницы темы. Даже если вы не найдете там нужного ответа - я уверен, вы узнаете много нового. Второй вариант - воспользоваться поиском по ключевому слову.

2. Вы можете задавать вопросы, только непосредственно касающиеся создания модификаций и редактирования файлов игры

3. Личные вопросы не допускаются

4. Отвечать на вопросы желательно достаточно развернуто, задевая все аспекты касающиеся конкретного вопроса

5. Отвечать вы можете только в том случае если уверены в правильности ответа, если не знаете - просто не отвечайте. Авторы неправильных, вводящих в заблуждение ответов будут наказываться.

6.Соблюдайте грамотность и правильность построения вопросов и ответов, во избежание их удаления. "Спасибо / пожалуйста / не знаю" и прочие односложные и
не несущие смысловой нагрузки сообщения, будут удаляться немедленно, а их авторы - наказываться.

Основная цель темы - помочь новичкам-модостроителям, второстепенная - свести на нет тенденцию создания новых тем по каждому интересующему новичков вопросу.

Уважение: 133
Награды: 32
Сообщение #421
Graff46, Насчет значения db.actor:alcohol не знаю (да и существует ли оно вообще?). Можете попробовать спавнить пару бутылок водки и сразу их выпивать. Съесть что-то можно так:
Код
local alc = db.actor:object("vodka")
    if alc then
       db.actor:eat(alc)
    end

Насчет сломанного оружия - нужно назначать здоровье предмета через net_packet (если скриптово). Либо ищите секцию в алл спавне и таким макаром спавните то, что нужно.


perez, Открываете конфиг нужного оружия и находите там значение slot и ставите цифру 1.
ЗЫ: Не забываем, что пистолетный слот не предусмотрен для больших пушек - клеток не хватит и будет все криво.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #422
Цитата (volazar)
Насчет сломанного оружия - нужно назначать здоровье предмета через net_packet (если скриптово).

Как реализовать скриптово? Я спавнил так:
Код

     function habar_fan ()    
    alife():create("dolg_outfit",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
    alife():create("grenade_rgd5",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
     alife():create("grenade_rgd5",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
     alife():create("grenade_rgd5",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
    alife():create("grenade_f1",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
    alife():create("wpn_mp5_m2",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
     alife():create("ammo_9x19_pbp",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
     alife():create("ammo_9x19_pbp",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
     alife():create("ammo_9x19_pbp",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
     alife():create("ammo_9x19_pbp",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
     alife():create("ammo_9x19_pbp",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
а именно нужно уменьшить здоровье мп5
Код
alife():create("wpn_mp5_m2",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)

Сообщение отредактировал Graff46 - Воскресенье, 05.05.2013, 03:34


Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #423
Цитата (Graff46)
Как реализовать скриптово?

Должен быть установлен АМК мод или библиотека net_packet (на АМК лежит за авторством Artos и Co).
Пример скриптового спавна подсказать не смогу, не было причин спавнить порченое оружие :)
Можете заспавить через алл спавн, пример:
Код
[20073]
; cse_abstract properties
section_name = wpn_ognemet
name = jup_gun_2
position = -390.73,12.77,-16.55
direction = 0,4.7,0

; cse_alife_object properties
game_vertex_id = 3708
distance = 0
level_vertex_id = 57647
object_flags = 0xffffff07

; cse_visual properties
visual_name = weapons\fn2000\wpn_fn2000_old

; cse_alife_item properties
condition = 1
upd:num_items = 0

; cse_alife_item_weapon properties
ammo_current = 90
upd:condition = 255
upd:weapon_flags = 0
upd:ammo_elapsed = 50
upd:addon_flags = 0
upd:ammo_type = 0
upd:weapon_state = 0
upd:weapon_zoom = 0
upd:current_fire_mode = 0

Важная строчка - condition = 1.

ЗЫ: Вашу ф-ию можно сократить:
Код
function habar_fan()
local tbl_obj = { "dolg_outfit", "wpn_mp5_m2", "grenade_f1", "ammo_9x19_pbp", "ammo_9x19_pbp", "ammo_9x19_pbp", "ammo_9x19_pbp", "ammo_9x19_pbp", "grenade_rgd5", "grenade_rgd5", "grenade_rgd5" } -- таблица с нужными предметами
     for _, obj in pairs(tbl_obj) do
        alife():create(obj,vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
     end
end

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #424
Подскажите как можно вызвать ф-цию при старте новой игры?
Сообщение отредактировал Graff46 - Воскресенье, 05.05.2013, 13:56


Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #425
Цитата (Graff46)
Подскажите как можно вызвать ф-ию при старте новой игры?

Вариантов - море. Как пример в bind_stalker.script в тело функции actor_binder:update(delta) пишите:
Код
if not has_alife_info("info") then
......
db.actor:give_info_portion("info")  
end

Вместо многоточия вставляете что нужно. Поршень info надо не забыть зарегистрировать в info_***.xml
Цитата (Graff46)
где лежит модель ноутбука

\gamedata\meshes\equipments\item_notebook.ogf

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #426
Получилось только так
Код
if not has_alife_info("trifon") then   
            local alc = db.actor:object("vodka")   
             if alc then   
             db.actor:eat(alc)
            local alc = db.actor:object("vodka")   
                if alc then   
                db.actor:eat(alc)   
            db.actor:give_info_portion("trifon")    
            end
            end
            end

и две водки актору в аллСпавне;
db.actor:alcohol - не работает

Сообщение отредактировал Graff46 - Воскресенье, 05.05.2013, 14:57


Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #427
Graff46, А зачем вы объявляете 2 раза одну и ту же переменную alc? Достаточно 1 раза. Да и не понятна конструкция if-a внутри if-a, у вас одно и тоже действие.
Сделайте цикл for i=1, 2 do и туда впихните db.actor:eat. Будет и быстрее.
Код
if not has_alife_info("trifon") then       
local alc = db.actor:object("vodka")
        if alc then
           for i=1, 2 do
              db.actor:eat(alc)
           end
        end
     db.actor:give_info_portion("trifon")              
end

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #428
Цитата (volazar)
А зачем вы объявляете 2 раза одну и ту же переменную alc

Я не программист и в этих тонкостях пока не разбираюсь))

Добавлено (05.05.2013, 16:22)
---------------------------------------------
Помогите составить ф-цию.
есть вот

Код
"Наносим хит предмету"
   
Код
Код:
function hit_nanesti()
     for a=1,65635,1 do
         local obj=level.object_by_id(a)
         if obj and string.find(obj:name(),"ПРЕДМЕТ") then  
             local h = hit ();
             h.power = 10000;
             h.direction = vector():set (0, 0, 0);
             h.impulse = 0;
             h.draftsman = obj;
             h.type = hit.explosion;
             obj:hit (h);
         end
     end
end

и вот
Код
function habar_fan_1 ()  
alife():create("wpn_mp5_m2",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
нужно их как то объединить что бы хит мп5 выдавался только той что спауниться

Добавлено (05.05.2013, 16:45)
---------------------------------------------
хит выдать хочу чтобы убавить здоровье мп5


Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #429
Graff46,
Код
function hit_nanesti()
alife():create("wpn_mp5_m2",vector():set(-207.53218078613,-22.037908554077,-127.47645568848),45952,58)
      for a=1,65635,1 do  
          local obj=level.object_by_id(a)  
          if obj and string.find(obj:name(),"wpn_mp5_m2") then   
              local h = hit();  
              h.power = 10000;  
              h.direction = vector():set(0,0,0);  
              h.impulse = 0;  
              h.draftsman = obj;  
              h.type = hit.explosion;  
              obj:hit(h);  
          end  
      end  
end

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #430
Не работает, я похоже так же делал. Ну её в пень! Я потом через аллСпавн сделаю.
Проверте пожалуйста ф-цию - она должна переводить нпс в оффлайн, выдавать инф.поршень
Код
fan_1
и если нпс на армейских складах то тогда переводит его в онлайн:
Код
function fan_v_off(actor, npc)            
  local npc = alife():story_object(022)     
   if npc then     
    alife():set_switch_online (npc:id (), false)         
    alife():set_switch_offline (npc:id (), true)
   end
   if npc and level.name() == "alife_l07_military" then
    alife():set_switch_online (npc:id (), true)         
    alife():set_switch_offline (npc:id (), false)
   end
  db.actor:give_info_portion("fan_1")
end
и проверте правельно ли я энды поставил, а то у меня с ними проблемы вечно.

Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #431
Код
level.name() == "alife_l07_military"

Проверка действует только на актора. НПС-у до фени, где он. Если вам надо отловить НПС-а в определенной точке - ставьте рестриктор с логикой on_npc_in_zone и выполняйте ф-ию из него же.
ЗЫ: Пример рестриктора, который сработает при входе в него определенного НПС-а:
Код
function create_restr()  
local obj = alife():create("space_restrictor",vector():set(x,y,z),lv,gv)  
local custom = [[
[logic]  
active = sr_idle  
[sr_idle]  
on_npc_in_zone = 022|]]..obj:name()..[[|nil %+info =func%]]  
rewrite_restrictor(obj, custom, 1.0)  
end

022 - сид, info - имя вашего поршня, func - имя функции.
ЗЗЫ: Не сработает, если вы будете в оффлайне.
ЗЗЗЫ: Ф-ия, которую вызываете из рестриктора должна обязательно находится в файле xr_effects.script
ЗЗЗЗЫ: На АМК моде работаете? Или на чистом сталкере? Если на чистом - то там не получится без правок спавнить через скрипт рестриктор.
ЗЗЗЗЗЫ: С ендами все нормально.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #432
Цитата (volazar)
Проверка действует только на актора

Разве??o_O Первоначальная ф-ция была такая:
Код

"Проверяет, находится ли, например, Волк на локации Кордон"
   
Код
Код:
function rest()
     local npc = level_object_by_sid(006) --волк
     if npc and level.name() == "l01_escape" then
         return true
     else
         return false
     end
end

Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #433
Graff46, Действительно, не посмотрел на story_object. Извиняюсь.
Но все остальное - про нахождение ф-ии - надо соблюсти.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #434
Ещё вопрос. Если сделать так:
Код
[smart_terrains]
esc_lager = {-fan_1}
mil_lager = {+fan_1}
, то нпс при наличии "fan_1" даже в онлайне пойдет на "мил лагерь"(а это на другую локацию) пешком! o_O проверял.
А если нпс перевести в оффлайн, а потом уже дать поршень на перемещение, то он "мгновенно" туда переместиться или будет также "идти"??

Сообщение отредактировал Graff46 - Воскресенье, 05.05.2013, 18:54


Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #435
Graff46, Будет идти. Только в оффлайне. Что вас в этом смущает? Вы думаете, что уходя с локации - жизнь замирает? НПС-ы/монстры воюют, умирают, попадают в аномалии, путешествуют по локациям и т.д

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #436
Ясно, в той ф-ции, что я писал ранее нужно одно условие: инфопоршень должен выдаться уже после того как нпс переведется в оффлайн, а у меня там происходит вроде все одновременно?

Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #437
Graff46, Поставьте выдачу после if npc then. Будет после перевода в оффлайн.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #438
Как можно привязать нпс к смартеррейну, если нпс заспавнен скриптом
Код

function pda_killer_spawn()
     local obj= alife():create("pda_merc_killer_glav",vector():set(-223.700,-7.678,-129.688),17000,281)

Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #439
Прописать в логике нужный смарт. Ну и естественно, чтобы в смарте было свободное место.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #440
[smart_terrain]
smart_terrain = true

Где smart_terrain - имя нужного смарта.

Уважение: 650
Награды: 97
Облучение: 0%
Поиск: