Jump to content

Skryptowy moduł śledzenia strzału z broni


Guest Diegtiariow

Recommended Posts

Guest Diegtiariow

Twórca tematu na ap-pro niedawno spotkał się z potrzebą śledzenia strzału z broni. W tym przykładzie będziemy chcieli dawać apteczkę za każdy strzał z LR300.

Autorzy: Gowther/Labadal, Jek@n i Charsi

 

Co się przyda?:

  1. bind_stalker.script
  2. wasza_nazwa.script - ten plik powinniście stworzyć sami.

wasza_nazwa.script:

Spoiler

1. funkcja gun() - podstawowa funkcja, która śledzi "wystrzał" (działa, jeśli zmniejszyła się ilość naboi w magazynku)

local check_ammo = false
local old_wpn_id = 0
function gun()
local wpn = db.actor:active_item()
if wpn then
    if wpn:id()~=old_wpn_id then
    old_wpn_id = wpn:id()
    if wpn:section() == "wpn_lr300" then --z jaką bronią chcemy pracować, w naszym przypadku - to LR300
        check_ammo = true
        ammo_old = wpn:get_ammo_in_magazine()
    end
    end
else
    if old_wpn_id~=0 then old_wpn_id=0 check_ammo=false end
end
if check_ammo then
    local curr_ammo = wpn:get_ammo_in_magazine()
    if curr_ammo < ammo_old then
    ammo_old = curr_ammo
    if not level.main_input_receiver() then gun_yes() end -- wykonujemy funkcję gun_yes() 
    elseif curr_ammo > ammo_old then
                old_ai_id = 0
    end
end
end

2. Funkcja gun_yes() - jest wykonywana tylko wtedy, jeśli poprzednia "dała zielone światło"

function gun_yes()
local curr_ammo_yes = db.actor:active_item():get_ammo_in_magazine() - liczymy naboje, zawsze na początku funkcji
--=============================================--własny kod pisać tylko poniżej tego paska
-- tutaj wykonujemy to, co trzeba. Czyli spawn apteczki
alife():create("medkit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) 
--=============================================--własny kod pisać tylko powyżej tego paska
if curr_ammo_yes== 0 then
start_timer()
end
end

3. Timer (timer potrzebny po to, aby przywrócić funkcję gun() do stanu roboczego, kiedy w magazynku skończyły się naboje. Działa tylko przez sekundę, tak więc tego czasu wystarczy na przeładowanie. (jeśli zmiennej old_wpn_id przypiszemy 0 zanim uzupełnimy amunicję, to zamiast jednej apteczki - otrzymamy wiele)

  function action_timer()
      old_wpn_id = 0
   end

   function start_timer()
      local iTimer = time_global() + 1000

      local function check_timer()
         return time_global() > iTimer
      end

      level.add_call(check_timer, action_timer)
   end

4. Funkcja preload() - rozwiązuje problem, który pojawiał się w przypadku samowolnego rozładowania broni w ekwipunku - funkcja gun() przestawała działać.

function preload()
local wpn = db.actor:active_item()
if wpn and wpn:section() == "wpn_lr300" then
local curr_ammo_preload = wpn:get_ammo_in_magazine()
    if curr_ammo_preload == 0 then
    check_ammo = false
    old_wpn_id = 0
    end
end
end

 

 

bind_stalker.script:

Spoiler

Szukamy funkcji:

function actor_binder:update(delta)

I na samym końcu, przed ostatnim END wstawiamy:

function actor_binder:update(delta)
***
wasza_nazwa.gun()
wasza_nazwa.preload()
end

 

 

 

ŹRÓDŁO:

https://ap-pro.ru/forums/topic/3051-shocskriptovyy-modul-otslezhivaniya-vystrela-iz-oruzhiya/

Link to comment
Share on other sites

  • Guest changed the title to Skryptowy moduł śledzenia strzału z broni

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.