- Katılım
- 3 Eki 2017
- Konular
- 1,673
- Mesajlar
- 18,445
- Çözüm
- 48
- Online süresi
- 9mo 24d
- Reaksiyon Skoru
- 8,721
- Altın Konu
- 297
- Başarım Puanı
- 374
- MmoLira
- 41,550
- DevLira
- 753
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Eski yapı fileslere eklenen ekipman görüntülenme sistemidir.
Hatalı gösterme, item görüntü kaymasının,efsun göstermemenin fixli halidir.
cmd_general.cpp (server/game):
char.cpp (server/game):
PythonNetworkStreamPhaseGame (Binary/client):
root/interfaceModule.py:
root/uiequipmentdialog.py:
root/uitarget.py:
uiscript/equipmentdialog.py:
costumeequipmentdialog.py in uiscript:
Hatalı gösterme, item görüntü kaymasının,efsun göstermemenin fixli halidir.
cmd_general.cpp (server/game):
C++:
Orjinalde GM_PLAYER Yetkisine ve Oyunculara Kapalıydı. Eğer Profil Görüntülemeyi Herkes Kullanabilsin İstiyorsanız.
Arat:
ACMD(do_view_equip)
Tekrar Arat:
if (ch->GetGMLevel() <= GM_PLAYER)
return;
Alttaki Gibi Yorum Satırı Yapın veya Silin:
//if (ch->GetGMLevel() <= GM_PLAYER)
//return;
char.cpp (server/game):
C++:
Burada Lenght.h'de İçinde EWearPositions var. Bunun Sıralarını Yazınız.
#int pos[24] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; #24 adet
Örneğin: 0 WEAR_BODY (Zırh ) 4 WEAR_WEAPON(Silah) 29 WEAR_GLOVE (Eldiven) mesela ben yukarıdaki int pos[3] yazsaydım ve list içine 0, 4, 29 yazsaydım profilde sadece zırh silah ve eldiven gözükürdü. Ona göre nelerin gözükmesini istiyorsanız EWearPositions daki sıralamaları doğru yazınız.
Toplam kaçtane varsa int pos[toplam sayıyı giriniz.]
Anladıysanız O Zaman Başlayalım:
char.cpp aç ve bunu arat:
void CHARACTER::SendEquipment(LPCHARACTER ch)
ve Bununla Değiştir:
void CHARACTER::SendEquipment(LPCHARACTER ch)
{
TPacketViewEquip p;
p.header = HEADER_GC_VIEW_EQUIP;
p.vid = GetVID();
int pos[24] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; //Burayı yapmayı unutmayın üstte gösterdiğim örnekteki gibi.
for (int i = 0; i < 24; i++) //buradaki 24 sayısını toplam sayınız kadar değiştiriniz. int pos[toplam değer] burası ne ise aynen onu yazınız.
{
LPITEM item = GetWear(pos[i]);
if (item)
{
p.equips[i].vnum = item->GetVnum();
p.equips[i].count = item->GetCount();
thecore_memcpy(p.equips[i].alSockets, item->GetSockets(), sizeof(p.equips[i].alSockets));
thecore_memcpy(p.equips[i].aAttr, item->GetAttributes(), sizeof(p.equips[i].aAttr));
}
else
{
p.equips[i].vnum = 0;
}
}
ch->GetDesc()->Packet(&p, sizeof(p));
}
C++:
game/packet.h aç ve arat:
typedef struct pakcet_view_equip
ve komple değiştir:
typedef struct pakcet_view_equip
{
BYTE header;
DWORD vid;
struct {
DWORD vnum;
BYTE count;
long alSockets[ITEM_SOCKET_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
} equips[24]; //Buradaki toplam sayıyı değiştirmeyi unutmayın.
} TPacketViewEquip;
C++:
Packet.h (Binary/client):
UserInterfacePacket.h aç ve arat:
typedef struct pakcet_view_equip
ve komple değiştir:
typedef struct pakcet_view_equip
{
BYTE header;
DWORD dwVID;
TEquipmentItemSet equips[24]; //buradaki toplam sayıyı değiştimeyi unutma
} TPacketGCViewEquip;
PythonNetworkStreamPhaseGame (Binary/client):
C++:
Arat:
bool CPythonNetworkStream::RecvViewEquipPacket()
ve Komple Değiştir:
bool CPythonNetworkStream::RecvViewEquipPacket()
{
TPacketGCViewEquip kViewEquipPacket;
if (!Recv(sizeof(kViewEquipPacket), &kViewEquipPacket))
return false;
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OpenEquipmentDialog", Py_BuildValue("(i)", kViewEquipPacket.dwVID));
for (int i = 0; i < 24; ++i) //Buradaki Toplam Sayıyı Değiştirmeyi Unutma.
{
TEquipmentItemSet & rItemSet = kViewEquipPacket.equips[i];
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogItem", Py_BuildValue("(iiii)", kViewEquipPacket.dwVID, i, rItemSet.vnum, rItemSet.count));
for (int j = 0; j < ITEM_SOCKET_SLOT_MAX_NUM; ++j)
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogSocket", Py_BuildValue("(iiii)", kViewEquipPacket.dwVID, i, j, rItemSet.alSockets[j]));
for (int k = 0; k < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++k)
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogAttr", Py_BuildValue("(iiiii)", kViewEquipPacket.dwVID, i, k, rItemSet.aAttr[k].bType, rItemSet.aAttr[k].sValue));
}
return true;
}
root/interfaceModule.py:
C++:
Arat:
def OpenEquipmentDialog(self, vid):
dlg = uiEquipmentDialog.EquipmentDialog()
dlg.SetItemToolTip(self.tooltipItem)
dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog))
dlg.Open(vid)
self.equipmentDialogDict[vid] = dlg
Alttaki Gibi Değiştiriniz:
def OpenEquipmentDialog(self, vid):
if self.equipmentDialogDict.has_key(vid):
self.equipmentDialogDict[vid].Destroy()
self.CloseEquipmentDialog(vid)
dlg = uiEquipmentDialog.EquipmentDialog()
dlg.SetItemToolTip(self.tooltipItem)
dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog))
dlg.Open(vid)
self.equipmentDialogDict[vid] = dlg
root/uiequipmentdialog.py:
C++:
#Kodunuz İle Karşılaştırın.
#Neden ? Çünkü burada CostumeEquipmentDialog sınıfı var (Muhtemelen buna sahip değilsiniz)
import ui
import chr
import player
class CostumeEquipmentDialog(ui.ScriptWindow):
def __init__(self, wndEquipment):
if not wndEquipment:
import exception
exception.Abort("wndEquipment parameter must be set to CostumeEquipmentDialog")
return
ui.ScriptWindow.__init__(self)
self.isLoaded = 0
self.wndEquipment = wndEquipment;
self.wndCostumeEquipmentLayer = None
self.wndCostumeEquipmentSlot = None
self.expandBtn = None
self.minBtn = None
self.__LoadWindow()
def __del__(self):
ui.ScriptWindow.__del__(self)
def Show(self):
self.__LoadWindow()
ui.ScriptWindow.Show(self)
self.CloseCostumeEquipment()
def Close(self):
self.Hide()
def IsOpenedCostumeEquipment(self):
return self.wndCostumeEquipmentLayer.IsShow()
def OpenCostumeEquipment(self):
self.wndCostumeEquipmentLayer.Show()
self.expandBtn.Hide()
self.AdjustPositionAndSize()
self.RefreshSlot()
def CloseCostumeEquipment(self):
self.wndCostumeEquipmentLayer.Hide()
self.expandBtn.Show()
self.AdjustPositionAndSize()
def GetBasePosition(self):
x, y = self.wndEquipment.GetGlobalPosition()
return x - 139, y + 30
def AdjustPositionAndSize(self):
bx, by = self.GetBasePosition()
if self.IsOpenedCostumeEquipment():
self.SetPosition(bx, by)
self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
else:
self.SetPosition(bx + 129, by);
self.SetSize(10, self.GetHeight())
def __LoadWindow(self):
if self.isLoaded == 1:
return
self.isLoaded = 1
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "UIScript/CostumeEquipmentDialog.py")
except:
import exception
exception.Abort("CostumeEquipmentDialog.LoadWindow.LoadObject")
try:
self.ORIGINAL_WIDTH = self.GetWidth()
wndCostumeEquipmentSlot = self.GetChild("CostumeEquipmentSlot")
self.wndCostumeEquipmentLayer = self.GetChild("CostumeEquipmentLayer")
self.expandBtn = self.GetChild("ExpandButton")
self.minBtn = self.GetChild("MinimizeButton")
self.expandBtn.SetEvent(ui.__mem_func__(self.OpenCostumeEquipment))
self.minBtn.SetEvent(ui.__mem_func__(self.CloseCostumeEquipment))
except:
import exception
exception.Abort("CostumeEquipmentDialog.LoadWindow.BindObject")
wndCostumeEquipmentSlot.SetOverInItemEvent(ui.__mem_func__(self.wndEquipment.OverInItem))
wndCostumeEquipmentSlot.SetOverOutItemEvent(ui.__mem_func__(self.wndEquipment.OverOutItem))
self.wndCostumeEquipmentSlot = wndCostumeEquipmentSlot
def RefreshSlot(self):
equipmentDict = self.wndEquipment.itemDataDict
for i in [19, 20]:
if equipmentDict.has_key(i):
self.wndCostumeEquipmentSlot.SetItemSlot(i, equipmentDict[i][0], equipmentDict[i][1])
class EquipmentDialog(ui.ScriptWindow):
def __init__(self):
print "NEW EQUIPMENT DIALOG ----------------------------------------------------------------------------"
ui.ScriptWindow.__init__(self)
self.__LoadDialog()
self.vid = None
self.eventClose = None
self.itemDataDict = {}
self.tooltipItem = None
def __del__(self):
print "---------------------------------------------------------------------------- DELETE EQUIPMENT DIALOG "
ui.ScriptWindow.__del__(self)
def __LoadDialog(self):
try:
PythonScriptLoader = ui.PythonScriptLoader()
PythonScriptLoader.LoadScriptFile(self, "UIScript/EquipmentDialog.py")
getObject = self.GetChild
self.board = getObject("Board")
self.slotWindow = getObject("EquipmentSlot")
self.wndCostumeEquipment = CostumeEquipmentDialog(self)
except:
import exception
exception.Abort("EquipmentDialog.LoadDialog.BindObject")
self.board.SetCloseEvent(ui.__mem_func__(self.Close))
self.slotWindow.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
self.slotWindow.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
def Open(self, vid):
self.vid = vid
self.itemDataDict = {}
name = chr.GetNameByVID(vid)
self.board.SetTitleName(name)
self.SetCenterPosition()
self.SetTop()
self.Show()
if self.wndCostumeEquipment:
self.wndCostumeEquipment.Show()
def Close(self):
self.itemDataDict = {}
self.tooltipItem = None
self.Hide()
if self.eventClose:
self.eventClose(self.vid)
if self.wndCostumeEquipment:
self.wndCostumeEquipment.Close()
def Destroy(self):
self.eventClose = None
self.Close()
self.ClearDictionary()
self.board = None
self.slotWindow = None
if self.wndCostumeEquipment:
self.wndCostumeEquipment.Destroy()
self.wndCostumeEquipment = None
def SetEquipmentDialogItem(self, slotIndex, vnum, count):
if count <= 1:
count = 0
self.slotWindow.SetItemSlot(slotIndex, vnum, count)
emptySocketList = []
emptyAttrList = []
for i in xrange(player.METIN_SOCKET_MAX_NUM):
emptySocketList.append(0)
for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
emptyAttrList.append((0, 0))
self.itemDataDict[slotIndex] = (vnum, count, emptySocketList, emptyAttrList)
def SetEquipmentDialogSocket(self, slotIndex, socketIndex, value):
if not slotIndex in self.itemDataDict:
return
if socketIndex < 0 or socketIndex > player.METIN_SOCKET_MAX_NUM:
return
self.itemDataDict[slotIndex][2][socketIndex] = value
def SetEquipmentDialogAttr(self, slotIndex, attrIndex, type, value):
if not slotIndex in self.itemDataDict:
return
if attrIndex < 0 or attrIndex > player.ATTRIBUTE_SLOT_MAX_NUM:
return
self.itemDataDict[slotIndex][3][attrIndex] = (type, value)
def SetItemToolTip(self, tooltipItem):
self.tooltipItem = tooltipItem
def SetCloseEvent(self, event):
self.eventClose = event
def OverInItem(self, slotIndex):
if None == self.tooltipItem:
return
if not slotIndex in self.itemDataDict:
return
itemVnum = self.itemDataDict[slotIndex][0]
if 0 == itemVnum:
return
self.tooltipItem.ClearToolTip()
metinSlot = self.itemDataDict[slotIndex][2]
attrSlot = self.itemDataDict[slotIndex][3]
self.tooltipItem.AddItemData(itemVnum, metinSlot, attrSlot)
self.tooltipItem.ShowToolTip()
def OverOutItem(self):
if None != self.tooltipItem:
self.tooltipItem.HideToolTip()
def OnPressEscapeKey(self):
self.Close()
return True
def OnMoveWindow(self, x, y):
if self.wndCostumeEquipment:
self.wndCostumeEquipment.AdjustPositionAndSize()
root/uitarget.py:
C++:
Arat:
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE])
Altına Ekle:
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT])
Arat:
BUTTON_NAME_LIST = (
Tekrar Arat: localeInfo.TARGET_BUTTON_EXIT_OBSERVER,
Altına Ekle: localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT,
Arat:
def ShowDefaultButton(self):
#İçinde Tekrar Arat:
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE])
#Altına Ekle:
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT])
#Böyle Gözükecek:
def ShowDefaultButton(self):
self.isShowButton = True
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_WHISPER])
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE])
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT])
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_FIGHT])
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EMOTION_ALLOW])
for button in self.showingButtonList:
button.Show()
Sadece GM'ler görsün istiyorsanız, şu şekilde yapın:
def ShowDefaultButton(self):
self.isShowButton = True
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_WHISPER])
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE])
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_FIGHT])
if str(player.GetName())[0] == "[":
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT])
self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EMOTION_ALLOW])
for button in self.showingButtonList:
button.Show()
uiscript/equipmentdialog.py:
C++:
import uiScriptLocale
window = {
"name" : "EquipmentDialog",
"style" : ("movable", "float",),
"x" : 0,
"y" : 0,
"width" : 180,
"height" : 230,
"children" :
(
{
"name" : "Board",
"type" : "board_with_titlebar",
"x" : 0,
"y" : 0,
"width" : 180,
"height" : 230,
"title" : "Character Name",
"children" :
(
{
"name":"EquipmentBaseImage",
"type":"image",
"style" : ("attach",),
"x" : 0,
"y" : 9,
"horizontal_align" : "center",
"vertical_align" : "center",
"image" : "d:/ymir work/ui/equipment_bg_OGZZ.tga",
"children" :
(
{
"name" : "EquipmentSlot",
"type" : "slot",
"x" : 3,
"y" : 3,
"width" : 150,
"height" : 182,
"slot" : (
{"index":0, "x":39, "y":37, "width":32, "height":64},
{"index":1, "x":39, "y":2, "width":32, "height":32},
{"index":2, "x":39, "y":145, "width":32, "height":32},
{"index":3, "x":75, "y":67, "width":32, "height":32},
{"index":4, "x":3, "y":3, "width":32, "height":96},
{"index":5, "x":114, "y":67, "width":32, "height":32},
{"index":6, "x":114, "y":35, "width":32, "height":32},
{"index":7, "x":2, "y":145, "width":32, "height":32},
{"index":8, "x":75, "y":145, "width":32, "height":32},
{"index":9, "x":114, "y":2, "width":32, "height":32},
{"index":10, "x":75, "y":35, "width":32, "height":32},
## ring 1
##{"index":21, "x":2, "y":106, "width":32, "height":32},
## ring 2
##{"index":22, "x":75, "y":106, "width":32, "height":32},
## Belt
{"index":23, "x":39, "y":106, "width":32, "height":32},
## Buradaki "İndex": xx sayısı olan rakamlar Lenght.h'deki EWearPositions 'daki Sayılardır. Örneğin:
## "İndex": 0 WEAR_BODY Gibi Zırh Gözükür. Ona Göre Ayarlaryın Kordinatlarını İndexlerini vs.
),
},
),
},
),
},
),
}
costumeequipmentdialog.py in uiscript:
C++:
import uiScriptLocale
window = {
"name" : "CostumeEquipmentDialog",
"x" : 0,
"y" : 0,
"width" : 139,
"height" : 145,
"children" :
(
{
"name" : "ExpandButton",
"type" : "button",
"x" : 2,
"y" : 15,
"default_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_normal.tga",
"over_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_over.tga",
"down_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_down.tga",
"disable_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_disabled.tga",
},
{
"name" : "CostumeEquipmentLayer",
"x" : 5,
"y" : 0,
"width" : 139,
"height" : 145,
"children" :
(
{
"name" : "MinimizeButton",
"type" : "button",
"x" : 2,
"y" : 15,
"default_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_normal.tga",
"over_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_over.tga",
"down_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_down.tga",
"disable_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_disabled.tga",
},
{
"name" : "CostumeEquipmentBoard",
"type" : "board",
"style" : ("attach", "float"),
"x" : 10,
"y" : 0,
"width" : 129,
"height" : 145,
"children" :
(
{
"name" : "Costume_Base",
"type" : "image",
"x" : 8,
"y" : 8,
"image" : uiScriptLocale.LOCALE_UISCRIPT_PATH + "costume/costume_bg.jpg",
"children" :
(
{
"name" : "CostumeEquipmentSlot",
"type" : "slot",
"x" : 3,
"y" : 3,
"width" : 127,
"height" : 145,
"slot" : (
{"index":19, "x":61, "y":45, "width":32, "height":64},
{"index":20, "x":61, "y": 8, "width":32, "height":32},
#{"index":, "x":5, "y":145, "width":32, "height":32},
# 19 ve 20 indexler kostümlerdir ona göre düzenleyiniz.
),
},
),
},
),
},
),
},
),
}
En Çok Reaksiyon Alan Mesajlar
Paylaşım için teşekkürler
Paylaşım için teşekkürler
Paylaşım için teşekkürler
Paylaşım için teşekkürler
Eski yapı fileslere eklenen ekipman görüntülenme sistemidir.
Hatalı gösterme, item görüntü kaymasının,efsun göstermemenin fixli halidir.
Öğeyi görmek için üye olmalısınız.
cmd_general.cpp (server/game):
C++:Orjinalde GM_PLAYER Yetkisine ve Oyunculara Kapalıydı. Eğer Profil Görüntülemeyi Herkes Kullanabilsin İstiyorsanız. Arat: ACMD(do_view_equip) Tekrar Arat: if (ch->GetGMLevel() <= GM_PLAYER) return; Alttaki Gibi Yorum Satırı Yapın veya Silin: //if (ch->GetGMLevel() <= GM_PLAYER) //return;
char.cpp (server/game):
C++:Burada Lenght.h'de İçinde EWearPositions var. Bunun Sıralarını Yazınız. #int pos[24] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; #24 adet Örneğin: 0 WEAR_BODY (Zırh ) 4 WEAR_WEAPON(Silah) 29 WEAR_GLOVE (Eldiven) mesela ben yukarıdaki int pos[3] yazsaydım ve list içine 0, 4, 29 yazsaydım profilde sadece zırh silah ve eldiven gözükürdü. Ona göre nelerin gözükmesini istiyorsanız EWearPositions daki sıralamaları doğru yazınız. Toplam kaçtane varsa int pos[toplam sayıyı giriniz.] Anladıysanız O Zaman Başlayalım: char.cpp aç ve bunu arat: void CHARACTER::SendEquipment(LPCHARACTER ch) ve Bununla Değiştir: void CHARACTER::SendEquipment(LPCHARACTER ch) { TPacketViewEquip p; p.header = HEADER_GC_VIEW_EQUIP; p.vid = GetVID(); int pos[24] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; //Burayı yapmayı unutmayın üstte gösterdiğim örnekteki gibi. for (int i = 0; i < 24; i++) //buradaki 24 sayısını toplam sayınız kadar değiştiriniz. int pos[toplam değer] burası ne ise aynen onu yazınız. { LPITEM item = GetWear(pos[i]); if (item) { p.equips[i].vnum = item->GetVnum(); p.equips[i].count = item->GetCount(); thecore_memcpy(p.equips[i].alSockets, item->GetSockets(), sizeof(p.equips[i].alSockets)); thecore_memcpy(p.equips[i].aAttr, item->GetAttributes(), sizeof(p.equips[i].aAttr)); } else { p.equips[i].vnum = 0; } } ch->GetDesc()->Packet(&p, sizeof(p)); }
C++:game/packet.h aç ve arat: typedef struct pakcet_view_equip ve komple değiştir: typedef struct pakcet_view_equip { BYTE header; DWORD vid; struct { DWORD vnum; BYTE count; long alSockets[ITEM_SOCKET_MAX_NUM]; TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM]; } equips[24]; //Buradaki toplam sayıyı değiştirmeyi unutmayın. } TPacketViewEquip;
C++:Packet.h (Binary/client): UserInterfacePacket.h aç ve arat: typedef struct pakcet_view_equip ve komple değiştir: typedef struct pakcet_view_equip { BYTE header; DWORD dwVID; TEquipmentItemSet equips[24]; //buradaki toplam sayıyı değiştimeyi unutma } TPacketGCViewEquip;
PythonNetworkStreamPhaseGame (Binary/client):
C++:Arat: bool CPythonNetworkStream::RecvViewEquipPacket() ve Komple Değiştir: bool CPythonNetworkStream::RecvViewEquipPacket() { TPacketGCViewEquip kViewEquipPacket; if (!Recv(sizeof(kViewEquipPacket), &kViewEquipPacket)) return false; PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OpenEquipmentDialog", Py_BuildValue("(i)", kViewEquipPacket.dwVID)); for (int i = 0; i < 24; ++i) //Buradaki Toplam Sayıyı Değiştirmeyi Unutma. { TEquipmentItemSet & rItemSet = kViewEquipPacket.equips[i]; PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogItem", Py_BuildValue("(iiii)", kViewEquipPacket.dwVID, i, rItemSet.vnum, rItemSet.count)); for (int j = 0; j < ITEM_SOCKET_SLOT_MAX_NUM; ++j) PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogSocket", Py_BuildValue("(iiii)", kViewEquipPacket.dwVID, i, j, rItemSet.alSockets[j])); for (int k = 0; k < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++k) PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogAttr", Py_BuildValue("(iiiii)", kViewEquipPacket.dwVID, i, k, rItemSet.aAttr[k].bType, rItemSet.aAttr[k].sValue)); } return true; }
root/interfaceModule.py:
C++:Arat: def OpenEquipmentDialog(self, vid): dlg = uiEquipmentDialog.EquipmentDialog() dlg.SetItemToolTip(self.tooltipItem) dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog)) dlg.Open(vid) self.equipmentDialogDict[vid] = dlg Alttaki Gibi Değiştiriniz: def OpenEquipmentDialog(self, vid): if self.equipmentDialogDict.has_key(vid): self.equipmentDialogDict[vid].Destroy() self.CloseEquipmentDialog(vid) dlg = uiEquipmentDialog.EquipmentDialog() dlg.SetItemToolTip(self.tooltipItem) dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog)) dlg.Open(vid) self.equipmentDialogDict[vid] = dlg
root/uiequipmentdialog.py:
C++:#Kodunuz İle Karşılaştırın. #Neden ? Çünkü burada CostumeEquipmentDialog sınıfı var (Muhtemelen buna sahip değilsiniz) import ui import chr import player class CostumeEquipmentDialog(ui.ScriptWindow): def __init__(self, wndEquipment): if not wndEquipment: import exception exception.Abort("wndEquipment parameter must be set to CostumeEquipmentDialog") return ui.ScriptWindow.__init__(self) self.isLoaded = 0 self.wndEquipment = wndEquipment; self.wndCostumeEquipmentLayer = None self.wndCostumeEquipmentSlot = None self.expandBtn = None self.minBtn = None self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self): self.__LoadWindow() ui.ScriptWindow.Show(self) self.CloseCostumeEquipment() def Close(self): self.Hide() def IsOpenedCostumeEquipment(self): return self.wndCostumeEquipmentLayer.IsShow() def OpenCostumeEquipment(self): self.wndCostumeEquipmentLayer.Show() self.expandBtn.Hide() self.AdjustPositionAndSize() self.RefreshSlot() def CloseCostumeEquipment(self): self.wndCostumeEquipmentLayer.Hide() self.expandBtn.Show() self.AdjustPositionAndSize() def GetBasePosition(self): x, y = self.wndEquipment.GetGlobalPosition() return x - 139, y + 30 def AdjustPositionAndSize(self): bx, by = self.GetBasePosition() if self.IsOpenedCostumeEquipment(): self.SetPosition(bx, by) self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight()) else: self.SetPosition(bx + 129, by); self.SetSize(10, self.GetHeight()) def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/CostumeEquipmentDialog.py") except: import exception exception.Abort("CostumeEquipmentDialog.LoadWindow.LoadObject") try: self.ORIGINAL_WIDTH = self.GetWidth() wndCostumeEquipmentSlot = self.GetChild("CostumeEquipmentSlot") self.wndCostumeEquipmentLayer = self.GetChild("CostumeEquipmentLayer") self.expandBtn = self.GetChild("ExpandButton") self.minBtn = self.GetChild("MinimizeButton") self.expandBtn.SetEvent(ui.__mem_func__(self.OpenCostumeEquipment)) self.minBtn.SetEvent(ui.__mem_func__(self.CloseCostumeEquipment)) except: import exception exception.Abort("CostumeEquipmentDialog.LoadWindow.BindObject") wndCostumeEquipmentSlot.SetOverInItemEvent(ui.__mem_func__(self.wndEquipment.OverInItem)) wndCostumeEquipmentSlot.SetOverOutItemEvent(ui.__mem_func__(self.wndEquipment.OverOutItem)) self.wndCostumeEquipmentSlot = wndCostumeEquipmentSlot def RefreshSlot(self): equipmentDict = self.wndEquipment.itemDataDict for i in [19, 20]: if equipmentDict.has_key(i): self.wndCostumeEquipmentSlot.SetItemSlot(i, equipmentDict[i][0], equipmentDict[i][1]) class EquipmentDialog(ui.ScriptWindow): def __init__(self): print "NEW EQUIPMENT DIALOG ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self) self.__LoadDialog() self.vid = None self.eventClose = None self.itemDataDict = {} self.tooltipItem = None def __del__(self): print "---------------------------------------------------------------------------- DELETE EQUIPMENT DIALOG " ui.ScriptWindow.__del__(self) def __LoadDialog(self): try: PythonScriptLoader = ui.PythonScriptLoader() PythonScriptLoader.LoadScriptFile(self, "UIScript/EquipmentDialog.py") getObject = self.GetChild self.board = getObject("Board") self.slotWindow = getObject("EquipmentSlot") self.wndCostumeEquipment = CostumeEquipmentDialog(self) except: import exception exception.Abort("EquipmentDialog.LoadDialog.BindObject") self.board.SetCloseEvent(ui.__mem_func__(self.Close)) self.slotWindow.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) self.slotWindow.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) def Open(self, vid): self.vid = vid self.itemDataDict = {} name = chr.GetNameByVID(vid) self.board.SetTitleName(name) self.SetCenterPosition() self.SetTop() self.Show() if self.wndCostumeEquipment: self.wndCostumeEquipment.Show() def Close(self): self.itemDataDict = {} self.tooltipItem = None self.Hide() if self.eventClose: self.eventClose(self.vid) if self.wndCostumeEquipment: self.wndCostumeEquipment.Close() def Destroy(self): self.eventClose = None self.Close() self.ClearDictionary() self.board = None self.slotWindow = None if self.wndCostumeEquipment: self.wndCostumeEquipment.Destroy() self.wndCostumeEquipment = None def SetEquipmentDialogItem(self, slotIndex, vnum, count): if count <= 1: count = 0 self.slotWindow.SetItemSlot(slotIndex, vnum, count) emptySocketList = [] emptyAttrList = [] for i in xrange(player.METIN_SOCKET_MAX_NUM): emptySocketList.append(0) for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): emptyAttrList.append((0, 0)) self.itemDataDict[slotIndex] = (vnum, count, emptySocketList, emptyAttrList) def SetEquipmentDialogSocket(self, slotIndex, socketIndex, value): if not slotIndex in self.itemDataDict: return if socketIndex < 0 or socketIndex > player.METIN_SOCKET_MAX_NUM: return self.itemDataDict[slotIndex][2][socketIndex] = value def SetEquipmentDialogAttr(self, slotIndex, attrIndex, type, value): if not slotIndex in self.itemDataDict: return if attrIndex < 0 or attrIndex > player.ATTRIBUTE_SLOT_MAX_NUM: return self.itemDataDict[slotIndex][3][attrIndex] = (type, value) def SetItemToolTip(self, tooltipItem): self.tooltipItem = tooltipItem def SetCloseEvent(self, event): self.eventClose = event def OverInItem(self, slotIndex): if None == self.tooltipItem: return if not slotIndex in self.itemDataDict: return itemVnum = self.itemDataDict[slotIndex][0] if 0 == itemVnum: return self.tooltipItem.ClearToolTip() metinSlot = self.itemDataDict[slotIndex][2] attrSlot = self.itemDataDict[slotIndex][3] self.tooltipItem.AddItemData(itemVnum, metinSlot, attrSlot) self.tooltipItem.ShowToolTip() def OverOutItem(self): if None != self.tooltipItem: self.tooltipItem.HideToolTip() def OnPressEscapeKey(self): self.Close() return True def OnMoveWindow(self, x, y): if self.wndCostumeEquipment: self.wndCostumeEquipment.AdjustPositionAndSize()
root/uitarget.py:
C++:Arat: self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE]) Altına Ekle: self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT]) Arat: BUTTON_NAME_LIST = ( Tekrar Arat: localeInfo.TARGET_BUTTON_EXIT_OBSERVER, Altına Ekle: localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT, Arat: def ShowDefaultButton(self): #İçinde Tekrar Arat: self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE]) #Altına Ekle: self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT]) #Böyle Gözükecek: def ShowDefaultButton(self): self.isShowButton = True self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_WHISPER]) self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE]) self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT]) self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_FIGHT]) self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EMOTION_ALLOW]) for button in self.showingButtonList: button.Show() Sadece GM'ler görsün istiyorsanız, şu şekilde yapın: def ShowDefaultButton(self): self.isShowButton = True self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_WHISPER]) self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE]) self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_FIGHT]) if str(player.GetName())[0] == "[": self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT]) self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EMOTION_ALLOW]) for button in self.showingButtonList: button.Show()
uiscript/equipmentdialog.py:
C++:import uiScriptLocale window = { "name" : "EquipmentDialog", "style" : ("movable", "float",), "x" : 0, "y" : 0, "width" : 180, "height" : 230, "children" : ( { "name" : "Board", "type" : "board_with_titlebar", "x" : 0, "y" : 0, "width" : 180, "height" : 230, "title" : "Character Name", "children" : ( { "name":"EquipmentBaseImage", "type":"image", "style" : ("attach",), "x" : 0, "y" : 9, "horizontal_align" : "center", "vertical_align" : "center", "image" : "d:/ymir work/ui/equipment_bg_OGZZ.tga", "children" : ( { "name" : "EquipmentSlot", "type" : "slot", "x" : 3, "y" : 3, "width" : 150, "height" : 182, "slot" : ( {"index":0, "x":39, "y":37, "width":32, "height":64}, {"index":1, "x":39, "y":2, "width":32, "height":32}, {"index":2, "x":39, "y":145, "width":32, "height":32}, {"index":3, "x":75, "y":67, "width":32, "height":32}, {"index":4, "x":3, "y":3, "width":32, "height":96}, {"index":5, "x":114, "y":67, "width":32, "height":32}, {"index":6, "x":114, "y":35, "width":32, "height":32}, {"index":7, "x":2, "y":145, "width":32, "height":32}, {"index":8, "x":75, "y":145, "width":32, "height":32}, {"index":9, "x":114, "y":2, "width":32, "height":32}, {"index":10, "x":75, "y":35, "width":32, "height":32}, ## ring 1 ##{"index":21, "x":2, "y":106, "width":32, "height":32}, ## ring 2 ##{"index":22, "x":75, "y":106, "width":32, "height":32}, ## Belt {"index":23, "x":39, "y":106, "width":32, "height":32}, ## Buradaki "İndex": xx sayısı olan rakamlar Lenght.h'deki EWearPositions 'daki Sayılardır. Örneğin: ## "İndex": 0 WEAR_BODY Gibi Zırh Gözükür. Ona Göre Ayarlaryın Kordinatlarını İndexlerini vs. ), }, ), }, ), }, ), }
costumeequipmentdialog.py in uiscript:
C++:import uiScriptLocale window = { "name" : "CostumeEquipmentDialog", "x" : 0, "y" : 0, "width" : 139, "height" : 145, "children" : ( { "name" : "ExpandButton", "type" : "button", "x" : 2, "y" : 15, "default_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_normal.tga", "over_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_over.tga", "down_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_down.tga", "disable_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_disabled.tga", }, { "name" : "CostumeEquipmentLayer", "x" : 5, "y" : 0, "width" : 139, "height" : 145, "children" : ( { "name" : "MinimizeButton", "type" : "button", "x" : 2, "y" : 15, "default_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_normal.tga", "over_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_over.tga", "down_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_down.tga", "disable_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_disabled.tga", }, { "name" : "CostumeEquipmentBoard", "type" : "board", "style" : ("attach", "float"), "x" : 10, "y" : 0, "width" : 129, "height" : 145, "children" : ( { "name" : "Costume_Base", "type" : "image", "x" : 8, "y" : 8, "image" : uiScriptLocale.LOCALE_UISCRIPT_PATH + "costume/costume_bg.jpg", "children" : ( { "name" : "CostumeEquipmentSlot", "type" : "slot", "x" : 3, "y" : 3, "width" : 127, "height" : 145, "slot" : ( {"index":19, "x":61, "y":45, "width":32, "height":64}, {"index":20, "x":61, "y": 8, "width":32, "height":32}, #{"index":, "x":5, "y":145, "width":32, "height":32}, # 19 ve 20 indexler kostümlerdir ona göre düzenleyiniz. ), }, ), }, ), }, ), }, ), }Paylaşım için teşekkürler.
- Katılım
- 11 Mar 2017
- Konular
- 146
- Mesajlar
- 2,117
- Çözüm
- 20
- Online süresi
- 6mo 15d
- Reaksiyon Skoru
- 1,776
- Altın Konu
- 2
- Başarım Puanı
- 284
- MmoLira
- 3,241
- DevLira
- 16
Paylaşım için teşekkürler
- Katılım
- 3 Eki 2017
- Konular
- 1,673
- Mesajlar
- 18,445
- Çözüm
- 48
- Online süresi
- 9mo 24d
- Reaksiyon Skoru
- 8,721
- Altın Konu
- 297
- Başarım Puanı
- 374
- MmoLira
- 41,550
- DevLira
- 753
Rica ederim.Paylaşım için teşekkürler
- Katılım
- 15 Şub 2014
- Konular
- 698
- Mesajlar
- 3,402
- Çözüm
- 2
- Online süresi
- 4d 22h
- Reaksiyon Skoru
- 1,241
- Altın Konu
- 0
- Başarım Puanı
- 317
- MmoLira
- 1,987
- DevLira
- 0
Paylaşım için teşekkürler
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 383
- Cevaplar
- 2
- Görüntüleme
- 300
- Cevaplar
- 13
- Görüntüleme
- 1K
- Cevaplar
- 8
- Görüntüleme
- 385



