Siema. Jako że jest ulewa u mnie to muszę się uspokoić i dać poradnik kolejny… tym razem tworzymy slota.
Korzystałem z poradnika Kondra48 z amk-team za co jestem mu wdzięczny
Przypominam o uprzednim przeczytaniu poradnika dotyczącego kompilacji patcha 1.0007 na którym będziemy pracować.
UIInventoryWnd.cpp.
Na wstępie musimy znaleźć plik o nazwie UIInventoryWnd.cpp. Ścieżka do niego: X:\trunk\xray\xr_3da\xrGame\ui
Otwórzmy go zatem Notepadem++.
Naszym zadaniem jest znaleźć owy fragment kodu:
m\_pUISlotQuickAccessList\_3 = xr\_new\<CUIDragDropListEx\>(); AttachChild(m\_pUISlotQuickAccessList\_3); m\_pUISlotQuickAccessList\_3-\>SetAutoDelete(true); xml\_init.InitDragDropListEx (uiXml, "dragdrop\_slot\_quick\_access\_3", 0, m\_pUISlotQuickAccessList\_3); BindDragDropListEnents (m\_pUISlotQuickAccessList\_3);
Jeśli już go znaleźliśmy to pod nim umieszczamy część kodową naszego nowego slotu.
m\_pUIDetAdvList = xr\_new\<CUIDragDropListEx\>(); AttachChild(m\_pUIDetAdvList); m\_pUIDetAdvList-\>SetAutoDelete(true); xml\_init.InitDragDropListEx (uiXml, "dragdrop\_slot\_det\_adv", 0, m\_pUIDetAdvList); BindDragDropListEnents (m\_pUIDetAdvList);
I znowu musimy użyć funkcji szukania w notepadzie. Tym razem chodzi o to:
m\_slots\_array[SLOT\_QUICK\_ACCESS\_3] = m\_pUISlotQuickAccessList\_3;
I pod nim umieszczamy taki krótki kodzik:
m\_slots\_array[DET\_ADV\_SLOT] = m\_pUIDetAdvList;
I zapisujemy nasz plik.
UIInventoryWnd.h:
Część kolejna, musimy otworzyć owy pliczek i znaleźć znowu jakiś kod…
CUIDragDropListEx\* m\_pUISlotQuickAccessList\_3;
Pod nim dodajemy naszą formułkę:
CUIDragDropListEx\* m\_pUIDetAdvList;
Zapisujemy plik i przechodzimy do następnego, tym razem będzie to…
UIInventoryWnd2.cpp:
Tutaj tak samo musimy szukać kodów (niestety :))
Musimy znaleźć to:
\_itm = m\_pInv-\>m\_slots[SLOT\_QUICK\_ACCESS\_3].m\_pIItem; if(\_itm) { CUICellItem\* itm = create\_cell\_item(\_itm); m\_pUISlotQuickAccessList\_3-\>SetItem (itm); }
I pod nim to dodać:
\_itm = m\_pInv-\>m\_slots[DET\_ADV\_SLOT].m\_pIItem; if(\_itm) { CUICellItem\* itm = create\_cell\_item(\_itm); m\_pUIDetAdvList-\>SetItem (itm); }
Potem kolejne poszukiwania…
m\_pUISlotQuickAccessList\_3-\>ClearAll (true);
I pod tym dodajemy:
m\_pUIDetAdvList-\>ClearAll (true);
Zapisujemy plik i przechodzimy do części kolejnej, najgorsze już za nami
UIInventoryWnd3.cpp:
Krótkie zadanie bo tutaj ogranicza się do dodania kodu w jednym miejscu.
Mianowicie pod tym:
case INVENTORY\_TO\_SLOT15\_ACTION: CurrentIItem()-\>SetSlot(SLOT\_QUICK\_ACCESS\_3); break;
Dodamy to:
case INVENTORY\_TO\_SLOT16\_ACTION: CurrentIItem()-\>SetSlot(DET\_ADV\_SLOT); break;
Zapisujemy i przechodzimy dalej.
inventory_space.h:
Szukamy teraz zdefiniowanego szybkiego slotu nr.3:
#define SLOT\_QUICK\_ACCESS\_3 15
Poniżej zdefiniujemy nasz slot:
#define DET\_ADV\_SLOT 16
Trochę niżej mamy takie cuś:
#define SLOTS\_TOTAL 16
Zamiast szesnastki dajemy 17, bo doszedł nam nowy slot.
Zapisujemy plik. Teraz będzie ostatnia część.
UIMessages.h:
Tutaj sprawa prosta jak drut.
Dopisujemy tylko nasz kodzik pod:
INVENTORY\_TO\_SLOT15\_ACTION,
A to nasz kodzik:
INVENTORY\_TO\_SLOT16\_ACTION,
Zapisujemy i tym kończymy naszą pracę z silnikiem stalkera.
Kompilujemy teraz xrGame.dll tak jak w poprzednim poradniku. Jeśli wszystko poprawnie się skompilowało można strzelić browara.
UI, czyli dodajemy nasz slot do gry.
Rzecz prosta jak 2+2, choć niektórzy tego działania nie umieją to żaden problem.
W plikach UI tj. inventory_new.xml i inventory_new_16.xml
Dodajemy nasz slot:
\<dragdrop\_slot\_det\_adv x="581" y="673" width="100" height="50" cell\_width = "48" cell\_height="50" rows\_num="1" cols\_num="2" custom\_placement="0" show\_grid = "0"/\>
Zapisujemy plik i otwieramy system.ltx.
Mamy nasze sloty
slot\_persistent\_1 = false ;noże slot\_persistent\_2 = false ;pistolety slot\_persistent\_3 = false ;automaty slot\_persistent\_4 = true ;granaty ...
Ta sekcja kończy się z numerem 16 (slot_persistent)…
Zatem pod 16tką dodajemy nasz slot:
slot\_persistent\_17 = false ;detektor nasz
Testujemy czy wszystko działa i się radujemy