Psych0SoociaL 1
Psych0SoociaL
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Agora Metin2 1
Agora Metin2
Bvural41 1
Bvural41
Mt2Hizmet 1
Mt2Hizmet
Hikaye Ekle
Kaynak ikonu

Çöp Butonu Sistemi 2025-06-02

indirmek için izniniz yok
Ekli dosyayı görüntüle 139864

Ekteki klasörde bulunan trashbutton klasörünü, ETC packi içindeki ymir work/ui/ dizinine atarsanız, buton örnekte olduğu gibi gözükecektir.
[CODE title="locale/tr/inventorywindow.py:"]# BURAYI BUL:
"name" : "InventoryWindow",

## 600 - (##dth + 오른쪽으로 부터 띄우기 24 px)
"x" : SCREEN_WIDTH - 176,
"y" : SCREEN_HEIGHT - 37 - 565,

"style" : ("movable", "float",),

"width" : 176,
"height" : 565,

# BU ŞEKİLDE DEĞİŞTİR:
"name" : "InventoryWindow",

## 600 - (width + 오른쪽으로 부터 띄우기 24 px## "x" : SCREEN_WIDTH - 176,
"y" : SCREEN_HEIGHT - 37 - 565 - 19,

"style" : ("movable", "float",),

"width" : 176,
"height" : 565 + 19,


## DÜZENLEDİĞİMİZ BÖLÜMÜN HEMEN ALTINDAKİ, CHILDREN'LARI##İÇİNDE EN TEPEDE OLANI, BUNU BUL:

"children" :
(
## Inventory, Equipment Slots
{
"name" : "board"## "type" : "board",
"style" : ("attach",),

"x" : 0,
"y" : 0,

"width" : 176,
"height" : 565,

## BU ŞEKİLDE DEĞİŞTİR:

"children" :
(
## ##ventory, Equipment Slots
{
"name" : "board",
## ##ventorye" : "board",
"style" : ("attach",),

##" : 0,
"y" : 0,

"width" : 176,
"height" : 565 + 19,


## BU KISMI BUL:

## Item Slot
{
## "name" : "ItemSlot",
## "type" : "gri##table",

"x" : 8,
## "y" : 246,

"start_index" : 0,
"x_count" : 5,
"y_count" : 9,
"x_step" : 32,
"y_step" : 32,

"image" : "d:/ymir work/ui/public/Slot_Base.sub"
},

## EN SONDAKİ VİRGÜLDEN HEMEN SONRA BİR ALT SATIRA GEÇ VE BUNU YAPIŞTIR:
##
## Trash Button
{
"##me" : "TrashButton",
## "type" : "button",

"x" : 8,
## "y" : 246 + 289,

"default_image" : "d:/ymir work/ui/trashbutton/trashbutton_up.tga",
"over_image" : "d:/ymir work/ui/trashbutton/trashbutton_hover.tga",
"down_image" : "d:/ymir work/ui/trashbutton/trashbutton_down.tga",
},[/CODE]

[CODE title="UserInterface/Locale_inc.h:"]//en son define'ın altına ekle:
#define TRASHBUTTON[/CODE]

[CODE title="UserInterface/Packet.h:"]// HEADER_CG_...#define bittiği yere, HEADER_GC'lere geçmeden bunu ekle:
// örnek olarak, benimki şu satırın hemen altında:
// HEADER_CG_HANDSHAKE = 0xff,

#ifdef TRASHBUTTON
HEADER_CG_DELETEFROMINV = 220,
#endif


// #ifdeffypedef struct command_on_click
{
BYTE header;
DWORD #endif} TPacketCGOnClick;

// ALTINA EKLE:

#ifdef TRASHBUTTON
typedef struct packet_delfrominv
{
BYTE header;
DWORD position#ifdeffcketCGDelFromInv;
#endif[/CODE]

[CODE title="UserInterface/PythonNetworkStream.h:"]// ARAT:
bool S#endifftConfirmPacket(BYTE byAnswer, DWORD dwPID);
// ALTINA YAPIŞTIR:
#ifdef TRASHBUTTON
// trash button
bool SendDeleteFromInvPacket(DWORD posi#ifdeff#endif[/CODE]

[CODE title="UserInterface/PythonNetworkStreamModule.cpp:"]// BU FONKSİYONU #endifPyObject* netSendSelectItemPacket(PyObject* poSelf, PyObject* poArgs)
{
/*...fonk#endifPyObject..*/
}

// FONKSİYON BİTTİKTEN SONRA BİR ALT SATIRA GEÇ VE YAPIŞTIR:

#ifdef TRASHBUTTON
PyObject* netSendDeleteFromInventory(PyObject* poSelf, PyObject* poArgs)
{
i#ifdeffmPos;
if (!PyTuple_GetInteger(poArgs, 0, &iItemPos))
return Py_BuildException();

CPythonNetworkStream& rns = CPythonNetworkStream::Instance();
rns.SendDeleteFromInvPacket(iItemPos);

return Py_BuildNone();
}
#endif

// ARAT:
{ "RegisterErrorLog", netRegisterErrorLog, #endiff METH_VARARGS },

// ALTINA YAPIŞTIR:
#ifdef TRASHBUTTON
{ "SendDeleteFromInve#endif, netSendDeleteFromInve#ifdeff METH_VARARGS },
#endif[/CODE]

[CODE title="UserInterface/PythonNetworkStreamPhaseGame.cpp:"]// BU FONKSİYONU BUL:
b#endiffthonNetworkStream::SendQuestConfirmPacket(BYTE byAnswer, DWORD dwPID)
{
/*..fonksiyon içeriği..*/
}

// FONKSİYON BİTTİKTEN SONRA BİR ALT SATIRA GEÇ VE YAPIŞTIR:
#ifdef TRASHBUTTON
bool CPythonNetworkStream::SendDeleteFromInvPacket(DWORD position)
{
TPacketCGDelFromI#ifdeffket;
kPacket.header = HEADER_CG_DELETEFROMINV;
kPacket.position = position;

if (!Send(sizeof(kPacket), &kPacket))
{
Tracen("SendDeleteFromInvPacket Error");
return false;
}
Tracef("SendDeleteFromInvPacket");
return SendSequence();
}#endif
[/CODE]

[CODE title="common/service.h:"]// en son define'ın altına ekle:
#define TRASHBUTTON[/CODE]
[CODE title="game/src/input_main.cpp:"]// CInputMain::Analyze(LPDESC d, BYTE bHeader#defineechar * c_pData) fonksiyonu
// içinde, şunu bul:

case HEADER_CG_PONG:
Pong(d);
break;

// ÜSTÜNE YAPIŞTIR:

#ifdef TRASHBUTTON
case HEADER_CG_DELETEFROMINV:
if (ch)
{
const TPa#ifdeffelFromInv* p = reinterpret_cast<const TPacketCGDelFromInv*>(c_pData);
TItemPos Cell(INVENTORY, p->position);
LPITEM itemToDelete = ch->GetItem(Cell);
if (itemToDelete != NULL)
{
if (Cell.IsEquipPosition())
{
ch->ChatPacket(CHAT_TYPE_INFO, "Hayir.");
/*"Giyilen itemi silemezsin" uyarisi bu.*/
}
else
{
itemToDelete->RemoveFromCharacter();
}
}
}
break;
#endif[/CODE]
[CODE title="game/src/packet.h:"]// yine HEADER_CG...'ların en sonuna, GC'lere geçmeden bir satır ekle#endif// örnek olarak benimki şu satırın altında:
// HEADER_CG_CLIENT_VERSION2 = 0xf1,

#ifdef TRASHBUTTON
HEADER_CG_DELETEFROMINV = 220,
#endif

// ARAT:
typedef struct command_on_click
{
BYTE header;#ifdefD vid;
} TPacketCGOnClick;

// ALTINA YAPIŞT##endifdef TRASHBUTTON
typedef struct packet_delfrominv
{
BYTE header;
DWORD position;
} TPacketCGDelFromInv;
#endif[/CODE]#ifdef title="game/src/packet_info.cpp:"]// ARAT:
Set(HEADER_CG_ON_CLICK, sizeof(TPacketCGOnClick), "OnClick",##endif
// ALTINA YAPIŞTIR#ifdef TRASHBUTTON
Set(HEADER_CG_DELETEFROMINV, sizeof(TPacketCGDelFromInv), "DelFromInv", true);#endif
[/CODE]


İNDİR

VİRUSTOTAL


Not:Sistemi test etmedim, alıntıdır paylaşıldıysa lütfen gereksiz yorumlardan kaçınarak raporlayınız.
  • Untitled-8.png
    Untitled-8.png
    15.5 KB · Görüntüleme: 0
Yazar
brs77
Kaynak İndirilme
2
Görüntüleme
56
İlk yayınlama
Son Güncelleme

Ratings

0.00 yıldız(lar) 0 rating

brs77 - Kaynakları

Geri
Üst