Tony Araujo 282 Postado Julho 4, 2020 Share Postado Julho 4, 2020 [C++] getItemAttributes(itemUID) testado: TFS - 0.3.6 (possível instalação em qualquer versão, basta fazer as modificações conforme a estrutura de cada versão) autor: Tony Araújo (OrochiElf) Iae galera, de boas ? Então, hoje na correria do dia parei pra postar aí pra vocês, uma função na qual acredito que pode ajudar bastante, principalmente se vocês trabalham com muitos atributos em um item. Bom, a função é basicamente a seguinte, ela retorna uma tabela com todos os atributos que um item possuir, sendo a estrutura: {["attribute"] = value} Sem mais, vamos a instalação: Vá em itemattributes.h, e procure por: typedef std::map<std::string, ItemAttribute> AttributeMap; AttributeMap* attributes; Note que ela está dentro do protected, então agora faça o seguinte. 1. Copie a linha e a apague do protected: typedef std::map<std::string, ItemAttribute> AttributeMap; 2. Cole acima da classe ItemAttributes, ficando algo como: typedef std::map<std::string, ItemAttribute> AttributeMap; class ItemAttributes Feito isso, procure a função: boost::any getAttribute(const std::string& key) const; E abaixo adicione: AttributeMap* getAttributes() const {return attributes;} Agora, vá em luascript.h e procure por: static int32_t luaGetItemAttribute(lua_State* L); E abaixo adicione: static int32_t luaGetItemAttributes(lua_State* L); Feito, vá em luascript.cpp e procure por: lua_register(m_luaState, "getItemAttribute", LuaScriptInterface::luaGetItemAttribute); E abaixo adicione: //getItemAttributes(uid) -- Tony Araújo (OrochiElf) lua_register(m_luaState, "getItemAttributes", LuaScriptInterface::luaGetItemAttributes); Agora pra finalizar com a cereja do bolo, procure pela função: int32_t LuaScriptInterface::luaGetItemAttribute(lua_State* L) Então, abaixo dessa função, adicione esta função: int32_t LuaScriptInterface::luaGetItemAttributes(lua_State* L) { //getItemAttributes(uid) -- Tony Araújo (OrochiElf) ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushnil(L); return 1; } if(item->getAttributes()) { lua_newtable(L); for(AttributeMap::iterator it = item->getAttributes()->begin(); it != item->getAttributes()->end(); ++it) { lua_pushstring(L, it->first.c_str()); boost::any value = it->second.get(); if(value.type() == typeid(std::string)) lua_pushstring(L, boost::any_cast<std::string>(value).c_str()); else if(value.type() == typeid(int32_t) || value.type() == typeid(bool)) lua_pushnumber(L, boost::any_cast<int32_t>(value)); else if(value.type() == typeid(float)) lua_pushnumber(L, boost::any_cast<float>(value)); pushTable(L); } } else lua_pushboolean(L, false); return 1; } E "isso é tudo pessoal", até a próxima! xD nociam e Ayron5 reagiu a isso 1 1 Link para o comentário Compartilhar em outros sites More sharing options...
nociam 90 Postado Julho 4, 2020 Share Postado Julho 4, 2020 Sempre com ótimos códigos nível hard na programação um dia chego lá kkkkkk. Link para o comentário Compartilhar em outros sites More sharing options...
boxxer321 67 Postado Julho 4, 2020 Share Postado Julho 4, 2020 Consegue postar um exemplo,mano? Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados