Skocz do zawartości

Skryptowy moduł śledzenia strzału z broni


Gość Diegtiariow

Rekomendowane odpowiedzi

Gość 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/

Odnośnik do komentarza
Udostępnij na innych stronach

  • Gość zmienił(a) tytuł na Skryptowy moduł śledzenia strzału z broni

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z tej strony, zgadzasz się na nasze Warunki użytkowania.