Bvural41 1
Bvural41
kralhakan2009 1
kralhakan2009
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Vahsi Uzman 1
Vahsi Uzman
Cannn6161 1
Cannn6161
B 1
berione65
sen272 1
sen272
Mt2Hizmet 1
Mt2Hizmet
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com
Kaynak ikonu

New SoulBind System 1

indirmek için izniniz yok
  • Konuyu başlatan Konuyu başlatan Etzhel
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 38
  • Görüntüleme Görüntüleme 10K

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!

Martysama files kullanıcılar kod farklılığından dolayı kafaları karışabilir muhtemel warning çözümü için;
 

Ekli dosyalar

Son düzenleme:
Güncelleme +++

Eğer 50262 (Ayırma Parşomeni+) yani mühürlü eşyanın süresini komple kaldırmak isterseniz, item_protoya 50262 kodlu bir eşya ekleyin ve bu işlemleri uygulayın;


[CODE lang="c" title="game/char_item.cpp,GameLib/ItemData.h,PythonItemModule.cpp" highlight="3-24, 82, 99-109"]// [GAME_SOURCE] Bu şekilde güncelle (game/char_item.cpp)

case 50262:
{
LPITEM item2;
if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
return false;

if (item2->isLocked() || item2->IsEquipped() || item2->IsExchanging())
return false;

if (!item2->IsSealed())
return false;

item2->SetSealBind(0);
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Item unsealbind success."));
{
char buf[21];
snprintf(buf, sizeof(buf), "%u", item2->GetID());
LogManager::instance().ItemLog(this, item, "REMOVE_SEALBIND_INSTANT", buf);
}
item->SetCount(item->GetCount() - 1);
}
break;

case 50263:
{
LPITEM item2;
if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
return false;

if (item2->isLocked() || item2->IsEquipped() || item2->IsExchanging())
return false;

if (item2->IsSealed()){
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Item already sealed."));
return false;
}

if (item2->GetType() != ITEM_WEAPON && item2->GetType() != ITEM_ARMOR && item2->GetType() != ITEM_COSTUME)
return false;

item2->SetSealBind();
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Item sealbind success."));
{
char buf[21];
snprintf(buf, sizeof(buf), "%u", item2->GetID());
LogManager::instance().ItemLog(this, item, "SET_SEALBIND_SUCCESS", buf);
}
item->SetCount(item->GetCount() - 1);
}
break;

case 50264:
{
LPITEM item2;
if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
return false;

if (item2->isLocked() || item2->IsEquipped() || item2->IsExchanging() || item2->GetSealBindTime() >= 0)
return false;

long duration = 72 * 60 * 60;
item2->SetSealBind(time(0) + duration);
item2->StartUnSealBindTimerExpireEvent();
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Item unsealbind success."));
{
char buf[21];
snprintf(buf, sizeof(buf), "%u", item2->GetID());
LogManager::instance().ItemLog(this, item, "REMOVE_SEALBIND_TIME_BEGIN", buf);
}
item->SetCount(item->GetCount() - 1);
}
break;

// [CLIENT_SOURCE] Bu şekilde güncelle (GameLib/ItemData.h)

enum ESealItem
{
SEAL_ITEM_BINDING_VNUM = 50263,
SEAL_ITEM_UNBINDING_VNUM = 50264,
SEAL_ITEM_UNBINDING_INSTANT_VNUM = 50262,
};

// [CLIENT_SOURCE] Bu şekilde güncelle (UserInterface/PythonItemModule.cpp)

PyObject * itemIsSealScroll(PyObject * poSelf, PyObject * poArgs)
{
int iItemIndex;
if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
return Py_BadArgument();

if (iItemIndex == CItemData::SEAL_ITEM_BINDING_VNUM )
return Py_BuildValue("i", TRUE);

return Py_BuildValue("i", FALSE);
}

PyObject * itemIsUnSealScroll(PyObject * poSelf, PyObject * poArgs)
{
int iItemIndex;
if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
return Py_BadArgument();

if (iItemIndex == CItemData::SEAL_ITEM_UNBINDING_VNUM || iItemIndex == CItemData::SEAL_ITEM_UNBINDING_INSTANT_VNUM)
return Py_BuildValue("i", TRUE);

return Py_BuildValue("i", FALSE);
}
[/CODE]
 
Son düzenleme:
Depoda ruh bilgisini göstermiyorsa eğer;


[CODE lang="cpp" title="PythonPlayerModele.cpp" highlight="3-27, 29-65"]// Bu kodları böyle değiştirin.

PyObject * playerGetItemUnSealLeftTime(PyObject * poSelf, PyObject * poArgs)
{
TItemPos Cell;
if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
return Py_BuildException();
if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
return Py_BuildException();

long seal = 0;
if (Cell.window_type == SAFEBOX)
{
TItemData* pItemData;
if (CPythonSafeBox::Instance().GetItemDataPtr(Cell.cell, &pItemData))
seal = pItemData->sealbind;
}
else
{
seal = CPythonPlayer::Instance().GetItemUnbindTime(Cell);
}

const time_t t = seal - CPythonApplication::Instance().GetServerTimeStamp();
int minutes = (t / 60) % 60;
int hours = t / 60 / 60;
return Py_BuildValue("ii", hours, minutes);
}

PyObject * playerGetItemSealDate(PyObject* poSelf, PyObject* poArgs)
{
switch (PyTuple_Size(poArgs))
{
case 1:
{
int iSlotIndex;
if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
return Py_BuildException();
long time = CPythonPlayer::Instance().GetItemUnbindTime(TItemPos(INVENTORY, iSlotIndex));
return Py_BuildValue("i", time);
}
case 2:
{
TItemPos Cell;
if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
return Py_BuildException();
if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
return Py_BuildException();

long time = 0;
if (Cell.window_type == SAFEBOX)
{
TItemData* pItemData;
if (CPythonSafeBox::Instance().GetItemDataPtr(Cell.cell, &pItemData))
time = pItemData->sealbind;
}
else
{
time = CPythonPlayer::Instance().GetItemUnbindTime(Cell);
}
return Py_BuildValue("i", time);
}
default:
return Py_BuildException();
}
}

[/CODE]
 
Yansıtma sistemi için alt+sol tık görünmesi için;


[CODE lang="cpp" title="PythonPlayerModule.cpp" highlight="46-48"]/// Böyle değiştir.

PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)
{
TItemPos Cell;

switch (PyTuple_Size(poArgs))
{
case 1:
if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
return Py_BuildException();
break;
case 2:
if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
return Py_BuildException();
if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
return Py_BuildException();
break;
default:
return Py_BuildException();
}
const TItemData * pPlayerItem = CPythonPlayer::Instance().GetItemData(Cell);
CItemData * pItemData = NULL;
char buf[1024];

if (pPlayerItem && CItemManager::Instance().GetItemDataPointer(pPlayerItem->vnum, &pItemData))
{
char itemlink[256];
int len;
bool isAttr = false;

len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x",
pPlayerItem->vnum, pPlayerItem->flags,
pPlayerItem->alSockets[0], pPlayerItem->alSockets[1], pPlayerItem->alSockets[2]);

for (int i = 0; i < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++i)
{
// if (pPlayerItem->aAttr.bType != 0) // @fixme009 (this line must be commented)
{
len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
pPlayerItem->aAttr.bType, pPlayerItem->aAttr.sValue);
isAttr = true;
}
}

#ifdef EN#ifdefOULBIND_SYSTEM
len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%d", pPlayerItem->sealbind);
#endif

#endif if( GetDefaultCodePage() == CP_ARABIC ) {
if (isAttr)
snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink);
else
snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink);
} else {
if (isAttr)
snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
else
snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
}
}
else
buf[0] = '\0';

return Py_BuildValue("s", buf);
}[/CODE]


[CODE lang="python" title="uitooltip.py" highlight="3-40"]// Böyle değiştir

def SetHyperlinkItem(self, tokens):
minTokenCount = 3 + player.METIN_SOCKET_MAX_NUM
maxTokenCount = minTokenCount + 2 * player.ATTRIBUTE_SLOT_MAX_NUM + (1 if app.ENABLE_SOULBIND_SYSTEM else 0)
if tokens and len(tokens) >= minTokenCount and len(tokens) <= maxTokenCount:
head, vnum, flag = tokens[:3]
itemVnum = int(vnum, 16)
metinSlot = [int(m, 16) for m in tokens[3:3 + player.METIN_SOCKET_MAX_NUM]]
rests = tokens[3 + player.METIN_SOCKET_MAX_NUM:]
unbindTime = 0
if app.ENABLE_SOULBIND_SYSTEM and rests and len(rests) % 2 == 1:
unbindTime = int(rests[-1])
rests = rests[:-1]
if rests:
attrSlot = []
rests.reverse()
while rests:
key = int(rests.pop(), 16)
if rests:
val = int(rests.pop())
attrSlot.append((key, val))
attrSlot += [(0, 0)] * (player.ATTRIBUTE_SLOT_MAX_NUM - len(attrSlot))
else:
attrSlot = [(0, 0)] * player.ATTRIBUTE_SLOT_MAX_NUM
self.ClearToolTip()
self.AddItemData(itemVnum, metinSlot, attrSlot, int(flag, 16), unbindTime, player.INVENTORY, -1)
if app.ENABLE_SOULBIND_SYSTEM and unbindTime:
if unbindTime == item.E_SEAL_DATE_UNLIMITED_TIMESTAMP:
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_SEALED, self.NEGATIVE_COLOR)
elif unbindTime > 0:
now = app.GetGlobalTimeStamp()
if unbindTime > now:
rem = unbindTime - now
hours = (rem // 60) // 60
minutes = (rem // 60) % 60
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_UNSEAL_LEFT_TIME % (hours, minutes), self.NEGATIVE_COLOR)
ItemToolTip.OnUpdate(self)[/CODE]
 

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

Geri
Üst