Karbust Posted September 17, 2016 at 09:15 PM Share Posted September 17, 2016 at 09:15 PM 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: 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 More sharing options...
Marcos Posted June 6, 2017 at 01:17 PM Share Posted June 6, 2017 at 01:17 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now