Postado Janeiro 31, 2018 7 anos 6 minutos atrás, DboExplorer disse: Eu to querendo fazer sem precisar por um tabela especificando cara atributo customizado entende? Dessa forma em lua eu já fiz, porém se eu adicionar um atributo novo e esquecer de por na tabela vai dar problema, por isso queria fazer em c++ pra pegar todos direto sem precisa especificar cada um. Entendi, tu pode me mandar tuas sources? Ou a source da base do teu servidor
Postado Janeiro 31, 2018 7 anos Autor 3 minutos atrás, Mono Singed disse: Entendi, tu pode me mandar tuas sources? Ou a source da base do teu servidor source.rar Te ajudei ?? Que tal fazer uma contribuição ?
Postado Janeiro 31, 2018 7 anos Amigo, eu fiz, mas utilizei padrões do c++11, tenha certeza de que o teu compilador esteja nessa versão. Também não testei (não creio que haja erros de lógica, mas pode haver alguns de escrita, como letras comidas ou falta de ;, fiz correndo), já que não dá pra compilar só com esses arquivos, mas vê aí: Antes de tudo, vamos para os includes: no arquivo luascript.cpp, adicione um: #include "itemattributes.h" onde tu encontrar os includes semelhantes já no arquivo luascript.h, declare a classe ItemAttribute: class ItemAttribute; onde tu encontrar as declarações de classes semelhantes Após "bool unserializeMap(PropStream& stream);", no arquivo itemattributes.h, adicione: AttributeMap* getMap(); Após a linha 315, no arquivo itemattributes.cpp, adicione: //RETORNA UM PONTEIRO PARA O ATTR MAP POR MOTIVOS DE PERFORMANCE, NÃO PODE SER UTILIZADO EM OBJETOS CONSTANTES!!! AttributeMap* ItemAttributes::getMap() { if(!attributes){ createAttributes(); } return attributes; } Após a seguinte linha no arquivo luascript.h: static int32_t luaGetItemAttribute(lua_State* L); Adicione: static int32_t luaGetItemAttributeMap(lua_State* L); Após a seguinte linha no arquivo luascript.cpp: //getItemAttribute(uid, key) lua_register(m_luaState, "getItemAttribute", LuaScriptInterface::luaGetItemAttribute); Adicione: //getItemAttributeMap(uid, key) lua_register(m_luaState, "getItemAttributeMap", LuaScriptInterface::luaGetItemAttributeMap); Após a linha 9282, no arquivo luascript.cpp, adicione: int32_t LuaScriptInterface::luaGetItemAttributeMap(lua_State* L) { //getItemAttributeMap(uid) ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushnil(L); return 1; } typedef std::map<std::string, ItemAttribute> AttributeMap; AttributeMap* attrMap = item->getAttributeMap(); lua_newtable(L); for(auto attr : attrMap){ setField(L, attr->first, attr->second.get()); pushTable(L); } return 1; } Editado Janeiro 31, 2018 7 anos por Mono Singed (veja o histórico de edições)
Postado Janeiro 31, 2018 7 anos Autor @Mono Singed Eu uso Devp-cpp pra compilar e não consigo por o c++11 porque estou com um problema no dev, deu alguns erro acredito que seja por que não está usando os padrão do c++11. Te ajudei ?? Que tal fazer uma contribuição ?
Postado Janeiro 31, 2018 7 anos 8 minutos atrás, DboExplorer disse: @Mono Singed Eu uso Devp-cpp pra compilar e não consigo por o c++11 porque estou com um problema no dev, deu alguns erro acredito que seja por que não está usando os padrão do c++11. Okay, okay, alguns erros foram, mas a maioria foi porque eu não fiz isso usando uma ide, aí errei em alguns nomes e tal. Substitua teus arquivos por estes: itemattributes.cpp itemattributes.h luascript.cpp luascript.h (novamente, te explico como utilizar se compilar certinho)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.