Forum Stalker.pl • Zobacz temat - [LUA] ammo

[LUA] ammo

Regulamin forum
Dział "Tworzenie Modyfikacji" służy do zadawania pytań odnośnie tworzenia modyfikacji, edytowania plików gry, oraz pisania tzw. tutoriali, czyli poradników odnośnie modyfikowania gry.
Nie zadajemy tutaj pytań odnośnie modyfikacji gotowych (nie dyskutujemy o nich!), prócz prób ich połączenia etc.


Przy cytowaniu plików *.LTX stosować tag [SYNTAX="ini"], przy cytowaniu plików *.script [SYNTAX="lua"] a przy cytowaniu plików *.xml - [SYNTAX="xml"].

[LUA] ammo

Postprzez Plaargath w 02 Mar 2015, 18:20

Witojcie!
Czy jest jakiś sposób, żeby policzyć ze skryptu, ile pestek jest w danej broni? (Po to, żeby się dało te pestki w tej samej ilości potem zespawnować.)
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 25 Paź 2023, 21:53
Kozaki: 234

Reklamy Google

Re: [LUA] ammo

Postprzez Cromm Cruac w 02 Mar 2015, 21:42

Da radę używając packet_utils (od @barina i @bardaka z poprawkami @smoqa)

-Odczytujesz pakiet broni w slocie
-Tworzysz na podstawie niego nowy pakiet z nowym typem amunicji
-Zapisujesz nowy pakiet w obiekcie
Image

"Twoja opowieść mnie znudziła albowiem nie była o mnie" - Król Julian

Za ten post Cromm Cruac otrzymał następujące punkty reputacji:
Positive Plaargath.
Awatar użytkownika
Cromm Cruac
Modder

Posty: 2542
Dołączenie: 22 Sty 2010, 19:01
Ostatnio był: 01 Cze 2024, 23:08
Miejscowość: Londyn / Bielsko-Biała
Kozaki: 1077

Re: [LUA] ammo

Postprzez Plaargath w 04 Mar 2015, 04:36

Przyznam, że miesza się we mnie zachwyt z poczuciem grozy, jak przeglądam to cudo. Numinosum, kurna.
Jako że niezbyt szybko idzie mi odczytanie tego narzecza z pełnym zrozumieniem (synapsy mi się już hajcują) pozwolę sobie zapytać Cię jeszcze tak:
czy to tutaj mam szukać "gotowca" pod taką sekwencję czynności:
- odczytać ammo (typ i ilość) z broni obecnej w invie (nie w slocie),
- wypierdasić broń na tri bukwy,
- zrespić ammo do inva.
:?:
Jeśli tak, to jakoś się przez to w końcu przegryzę, tylko nie potrafię sam ocenić czy rzeczywiście tutaj inwestować czas.
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 25 Paź 2023, 21:53
Kozaki: 234

Re: [LUA] ammo

Postprzez tt44 w 04 Mar 2015, 11:32

W skrypcie od cromma masz klasę cse_alife_item_weapon_properties i w niej zmienną ammo_current, czyli tą którą potrzebujesz.
Musisz zrobić tak:
Kod: [ Pobierz ] [ Ukryj ]
local data = packet_utils21.get_object_data(obj) -- jako obj broń której ilość ammo chcesz odczytać
local ammo_type = data.ammo_type
local ammo_current = data.ammo_current
se_respawn.create_ammo(ammo_type, db.actor:position(), db.actor:m_level_vertex_id(), db.actor:m_game_vertex_id(), db.actor:id(), ammo_current)
 

Za ten post tt44 otrzymał następujące punkty reputacji:
Positive Plaargath.
tt44
Stalker

Posty: 88
Dołączenie: 12 Lut 2013, 19:02
Ostatnio był: 24 Cze 2017, 19:07
Kozaki: 60

Re: [LUA] ammo

Postprzez Cromm Cruac w 04 Mar 2015, 12:50

Dodam tylko, że packet_utils to potężne narzędzie, które pozwala na bieżąco manipulować właściwościami niemal każdego obiektu w grze, od przedmiotów przez a-life po particle.
Image

"Twoja opowieść mnie znudziła albowiem nie była o mnie" - Król Julian
Awatar użytkownika
Cromm Cruac
Modder

Posty: 2542
Dołączenie: 22 Sty 2010, 19:01
Ostatnio był: 01 Cze 2024, 23:08
Miejscowość: Londyn / Bielsko-Biała
Kozaki: 1077

Re: [LUA] ammo

Postprzez Plaargath w 04 Mar 2015, 14:51

Właśnie potęga tego narzędzia wywołała we mnie zachwyt (i sprawiła, że okrutnie się dziś nie wysapłem).
Kłopot mam, Panowie, z samym wrzuceniem obiektu.
Mój obiekt to giwera wybierana z listy z kliku w custom UI.
Skrypt widzi ją tak:
Kod: [ Pobierz ] [ Ukryj ]
-- to są wyrywki skryptu tego UI
index = self.list_box_parts:GetSelectedIndex()
item = self.list_box_parts:GetItemByIndex(index)
local se_parts = item and item.item_id and alife():object(item.item_id)
 

Do tej pory robiłem to:
Kod: [ Pobierz ] [ Ukryj ]
alife():release(se_parts,true)
 

i gitara. A teraz chcę jeszcze przed tym releasem ammo zachować, no i jak robię tak:
Kod: [ Pobierz ] [ Ukryj ]
local data = packet_utils21.get_object_data(se_parts)
 

to CTD, że "attempt to index local 'data' (a nil value)", czyli coś tego se_parts nie chce widzieć. Głupieję przy tym. (Zresztą zawsze głupieję jak chodzi o pinpoint obiektu przez jego id, jakoś nie mogę tego do głowy skutecznie wtłuc)
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 25 Paź 2023, 21:53
Kozaki: 234

Re: [LUA] ammo

Postprzez Cromm Cruac w 04 Mar 2015, 15:12

Nie jestem pewien ale chyba ta linia zwraca nazwę przedmiotu albo jakieś item_id. Dla release'u to bez znaczenia chyba ale packet_utils musi mieć id. Też mi się to zawsze miesza.

EDIT:
Kod: [ Pobierz ] [ Ukryj ]
local se_parts = item and alife():object(item:id())
local data = packet_utils21.get_object_data(se_parts.id)
 
Image

"Twoja opowieść mnie znudziła albowiem nie była o mnie" - Król Julian
Awatar użytkownika
Cromm Cruac
Modder

Posty: 2542
Dołączenie: 22 Sty 2010, 19:01
Ostatnio był: 01 Cze 2024, 23:08
Miejscowość: Londyn / Bielsko-Biała
Kozaki: 1077

Re: [LUA] ammo

Postprzez Plaargath w 04 Mar 2015, 16:10

Przy takim wpisie jest CTD: "attempt to call method '?' (a nil value) (dotyczy pierwszej z podanych przez Ciebie dwóch linijek). Dafak?

ED: BTW z tego samego powodu nie potrafie dodac odczytu condition'a, obiektu nie widzi.
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 25 Paź 2023, 21:53
Kozaki: 234

Re: [LUA] ammo

Postprzez tt44 w 05 Mar 2015, 21:18

Plaargath, a nie wystarzy, po prostu:
Kod: [ Pobierz ] [ Ukryj ]
local data = packet_utils21.get_object_data(alife():object(item:id()))
 

?
tt44
Stalker

Posty: 88
Dołączenie: 12 Lut 2013, 19:02
Ostatnio był: 24 Cze 2017, 19:07
Kozaki: 60

Re: [LUA] ammo

Postprzez Plaargath w 05 Mar 2015, 23:04

No ja, teoretycznie by wystarczyło.
W praktyce to samo: "attempt to call method '?' (a nil value)"
Jak próbuję tak:
Kod: [ Pobierz ] [ Ukryj ]
local unld = level.object_by_id(item.item_id)
local data = packet_utils21.get_object_data(unld)
 

to też "attempt to call method '?' (a nil value)".
Nic z tego nie kumam.
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 25 Paź 2023, 21:53
Kozaki: 234

Re: [LUA] ammo

Postprzez Cromm Cruac w 05 Mar 2015, 23:41

To jest to samo co z tym zjadaniem puszek. Te itemy nie są najwyraźniej pełnymi obiektami a-life klasy game_object. Owszem mają item_id, ale nie da się na nich wywołać funkcji :id()
item_id i id() to nie to samo.
Image

"Twoja opowieść mnie znudziła albowiem nie była o mnie" - Król Julian
Awatar użytkownika
Cromm Cruac
Modder

Posty: 2542
Dołączenie: 22 Sty 2010, 19:01
Ostatnio był: 01 Cze 2024, 23:08
Miejscowość: Londyn / Bielsko-Biała
Kozaki: 1077

Re: [LUA] ammo

Postprzez tt44 w 05 Mar 2015, 23:46

Moim zdaniem coś jest spieprzone na tym etapie:
Kod: [ Pobierz ] [ Ukryj ]
index = self.list_box_parts:GetSelectedIndex()
item = self.list_box_parts:GetItemByIndex(index)
 

Wiele razy korzystałem z packet_utils i zawsze wystarczał zapis, taki jak podawałem.
Nie wiem jak definiuje obiekt funkcja GetItemByIndex, bo nigdy jej nie używałem.

EDIT: Skoro id() nie działa to może tak:
Kod: [ Pobierz ] [ Ukryj ]
local obj = alife():object(item.id)
local data = packet_utils21.get_object_data(obj.id)
 
tt44
Stalker

Posty: 88
Dołączenie: 12 Lut 2013, 19:02
Ostatnio był: 24 Cze 2017, 19:07
Kozaki: 60

Następna

Powróć do Zew Prypeci

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 4 gości