Ultima modifica:
in quanto non capisco il motivo ma questa comunity è mezza morta e la maggior parte delle persone ormai naviga su siti stranieri e condivide le cose con loro invece che qua (è una critica costruttiva) condivido con voi una guida pubblicata altrove ma non su inforge ricostruita a modo in quanto anche su quel sito era davvero frammentata.
ora vedremo come implementare i 4 inventari funzionanti tramite source:
ATTENZIONE Le tabulazioni sottostanti sono da fare tutte, quindi non usate il copia-incolla.
per prima cosa andiamo nella nosta folder /common e apriamo lenght.h e cerchiamo:
sostituiamo con:
Salviamo, apriamo char_item.cpp in /game/src e cerchiamo la funzione:
ATTENZIONE le seguenti 2 funzioni sono richiamate 2 volte quindi ricordatevi di sostituirle entrambe.
sostituiamo con:
cerchiamo:
sostituiamo con:
per chi potesse avere problemi per gli ultimi 3 slot del belt system consiglio anche questa modifica
cerchiamo:
e modifichiamo in:
Salviamo e sempre nella stessa cartella cerchiamo exchange.cpp cerchiamo la funzione:
la sostituiamo con la seguente funzione:
subito sotto cerchiamo questa funzione:
e sostituiamo tutto con la seguente:
OCCHIO alle tabulazioni. ultima cosa, cerchiamo:
e sostituiamo tutta la funzione con:
MI RACCOMANDO ALLE TABULAZIONI. ora la parte source server è completa passiamo al launcher:
Dirigiamoci in /Userinterface, apriamo GameType.h e cerchiamo la seguente funzione:
modifichiamola in:
compiliamo pure il nostro launcher e passiamo al lato client.
dirigiamoci nella nostra locale nel percorso /ui e apriamo inventorywindow.py e cerchiamo:
sostituiamolo con:
ora dirigiamoci in root, apriamo uiinventory.py e cerchiamo:
subito sotto aggiungete:
adesso cerchiamo la funzione:
e sostituiamo il tutto con:
adesso cerchiamo:
e sostituiamo (occhio alle tabulazioni):
adesso rechiamoci in uiscript modifichiamo in beltinentorywindow.py:
in:
adesso torniamo nella locale e apriamo locale_interface.txt e cerchiamo:
e aggiungiamo subito sotto:
per ultima cosa vi posto la mia inventorywindow.py da cui prendere spunto:
bene ora abbiamo finito e implementato corettamente i 4 inventari senza alcun bug.
spero sia stato di vostro gradimento in quanto io personalmente ho trovato un'pò di difficoltà la prima volta che ho implementato il tutto, spero di aver riunito tutto il più possibile e senza errori, se ci sono problmi, critiche o suggerimenti sono tutti ben accetti.
ora vedremo come implementare i 4 inventari funzionanti tramite source:
ATTENZIONE Le tabulazioni sottostanti sono da fare tutte, quindi non usate il copia-incolla.
per prima cosa andiamo nella nosta folder /common e apriamo lenght.h e cerchiamo:
PHP:
INVENTORY_MAX_NUM = 90,
PHP:
INVENTORY_MAX_NUM = 180,
ATTENZIONE le seguenti 2 funzioni sono richiamate 2 volte quindi ricordatevi di sostituirle entrambe.
PHP:
BYTE bPage = bCell / (INVENTORY_MAX_NUM / 2);
PHP:
BYTE bPage = bCell / (INVENTORY_MAX_NUM / 4);
PHP:
if (p / (INVENTORY_MAX_NUM / 2) != bPage)
PHP:
if (p / (INVENTORY_MAX_NUM / 4) != bPage)
cerchiamo:
PHP:
BYTE bCell = Cell.cell;
PHP:
WORD bCell = Cell.cell;
PHP:
static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 2); // inven page 1
PHP:
static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 4); // inven page 1
static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 4); // inven page 2
static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / 4); // inven page 3
static CGrid s_grid4(5, INVENTORY_MAX_NUM/5 / 4); // inven page 4
s_grid1.Clear();
s_grid2.Clear();
s_grid3.Clear();
s_grid4.Clear();
PHP:
for (i = 0; i < INVENTORY_MAX_NUM / 4; ++i)
PHP:
for (i = 0; i < INVENTORY_MAX_NUM / 4; ++i)
{
if (!(item = victim->GetInventoryItem(i)))
continue;
s_grid1.Put(i, 1, item->GetSize());
}
for (i = INVENTORY_MAX_NUM / 4; i < (INVENTORY_MAX_NUM / 4) * 2; ++i)
{
if (!(item = victim->GetInventoryItem(i)))
continue;
s_grid2.Put(i - INVENTORY_MAX_NUM / 4, 1, item->GetSize());
}
for (i = (INVENTORY_MAX_NUM / 4) * 2; i < (INVENTORY_MAX_NUM / 4) * 3; ++i)
{
if (!(item = victim->GetInventoryItem(i)))
continue;
s_grid3.Put(i - (INVENTORY_MAX_NUM / 4) * 2, 1, item->GetSize());
}
for (i = (INVENTORY_MAX_NUM / 4) * 3; i < (INVENTORY_MAX_NUM / 4) * 4; ++i)
{
if (!(item = victim->GetInventoryItem(i)))
continue;
s_grid4.Put(i -(INVENTORY_MAX_NUM / 4) * 3, 1, item->GetSize());
}
PHP:
int iPos = s_grid1.FindBlank(1, item->GetSize());
PHP:
int iPos = s_grid1.FindBlank(1, item->GetSize());
if (iPos >= 0)
{
s_grid1.Put(iPos, 1, item->GetSize());
}
else
{
iPos = s_grid2.FindBlank(1, item->GetSize());
if (iPos >= 0)
{
s_grid2.Put(iPos, 1, item->GetSize());
}
else
{
iPos = s_grid3.FindBlank(1, item->GetSize());
if (iPos >= 0)
{
s_grid3.Put(iPos, 1, item->GetSize());
}
else
{
iPos = s_grid4.FindBlank(1, item->GetSize());
if (iPos >= 0)
{
s_grid4.Put(iPos, 1, item->GetSize());
}
else
{
return false;
}
}
}
}
}
}
return true;
}
Dirigiamoci in /Userinterface, apriamo GameType.h e cerchiamo la seguente funzione:
PHP:
const DWORD c_Inventory_Page_Count = 2;
PHP:
const DWORD c_Inventory_Page_Count = 4;
dirigiamoci nella nostra locale nel percorso /ui e apriamo inventorywindow.py e cerchiamo:
PHP:
EQUIPMENT_START_INDEX = 90
PHP:
EQUIPMENT_START_INDEX = 180
PHP:
self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
PHP:
self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))
self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))
PHP:
self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
PHP:
self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))
self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))
self.inventoryTab[0].Down()
PHP:
def SetInventoryPage(self, page):
PHP:
def SetInventoryPage(self, page):
self.inventoryPageIndex = page
for i in xrange(4):
if i != self.inventoryPageIndex:
self.inventoryTab[i].SetUp()
self.inventoryTab[self.inventoryPageIndex].Down()
self.RefreshBagSlotWindow()
PHP:
EQUIPMENT_START_INDEX = 90
PHP:
EQUIPMENT_START_INDEX = 180
PHP:
INVENTORY_PAGE_BUTTON_TOOLTIP_2 2° Inventario
PHP:
INVENTORY_PAGE_BUTTON_TOOLTIP_3 3° Inventario
INVENTORY_PAGE_BUTTON_TOOLTIP_4 4° Inventario
PHP:
import uiScriptLocale
import item
EQUIPMENT_START_INDEX = 180
window = {
"name" : "InventoryWindow",
## 600 - (width + ¿À¸¥ÂÊÀ¸·Î ºÎÅÍ ¶ç¿ì±â 24 px)
"x" : SCREEN_WIDTH - 176,
"y" : SCREEN_HEIGHT - 42 - 570,
"style" : ("movable", "float",),
"width" : 176,
"height" : 585,
"children" :
(
## Inventory, Equipment Slots
{
"name" : "board",
"type" : "board",
"style" : ("attach",),
"x" : 0,
"y" : 0,
"width" : 176,
"height" : 585,
"children" :
(
## Title
{
"name" : "TitleBar",
"type" : "titlebar",
"style" : ("attach",),
"x" : 8,
"y" : 7,
"width" : 161,
"color" : "yellow",
"children" :
(
{ "name":"TitleName", "type":"text", "x":77, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" },
),
},
## Equipment Slot
{
"name" : "Equipment_Base",
"type" : "image",
"x" : 10,
"y" : 33,
"image" : "d:/ymir work/ui/equipment_bg_without_ring.tga",
"children" :
(
{
"name" : "EquipmentSlot",
"type" : "slot",
"x" : 3,
"y" : 3,
"width" : 150,
"height" : 182,
"slot" : (
{"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64},
{"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96},
{"index":EQUIPMENT_START_INDEX+5, "x":114, "y":67, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+6, "x":114, "y":35, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+7, "x":2, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+8, "x":75, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+9, "x":114, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
## »õ ¹ÝÁö1
##{"index":item.EQUIPMENT_RING1, "x":2, "y":106, "width":32, "height":32},
## »õ ¹ÝÁö2
##{"index":item.EQUIPMENT_RING2, "x":75, "y":106, "width":32, "height":32},
## »õ º§Æ®
{"index":item.EQUIPMENT_BELT, "x":39, "y":106, "width":32, "height":32},
),
},
## Dragon Soul Button
{
"name" : "DSSButton",
"type" : "button",
"x" : 114,
"y" : 107,
"tooltip_text" : uiScriptLocale.TASKBAR_DRAGON_SOUL,
"default_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_01.tga",
"over_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_02.tga",
"down_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_03.tga",
},
## MallButton
{
"name" : "MallButton",
"type" : "button",
"x" : 118,
"y" : 148,
"tooltip_text" : uiScriptLocale.MALL_TITLE,
"default_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_01.tga",
"over_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_02.tga",
"down_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_03.tga",
},
## CostumeButton
{
"name" : "CostumeButton",
"type" : "button",
"x" : 78,
"y" : 5,
"tooltip_text" : uiScriptLocale.COSTUME_TITLE,
"default_image" : "d:/ymir work/ui/game/taskbar/costume_Button_01.tga",
"over_image" : "d:/ymir work/ui/game/taskbar/costume_Button_02.tga",
"down_image" : "d:/ymir work/ui/game/taskbar/costume_Button_03.tga",
},
{
"name" : "Equipment_Tab_01",
"type" : "radio_button",
"x" : 86,
"y" : 161,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
"children" :
(
{
"name" : "Equipment_Tab_01_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "I",
},
),
},
{
"name" : "Equipment_Tab_02",
"type" : "radio_button",
"x" : 86 + 32,
"y" : 161,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
"children" :
(
{
"name" : "Equipment_Tab_02_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "II",
},
),
},
),
},
{
"name" : "Inventory_Tab_01",
"type" : "radio_button",
"x" : 10,
"y" : 33 + 189,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,
"children" :
(
{
"name" : "Inventory_Tab_01_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "I",
},
),
},
{
"name" : "Inventory_Tab_02",
"type" : "radio_button",
"x" : 10 + 78,
"y" : 33 + 189,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,
"children" :
(
{
"name" : "Inventory_Tab_02_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "II",
},
),
},
{
"name" : "Inventory_Tab_03",
"type" : "radio_button",
"x" : 10,
"y" : 33 + 210,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_3,
"children" :
(
{
"name" : "Inventory_Tab_03_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "III",
},
),
},
{
"name" : "Inventory_Tab_04",
"type" : "radio_button",
"x" : 10 + 78,
"y" : 33 + 210,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_4,
"children" :
(
{
"name" : "Inventory_Tab_04_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "IV",
},
),
},
## Item Slot
{
"name" : "ItemSlot",
"type" : "grid_table",
"x" : 8,
"y" : 264,
"start_index" : 0,
"x_count" : 5,
"y_count" : 9,
"x_step" : 32,
"y_step" : 32,
"image" : "d:/ymir work/ui/public/Slot_Base.sub"
},
## Print
{
"name":"Money_Slot",
"type":"button",
"x":8,
"y":28,
"horizontal_align":"center",
"vertical_align":"bottom",
"default_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"over_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"down_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"children" :
(
{
"name":"Money_Icon",
"type":"image",
"x":-18,
"y":2,
"image":"d:/ymir work/ui/game/windows/money_icon.sub",
},
{
"name" : "Money",
"type" : "text",
"x" : 3,
"y" : 3,
"horizontal_align" : "right",
"text_horizontal_align" : "right",
"text" : "123456789",
},
),
},
),
},
),
}
bene ora abbiamo finito e implementato corettamente i 4 inventari senza alcun bug.
spero sia stato di vostro gradimento in quanto io personalmente ho trovato un'pò di difficoltà la prima volta che ho implementato il tutto, spero di aver riunito tutto il più possibile e senza errori, se ci sono problmi, critiche o suggerimenti sono tutti ben accetti.