Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Düzenlenmiş Ekipman Görünüm Fix

bLastX

www.blastx.work
TM Üye
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
Ticaret - 0%
0   0   0

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.


fix.gif

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

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.

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst