Jump to content

[C++]6 Slots Pedras Armas/armaduras


Karbust
 Share

Recommended Posts

Boas pessoal

 

Venho aqui partilhar um tutorial que encontrei de como adicionar 6 pedras nas armas ou armaduras...

 

Vamos começar...

 

 

 

Abrir o ficheiro "db/src/AuctionManager.cpp"

 

Procurar por:

 

"SELECT id,    owner_id, count, vnum, socket0, socket1, socket2,"

 

 

Substituir por:

 

"SELECT id,    owner_id, count, vnum, socket0, socket1, socket2, socket3, socket4, socket5"

 

 

Procurar por:

 

str_to_number(item.alSockets[2], row[cur++]);

 

 

Adicionar:

 

str_to_number(item.alSockets[3], row[cur++]);
str_to_number(item.alSockets[4], row[cur++]);
str_to_number(item.alSockets[5], row[cur++]);

 

 

 

Abrir o ficheiro "db/src/Cache.cpp"

 

Procurar por:

 

void CItemCache::OnFlush()

 

 

Substituir a função toda por:

 

void CItemCache::OnFlush()
{
   if (m_data.vnum == 0) // vnumÀÌ 0ÀÌ¸é »èÁ¦Ç϶ó°í Ç¥½ÃµÈ °ÍÀÌ´Ù.
   {
       char szQuery[QUERY_MAX_LEN];
       snprintf(szQuery, sizeof(szQuery), "DELETE FROM item%s WHERE id=%u", GetTablePostfix(), m_data.id);
       CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, 0, NULL);


       if (g_test_server)
           sys_log(0, "ItemCache::Flush : DELETE %u %s", m_data.id, szQuery);
   }
   else
   {
       long alSockets[iTEM_SOCKET_MAX_NUM];
       TPlayerItemAttribute aAttr[iTEM_ATTRIBUTE_MAX_NUM];
       bool isSocket = false, isAttr = false;


       memset(&alSockets, 0, sizeof(long) * ITEM_SOCKET_MAX_NUM);
       memset(&aAttr, 0, sizeof(TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM);


       TPlayerItem * p = &m_data;


       if (memcmp(alSockets, p->alSockets, sizeof(long) * ITEM_SOCKET_MAX_NUM))
           isSocket = true;


       if (memcmp(aAttr, p->aAttr, sizeof(TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM))
           isAttr = true;


       char szColumns[QUERY_MAX_LEN];
       char szValues[QUERY_MAX_LEN];
       char szUpdate[QUERY_MAX_LEN];


       int iLen = snprintf(szColumns, sizeof(szColumns), "id, owner_id, window, pos, count, vnum");


       int iValueLen = snprintf(szValues, sizeof(szValues), "%u, %u, %d, %d, %u, %u",
               p->id, p->owner, p->window, p->pos, p->count, p->vnum);


       int iUpdateLen = snprintf(szUpdate, sizeof(szUpdate), "owner_id=%u, window=%d, pos=%d, count=%u, vnum=%u",
               p->owner, p->window, p->pos, p->count, p->vnum);


       if (isSocket)
       {
           iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2, socket3, socket4, socket5");
           iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
                   ", %lu, %lu, %lu, %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3], p->alSockets[4], p->alSockets[5]);
           iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
                   ", socket0=%lu, socket1=%lu, socket2=%lu, socket3=%lu, socket4=%lu, socket5=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3], p->alSockets[4], p->alSockets[5]);
       }


       if (isAttr)
       {
           iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, 
                   ", attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3"
                   ", attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6");


           iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
                   ", %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",
                   p->aAttr[0].bType, p->aAttr[0].sValue,
                   p->aAttr[1].bType, p->aAttr[1].sValue,
                   p->aAttr[2].bType, p->aAttr[2].sValue,
                   p->aAttr[3].bType, p->aAttr[3].sValue,
                   p->aAttr[4].bType, p->aAttr[4].sValue,
                   p->aAttr[5].bType, p->aAttr[5].sValue,
                   p->aAttr[6].bType, p->aAttr[6].sValue);


           iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
                   ", attrtype0=%d, attrvalue0=%d"
                   ", attrtype1=%d, attrvalue1=%d"
                   ", attrtype2=%d, attrvalue2=%d"
                   ", attrtype3=%d, attrvalue3=%d"
                   ", attrtype4=%d, attrvalue4=%d"
                   ", attrtype5=%d, attrvalue5=%d"
                   ", attrtype6=%d, attrvalue6=%d",
                   p->aAttr[0].bType, p->aAttr[0].sValue,
                   p->aAttr[1].bType, p->aAttr[1].sValue,
                   p->aAttr[2].bType, p->aAttr[2].sValue,
                   p->aAttr[3].bType, p->aAttr[3].sValue,
                   p->aAttr[4].bType, p->aAttr[4].sValue,
                   p->aAttr[5].bType, p->aAttr[5].sValue,
                   p->aAttr[6].bType, p->aAttr[6].sValue);
       }


       char szItemQuery[QUERY_MAX_LEN + QUERY_MAX_LEN];
       snprintf(szItemQuery, sizeof(szItemQuery), "REPLACE INTO item%s (%s) VALUES(%s)", GetTablePostfix(), szColumns, szValues);


       if (g_test_server)    
           sys_log(0, "ItemCache::Flush :REPLACE  (%s)", szItemQuery);


       CDBManager::instance().ReturnQuery(szItemQuery, QID_ITEM_SAVE, 0, NULL);


       //g_item_info.Add(p->vnum);
       ++g_item_count;
   }


   m_bNeedQuery = false;
}

 

 

 

Abrir o ficheiro "db/src/ClientManager.cpp"

 

Procurar por:

 

dwSocket2

 

 

Substituir todos por:

 

dwSocket5

 

 

Procurar por:

 

socket0, socket1, socket2,

 

 

Substituir por:

 

socket0, socket1, socket2, socket3, socket4, socket5

 

 

Procurar por:

 

socket0, socket1, socket2,

 

 

Substituir por:

 

socket0, socket1, socket2, socket3, socket4, socket5

 

 

Procurar por:

 

"VALUES(%u, %u, '%s', %d, %u, %u, %u, %u, %u)",

 

 

Substituir por:

 

"VALUES(%u, %u, '%s', %d, %u, %u, %u, %u, %u, %u, %u, %u)",

 

 

Procurar por:

 

pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, dwSocket2);

 

 

Substituir por:

 

pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, pItemAward->dwSocket2, pItemAward->dwSocket3, pItemAward->dwSocket4, dwSocket5);

 

 

Procurar por:

 

item.alSockets[2] = dwSocket2;

 

 

Substituir por:

 

item.alSockets[2] = pItemAward->dwSocket2;

 

 

Adicionar a seguir:

 

item.alSockets[3] = pItemAward->dwSocket3;
item.alSockets[4] = pItemAward->dwSocket4;
item.alSockets[5] = dwSocket5;

 

 

Procurar por:

 

"REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2, "

 

 

Substituir por:

 

"REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2, socket3, socket4, socket5, "

 

 

Procurar por:

 

"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",

 

 

Substituir por:

 

"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",

 

 

Procurar por:

 

p->alSockets[2],

 

 

Adicionar a seguir:

 

p->alSockets[3],
p->alSockets[4],
p->alSockets[5],

 

 

 

Abrir o ficheiro "db/src/ClientManagerPlayer.cpp"

 

Procurar por:

 

str_to_number(item.alSockets[2], row[cur++]);

 

 

Adicionar a seguir:

 

str_to_number(item.alSockets[3], row[cur++]);
str_to_number(item.alSockets[4], row[cur++]);
str_to_number(item.alSockets[5], row[cur++]);

 

 

Procurar por (x2):

 

socket0,socket1,socket2,

 

 

Adicionar a seguir:

 

socket3,socket4,socket5,

 

 

 

Abrir o ficheiro "db/src/ItemAwardManager.cpp"

 

Procurar por:

 

socket0,socket1,socket2

 

 

Adicionar a seguir:

 

socket3,socket4,socket5

 

 

Procurar por:

 

str_to_number(kData->dwSocket2, row[col++]);

 

 

Adicionar a seguir:

 

str_to_number(kData->dwSocket3, row[col++]);
str_to_number(kData->dwSocket4, row[col++]);
str_to_number(kData->dwSocket5, row[col++]);

 

 

 

Abrir o ficheiro "db/src/ItemAwardManager.h"

 

Procurar por:

 

DWORD dwSocket2;

 

 

Adicionar a seguir:

 

DWORD dwSocket3;
DWORD dwSocket4;
DWORD dwSocket5;

 

 

 

Abrir o ficheiro "commom/item_lenght.h"

 

Procurar por:

 

ITEM_SOCKET_MAX_NUM = 3;

 

 

Substituir por:

 

ITEM_SOCKET_MAX_NUM = 6;

 

 

 

Abrir o ficheiro "game/src/constants.cpp"

 

Substituir 3 por 6 em:

 

WEAPON_SWORD
WEAPON_DAGGER
WEAPON_BOW
WEAPON_TWO_HANDED
WEAPON_BELL
WEAPON_FAN
ARMOR_BODY

 

 

 

Source Cliente:

 

Abrir o ficheiro "UserInterface/GameType.h"

 

Procurar por:

 

ITEM_SOCKET_SLOT_MAX_NUM = 3;

 

 

Substituir por:

 

ITEM_SOCKET_SLOT_MAX_NUM = 6;

 

 

Abrir o ficheiro "UserInterface/PythonChatModule.cpp"

 

Procurar pela função:

 

PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)

 

 

Substituir toda por:

 

PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)
{
   char * szHyperlink;

   if (!PyTuple_GetString(poArgs, 0, &szHyperlink))
       return Py_BuildException();

   std::string stHyperlink(szHyperlink);
   std::vector<std::string> results;

   split_string(stHyperlink, ":", results, false);

   // item:vnum:flag:socket0:socket1:socket2:socket3:socket4:socket5
   if (0 == results[0].compare("item"))
   {
       if (results.size() < 9)
           return Py_BuildValue("s", "");

       CItemData * pItemData = NULL;

       if (CItemManager::Instance().GetItemDataPointer(htoi(results[1].c_str()), &pItemData))
       {
           char buf[1024] = { 0 };
           char itemlink[256];
           int len;
           bool isAttr = false;

           len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x:%x:%x:%x", 
                   htoi(results[1].c_str()),
                   htoi(results[2].c_str()),
                   htoi(results[3].c_str()),
                   htoi(results[4].c_str()),
                   htoi(results[5].c_str()),
                   htoi(results[6].c_str()),
                   htoi(results[7].c_str()),
                   htoi(results[8].c_str()));

           if (results.size() >= 11)
           {
               for (int i = 9; i < results.size(); i += 2)
               {
                   len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d", 
                           htoi(results[i].c_str()),
                           atoi(results[i+1].c_str()));
                   isAttr = true;
               }
           }

           if (isAttr)
               //"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
               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());

           return Py_BuildValue("s", buf);
       }
   }

   return Py_BuildValue("s", "");
}

 

 

 

Abrir o ficheiro "UserInterface/PythonPlayerModule.cpp"

 

Procurar pela função:

 

PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)

 

 

Substituir toda por:

 

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:%x:%x:%x", 
               pPlayerItem->vnum, pPlayerItem->flags,
               pPlayerItem->alSockets[0], pPlayerItem->alSockets[1], pPlayerItem->alSockets[2] , pPlayerItem->alSockets[3], pPlayerItem->alSockets[4], pPlayerItem->alSockets[5]);

       for (int i = 0; i < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++i)
           if (pPlayerItem->aAttr[i].bType != 0)
           {
               len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d", 
                       pPlayerItem->aAttr[i].bType, pPlayerItem->aAttr[i].sValue);
               isAttr = true;
           }

       if( GetDefaultCodePage() == CP_ARABIC ) {
           if (isAttr)
               //"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
               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)
               //"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
               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);
}

 

 

 

Cliente (python):

 

Abrir o ficheiro "root/uitooltip.py"

 

Procurar por:

 

def SetHyperlinkItem(self, tokens):

 

 

Substituir por:

 

def SetHyperlinkItem(self, tokens):
	minTokenCount = 3 + player.METIN_SOCKET_MAX_NUM
	maxTokenCount = minTokenCount + 2 * player.ATTRIBUTE_SLOT_MAX_NUM
	if tokens and len(tokens) >= minTokenCount and len(tokens) <= maxTokenCount:
		head, vnum, flag = tokens[:3]
		itemVnum = int(vnum, 16)
		metinSlot = [int(metin, 16) for metin in tokens[3:9]]

		rests = tokens[9:]
		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)

		ItemToolTip.OnUpdate(self)

 

 

Base de Dados:

 

Na tabela "player/item_proto"

 

Em socket_pct alterar para o 3 para 4, 5 ou 6 .

 

 

Dump Proto (para quem usa):

 

No ficheiro "dump_proto.cpp"

 

Procurar por:

 

ITEM_SOCKET_MAX_NUM = 3;

 

 

Substituir por:

 

ITEM_SOCKET_MAX_NUM = 6;

 

 

 

 

Resultado:

yQcWMTU.jpg

 

Espero que gostem

 

Fonte: http://www.turkmmo.com/c-c-python/3403031-c-6-tas-sistemi-sorunlar-fixed.html

Link to comment
Share on other sites

  • 8 months later...

Bom dia ...

Eu estou tentand adicionar as 6 pedras, mais ao tentar ligar sae o seguinte erro:

Syserr:

SYSERR: Jun 6 10:02:58.619833 :: Load: DirectQuery failed(SELECT IP_FROM, IP_TO, COUNTRY_NAME FROM iptocountry)

SYSERR: Jun 6 10:03:02.920903 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:02.930875 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:02.949201 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:02.954047 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:02.955824 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:05.964329 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:10.127344 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:15.62724 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:20.62363 :: ChildLoop: AsyncSQL: query failed: Unknown column 'socket3' in 'field list' (query: SELECT id,login,vnum,count,socket0,socket1,socket2,socket3,socket4,socket5,mall,why FROM item_award WHERE taken_time IS NULL and id > 0 errno: 1054)

SYSERR: Jun 6 10:03:22.967548 :: Process: FDWATCH: peer null in event: ident 22

 

Alguém saberia o porque desse erro?

 

Desde já agradeço a ajuda, bom dia a todos...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...