Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Nowe sloty na smocze kamienie


Rekomendowane odpowiedzi

Opublikowano
Cześć, mam problem z runami.
Jedna runa nie pokazuje się na slocie, reszta działa normalnie, nie widać tylko tej z type ITEM_NEW_SLOT_1.
Zakłada się na slot na pewno, bo po naciśnięciu wyskakuje, że nie mogę nosić dwóch takich samych przedmiotów.
 

5MxrVtL.jpg

Wpis z item_proto runy, która się nie zakłada:

110400 "110400" "ITEM_NEW_SLOT_1" 0 1 "NONE" "NONE" "NONE" "NONE" 0 0 0 0 0 "LIMIT_NONE" 0 "LIMIT_NONE" 0 "APPLY_RESIST_SWORD" 1 "APPLY_RESIST_TWOHAND" 1 "APPLY_NONE" 0 0 0 0 0 0 0 0 0 0
111400 "111400" "ITEM_NEW_SLOT_1" 0 1 "NONE" "NONE" "NONE" "NONE" 0 0 0 0 0 "LIMIT_NONE" 0 "LIMIT_NONE" 0 "APPLY_RESIST_SWORD" 2 "APPLY_RESIST_TWOHAND" 2 "APPLY_NONE" 0 0 0 0 0 0 0 0 0 0
112400 "112400" "ITEM_NEW_SLOT_1" 0 1 "NONE" "NONE" "NONE" "NONE" 0 0 0 0 0 "LIMIT_NONE" 0 "LIMIT_NONE" 0 "APPLY_RESIST_SWORD" 3 "APPLY_RESIST_TWOHAND" 3 "APPLY_NONE" 0 0 0 0 0 0 0 0 0 0
113400 "113400" "ITEM_NEW_SLOT_1" 0 1 "NONE" "NONE" "NONE" "NONE" 0 0 0 0 0 "LIMIT_NONE" 0 "LIMIT_NONE" 0 "APPLY_RESIST_SWORD" 4 "APPLY_RESIST_TWOHAND" 4 "APPLY_NONE" 0 0 0 0 0 0 0 0 0 0
114400 "114400" "ITEM_NEW_SLOT_1" 0 1 "NONE" "NONE" "NONE" "NONE" 0 0 0 0 0 "LIMIT_NONE" 0 "LIMIT_NONE" 0 "APPLY_RESIST_SWORD" 5 "APPLY_RESIST_TWOHAND" 5 "APPLY_NONE" 0 0 0 0 0 0 0 0 0 0

 Jak dodałem:


W bince:
 
GameType.h
Po const DWORD c_Equipment_Belt = c_New_Equipment_Start + 0;

const DWORD c_Equipment_New_Slot_1 = c_New_Equipment_Start + 4;
const DWORD c_Equipment_New_Slot_2 = c_New_Equipment_Start + 5;
const DWORD c_Equipment_New_Slot_3 = c_New_Equipment_Start + 6;
const DWORD c_Equipment_New_Slot_4 = c_New_Equipment_Start + 7;
const DWORD c_Equipment_New_Slot_5 = c_New_Equipment_Start + 8;
const DWORD c_Equipment_New_Slot_6 = c_New_Equipment_Start + 9;

 
PythonItemModule.cpp

Po PyModule_AddIntConstant(poModule, "EQUIPMENT_BELT", c_Equipment_Belt);

PyModule_AddIntConstant(poModule, "EQUIPMENT_ITEM_NEW_SLOT_1", c_Equipment_New_Slot_1);
PyModule_AddIntConstant(poModule, "EQUIPMENT_ITEM_NEW_SLOT_2", c_Equipment_New_Slot_2);
PyModule_AddIntConstant(poModule, "EQUIPMENT_ITEM_NEW_SLOT_3", c_Equipment_New_Slot_3);
PyModule_AddIntConstant(poModule, "EQUIPMENT_ITEM_NEW_SLOT_4", c_Equipment_New_Slot_4);
PyModule_AddIntConstant(poModule, "EQUIPMENT_ITEM_NEW_SLOT_5", c_Equipment_New_Slot_5);
PyModule_AddIntConstant(poModule, "EQUIPMENT_ITEM_NEW_SLOT_6", c_Equipment_New_Slot_6);

 
 
 

W db:
 
ProtoReader.cpp

Po "ITEM_BELT",

"ITEM_NEW_SLOT_1",
"ITEM_NEW_SLOT_2",
"ITEM_NEW_SLOT_3",
"ITEM_NEW_SLOT_4",
"ITEM_NEW_SLOT_5",
"ITEM_NEW_SLOT_6",

 
 
 
W game:
 
item.cpp

int CItem::FindEquipCell(LPCHARACTER ch, int iCandidateCell
po ITEM_BELT != GetType() && 

ITEM_NEW_SLOT_1 != GetType() && 
ITEM_NEW_SLOT_2 != GetType() &&
ITEM_NEW_SLOT_3 != GetType() && 
ITEM_NEW_SLOT_4 != GetType() && 
ITEM_NEW_SLOT_5 != GetType() && 
ITEM_NEW_SLOT_6 != GetType())

 
Po else if (GetType() == ITEM_RING)


else if (GetType() == ITEM_NEW_SLOT_1)
{
if (!ch->GetWear(WEAR_NEW_SLOT_1))
return WEAR_NEW_SLOT_1;
}
else if (GetType() == ITEM_NEW_SLOT_2)
{
if (!ch->GetWear(WEAR_NEW_SLOT_2))
return WEAR_NEW_SLOT_2;
}
else if (GetType() == ITEM_NEW_SLOT_3)
{
if (!ch->GetWear(WEAR_NEW_SLOT_3))
return WEAR_NEW_SLOT_3;
}
else if (GetType() == ITEM_NEW_SLOT_4)
{
if (!ch->GetWear(WEAR_NEW_SLOT_4))
return WEAR_NEW_SLOT_4;
}
else if (GetType() == ITEM_NEW_SLOT_5)
{
if (!ch->GetWear(WEAR_NEW_SLOT_5))
return WEAR_NEW_SLOT_5;
}
else if (GetType() == ITEM_NEW_SLOT_6)
{
if (!ch->GetWear(WEAR_NEW_SLOT_6))
return WEAR_NEW_SLOT_6;
}

 
 

bool CItem::IsEquipable() const
Po case ITEM_BELT:

case ITEM_NEW_SLOT_1:
case ITEM_NEW_SLOT_2:
case ITEM_NEW_SLOT_3:
case ITEM_NEW_SLOT_4:
case ITEM_NEW_SLOT_5:
case ITEM_NEW_SLOT_6:

 
 
 

char_item.cpp
po case ITEM_BELT:

case ITEM_NEW_SLOT_1:
case ITEM_NEW_SLOT_2:
case ITEM_NEW_SLOT_3:
case ITEM_NEW_SLOT_4:
case ITEM_NEW_SLOT_5:
case ITEM_NEW_SLOT_6:

 
 

po if (item->GetWearFlag() & WEARABLE_UNIQUE)



if (item->GetType() & ITEM_NEW_SLOT_1)
{
if ((GetWear(WEAR_NEW_SLOT_1) && GetWear(WEAR_NEW_SLOT_1)->IsSameSpecialGroup(item)))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));
return false;
}
}
 
if (item->GetType() & ITEM_NEW_SLOT_2)
{
if ((GetWear(WEAR_NEW_SLOT_2) && GetWear(WEAR_NEW_SLOT_2)->IsSameSpecialGroup(item)))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));
return false;
}
}
 
if (item->GetType() & ITEM_NEW_SLOT_3)
{
if ((GetWear(WEAR_NEW_SLOT_3) && GetWear(WEAR_NEW_SLOT_3)->IsSameSpecialGroup(item)))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));
return false;
}
}
 
if (item->GetType() & ITEM_NEW_SLOT_4)
{
if ((GetWear(WEAR_NEW_SLOT_4) && GetWear(WEAR_NEW_SLOT_4)->IsSameSpecialGroup(item)))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));
return false;
}
}
 
if (item->GetType() & ITEM_NEW_SLOT_5)
{
if ((GetWear(WEAR_NEW_SLOT_5) && GetWear(WEAR_NEW_SLOT_5)->IsSameSpecialGroup(item)))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));
return false;
}
}
 
if (item->GetType() & ITEM_NEW_SLOT_6)
{
if ((GetWear(WEAR_NEW_SLOT_6) && GetWear(WEAR_NEW_SLOT_6)->IsSameSpecialGroup(item)))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));
return false;
}
}

 

 

 

 

 

 

w root funkcja wygląda tak:

 

 


class DragonsSouls(ui.ScriptWindow):
def __init__(self, wndInventory):
import exception
if not wndInventory:
exception.Abort("wndInventory parameter must be set to InventoryWindow")
return
ui.ScriptWindow.__init__(self)
self.isLoaded = 0
self.wndInventory = wndInventory;
self.__LoadWindow()
 
def __del__(self):
ui.ScriptWindow.__del__(self)
 
def Show(self):
self.__LoadWindow()
self.RefreshStonesDSlot()
ui.ScriptWindow.Show(self)
 
def Close(self):
self.Hide()
 
def __LoadWindow(self):
if self.isLoaded == 1:
return
self.isLoaded = 1
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "UIScript/dragon_soul.py")
except:
import exception
exception.Abort("DragonsSouls.LoadWindow.LoadObject")
try:
wndEquip = self.GetChild("DragonsSoulsSlot")
self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
except:
import exception
exception.Abort("DragonsSouls.LoadWindow.BindObject")
 
wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
self.wndEquip = wndEquip
 
def RefreshStonesDSlot(self):
getItemVNum=player.GetItemIndex
for i in xrange(6):
slotNumber = item.EQUIPMENT_ITEM_NEW_SLOT_1 + i
self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)
self.wndEquip.RefreshSlot()

 
uiscript:

import uiScriptLocale
import item
 
ROOT_PATH = "d:/ymir work/ui/public/"
 
window = {
"name" : "DragonsSouls",
"style" : ("movable", "float",),
"x" : SCREEN_WIDTH - 175 - 140 -40 - 287 -10,
"y" : SCREEN_HEIGHT - 37 - 565 -5-5,
"width" : 287-10,
"height" : 281-10,
"children" :
(
{
"name" : "board",
"type" : "board",
"style" : ("movable", "float",),
"x" : 0,
"y" : 0,
"width" : 287,
"height" : 281,   
"children" :
(
{
"name" : "TitleBar",
"type" : "titlebar",
"style" : ("movable", "float",),
"x" : 6,
"y" : 6,
"width" : 277,
"height" : 281,
"color" : "yellow",
"children" :
(
"name":"TitleName",
"type":"text", 
"x":95,
"y":3, 
"text":"Smocza Alchemia", 
},
),
},
{
"name" : "dragon_stones_img",
"type" : "image",
"x" : 5+2,
"y" : 20+6+1,
"image" : "locale/pl/ui/dragon_soul_bg.tga",
"children" :
(            
{
"name" : "DragonsSoulsSlot",
"type" : "slot",
"x" : 1,
"y" : -31,
"width" :273,
"height" :246,
"slot" : 
(
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_1, "x":120, "y":49, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_2, "x":188, "y":91, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_3, "x":188, "y":180, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_4, "x":120, "y":223, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_5, "x":48, "y":180, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_6, "x":48, "y":90, "width":32, "height":32},
 
),
},
),
},
),
},
),
}

Opublikowano

 

 

i tworzy się db.core.

 

No to warto byś jego treść dodał do tematu. :-D 

 

Mam nadzieję, że to prowo.

 

To nie jest prowo, poczytaj na temat debugowania aplikacji.

 

Edit: Te sloty co robiłeś zgodnie z tym poradnikiem w spoilerze to nie jest wszystko,

oraz nie wiem po jaki grzyb robiłeś to:

 

 

if (item->GetType() & ITEM_NEW_SLOT_6)

{

if ((GetWear(WEAR_NEW_SLOT_6) && GetWear(WEAR_NEW_SLOT_6)->IsSameSpecialGroup(item)))

{

ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));

return false;

}

 

 

Opublikowano

 

 

 

i tworzy się db.core.

 

No to warto byś jego treść dodał do tematu. :-D 

 

Mam nadzieję, że to prowo.

 

To nie jest prowo, poczytaj na temat debugowania aplikacji.

 

Edit: Te sloty co robiłeś zgodnie z tym poradnikiem w spoilerze to nie jest wszystko,

oraz nie wiem po jaki grzyb robiłeś to:

 

 

if (item->GetType() & ITEM_NEW_SLOT_6)

{

if ((GetWear(WEAR_NEW_SLOT_6) && GetWear(WEAR_NEW_SLOT_6)->IsSameSpecialGroup(item)))

{

ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));

return false;

}

 

 

 

Gdb działa też w przypadku db.core?

Opublikowano

 

 

 

 

i tworzy się db.core.

 

No to warto byś jego treść dodał do tematu. :-D 

 

Mam nadzieję, że to prowo.

 

To nie jest prowo, poczytaj na temat debugowania aplikacji.

 

Edit: Te sloty co robiłeś zgodnie z tym poradnikiem w spoilerze to nie jest wszystko,

oraz nie wiem po jaki grzyb robiłeś to:

 

 

if (item->GetType() & ITEM_NEW_SLOT_6)

{

if ((GetWear(WEAR_NEW_SLOT_6) && GetWear(WEAR_NEW_SLOT_6)->IsSameSpecialGroup(item)))

{

ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));

return false;

}

 

 

 

Gdb działa też w przypadku db.core?

 

Tak, działa to w tym przypadku.

Opublikowano

 

 

 

 

 

i tworzy się db.core.

 

No to warto byś jego treść dodał do tematu. :-D 

 

Mam nadzieję, że to prowo.

 

To nie jest prowo, poczytaj na temat debugowania aplikacji.

 

Edit: Te sloty co robiłeś zgodnie z tym poradnikiem w spoilerze to nie jest wszystko,

oraz nie wiem po jaki grzyb robiłeś to:

 

 

if (item->GetType() & ITEM_NEW_SLOT_6)

{

if ((GetWear(WEAR_NEW_SLOT_6) && GetWear(WEAR_NEW_SLOT_6)->IsSameSpecialGroup(item)))

{

ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°°Ŕş Áľ·ůŔÇ ŔŻ´ĎĹ© ľĆŔĚĹŰ µÎ °ł¸¦ µż˝Ăżˇ ŔĺÂřÇŇ Ľö ľř˝Ŕ´Ď´Ů."));

return false;

}

 

 

 

Gdb działa też w przypadku db.core?

 

Tak, działa to w tym przypadku.

 

Teraz już działa, został tylko jeden problem.

Jedna runa nie pokazuje się na slocie, reszta działa normalnie a tej z type ITEM_NEW_SLOT_1 coś nie widać.

Zakłada się na slot na pewno, bo po naciśnięciu wyskakuje, że nie mogę nosić dwóch takich samych przedmiotów.

 

5MxrVtL.jpg

 

w root funkcja wygląda tak:

 

 


class DragonsSouls(ui.ScriptWindow):
def __init__(self, wndInventory):
import exception
if not wndInventory:
exception.Abort("wndInventory parameter must be set to InventoryWindow")
return
ui.ScriptWindow.__init__(self)
self.isLoaded = 0
self.wndInventory = wndInventory;
self.__LoadWindow()
 
def __del__(self):
ui.ScriptWindow.__del__(self)
 
def Show(self):
self.__LoadWindow()
self.RefreshStonesDSlot()
ui.ScriptWindow.Show(self)
 
def Close(self):
self.Hide()
 
def __LoadWindow(self):
if self.isLoaded == 1:
return
self.isLoaded = 1
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "UIScript/dragon_soul.py")
except:
import exception
exception.Abort("DragonsSouls.LoadWindow.LoadObject")
try:
wndEquip = self.GetChild("DragonsSoulsSlot")
self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
except:
import exception
exception.Abort("DragonsSouls.LoadWindow.BindObject")
 
wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
self.wndEquip = wndEquip
 
def RefreshStonesDSlot(self):
getItemVNum=player.GetItemIndex
for i in xrange(6):
slotNumber = item.EQUIPMENT_ITEM_NEW_SLOT_1 + i
self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)
self.wndEquip.RefreshSlot()

 
uiscript:

import uiScriptLocale
import item
 
ROOT_PATH = "d:/ymir work/ui/public/"
 
window = {
"name" : "DragonsSouls",
"style" : ("movable", "float",),
"x" : SCREEN_WIDTH - 175 - 140 -40 - 287 -10,
"y" : SCREEN_HEIGHT - 37 - 565 -5-5,
"width" : 287-10,
"height" : 281-10,
"children" :
(
{
"name" : "board",
"type" : "board",
"style" : ("movable", "float",),
"x" : 0,
"y" : 0,
"width" : 287,
"height" : 281,   
"children" :
(
{
"name" : "TitleBar",
"type" : "titlebar",
"style" : ("movable", "float",),
"x" : 6,
"y" : 6,
"width" : 277,
"height" : 281,
"color" : "yellow",
"children" :
(
"name":"TitleName",
"type":"text", 
"x":95,
"y":3, 
"text":"Smocza Alchemia", 
},
),
},
{
"name" : "dragon_stones_img",
"type" : "image",
"x" : 5+2,
"y" : 20+6+1,
"image" : "locale/pl/ui/dragon_soul_bg.tga",
"children" :
(            
{
"name" : "DragonsSoulsSlot",
"type" : "slot",
"x" : 1,
"y" : -31,
"width" :273,
"height" :246,
"slot" : 
(
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_1, "x":120, "y":49, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_2, "x":188, "y":91, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_3, "x":188, "y":180, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_4, "x":120, "y":223, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_5, "x":48, "y":180, "width":32, "height":32},
{"index":item.EQUIPMENT_ITEM_NEW_SLOT_6, "x":48, "y":90, "width":32, "height":32},
 
),
},
),
},
),
},
),
}

Opublikowano

 

subtype ustaw  poprawnie

jadąc od  

rubin subtype 1

Jadelit  subtype 2
itd
ja mam zrobione  jak na pl

 

Ale ja nie mam tego zrobione jak na pl.

Jakby type/subtype było źle to by się reszta kamieni też nie pokazywała w slocie.

  • 2 tygodnie później...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...