Dodawanie nowego slotu (1.0007rc1)

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

Czy taka sama zasada działania jest w ZP albo w ZCz?

 może pamiętasz jak wysłałem Ci archiwum na nowe sloty w CS? 
X-Rays of Hope to nazwa była.

W Zewie Prypeci nie wiem jak to jest obecnie, nie bawiłem się kodem zatem mało pomogę. Jeśli 

się dowiem czegoś od bardziej doświadczonej osoby to zrobię nowy temat. 
Póki co spójrz jak to jest zrobione w X-Rays of Hope. W archiwum miałeś nawet dwa pliczki odpowiadające
za sloty, prosto z kodu Czystego Nieba.

 Pamiętam, jeśli mam gdzieś tą wiadomość to sprawdzę.