caotic 393 Postado Abril 9, 2014 Share Postado Abril 9, 2014 (editado) A função getPlayerItems lista todos os itens do player essa função e muito necessaria afinal a pessoal pode procurar itens especificos. Vá em luascript.cpp e procure: int32_t LuaScriptInterface::luaSetMonsterOutfit(lua_State* L) { //doSetMonsterOutfit(cid, name, time) int32_t time = (int32_t)popNumber(L); std::string name = popString(L); ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushboolean(L, Spell::CreateIllusion(creature, name, time) == RET_NOERROR); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Coloque embaixo: int32_t LuaScriptInterface::luaGetPlayerItems(lua_State* L) { typedef std::map<int32_t, Container*> Containerlist; typedef std::list<Item*> Itemlist; Itemlist itemlist; Containerlist container; ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(popNumber(L)); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } lua_newtable(L); for(int32_t slotId = 1; slotId < 11; ++slotId) { if (Item* item = player->inventory[slotId]) { itemlist.push_back(item); if(Container* containeritem = item->getContainer()) { container[container.size()+1] = (containeritem); } } } int32_t x = 0; Item* item = NULL; while (x < container.size()) { x = x+1; Cylinder* cylinder = container[x]; if (cylinder) { for(int32_t i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex(); i++) { if(item = cylinder->__getThing(i)->getItem()) { itemlist.push_back(item); if(Container* subContainer = item->getContainer()) { container[container.size()+1] = subContainer; } } } } } ItemList::iterator it = itemlist.begin(); for(int32_t i = 1; it != itemlist.end(); ++it, ++i) { if (Item* item = *it) { lua_pushnumber(L, i); env->addTempItem(env, item); lua_pushnumber(L, env->addThing(item)); pushTable(L); } } return 1; } Procure continuando em luascript.cpp: //doRemoveCreature(cid[, forceLogout = true]) lua_register(m_luaState, "doRemoveCreature", LuaScriptInterface::luaDoRemoveCreature); Abaixo coloque: //getPlayersItems(cid) lua_register(m_luaState, "getPlayerItems", LuaScriptInterface::luaGetPlayerItems); Em luascript.h procure: static int32_t luaGetPlayersByAccountId(lua_State* L); Coloque abaixo: static int32_t luaGetPlayerItems(lua_State* L); Exemplo de uso: function getItemsPlayer(cid, container) local x = {} local itens = getPlayerItems(cid) for i=1, #itens do if not isContainer(itens[i]) and not container then if (itens[i]) then table.insert(x, itens[i]) end end end return x end function onSay(cid, words, param, channel) local itens = getItemsPlayer(cid, false) local str = "" for i=1, #itens do if (itens[i]) then str = getItemName(itens[i]).."\n" end doShowTextDialog(cid, 1397, str) end return true end Editado Abril 10, 2014 por caotic Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/ Compartilhar em outros sites More sharing options...
Techrlz 39 Postado Abril 9, 2014 Share Postado Abril 9, 2014 Otima função Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1635538 Compartilhar em outros sites More sharing options...
Maenilse 86 Postado Abril 9, 2014 Share Postado Abril 9, 2014 otimo code, sempre inovando em fera, essa funçao e o script q se passou sera muito util para os ot-admins ai que habitam o xt. Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1635595 Compartilhar em outros sites More sharing options...
Omega 377 Postado Abril 11, 2014 Share Postado Abril 11, 2014 Boa função! Parabéns pelo trabalho que vem fazendo. Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1635958 Compartilhar em outros sites More sharing options...
Lordbaxx 291 Postado Abril 11, 2014 Share Postado Abril 11, 2014 (editado) Poderia Exemplificar, para oq essa função serve? um exemplo? Editado Abril 11, 2014 por Lordbaxx Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1636024 Compartilhar em outros sites More sharing options...
gonorreiaswat 151 Postado Abril 11, 2014 Share Postado Abril 11, 2014 Ótima função. Mais pra frente irei adicionar ao meu Projeto. Obrigado por compartilhar estas pérolas. Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1636026 Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Abril 11, 2014 Share Postado Abril 11, 2014 Parabéns pelo avanço em C++, caotic.Bom, uma dúvida, qual a vantagem da sua função sobre a getPlayerItemById, porque, certo, a sua retorna uma tabela inteira com todos os itens do jogador, mas não vejo o uso dessa tabela além de mostrar todos os itens do jogador em um FYI ou text dialog. Então, para verificar um único item do jogador, ainda recomendo a getPlayerItemById que usa um método do game.cpp findItemOfType.Mas, volto a dizer, parabaims parabéns. Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1636067 Compartilhar em outros sites More sharing options...
gonorreiaswat 151 Postado Abril 11, 2014 Share Postado Abril 11, 2014 (editado) Garou, creio que esta função seja utilizada para saber todos os itens do player em caso de atividades ilegais do servers, como bug para conseguir mais itens por exemplo. Ou até mesmo itens VIP's que foram passados para players tradicionais, com este comando você executa uma vez e sabe todos os itens do player, e não precisa ficar pondo ID por ID e conferindo se o player possui... Basta executá-la uma única vez no player e conferir os itens que estão na lista. #Creio que seja isso. Abraços. Editado Abril 11, 2014 por Adriano Swatt Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1636068 Compartilhar em outros sites More sharing options...
caotic 393 Postado Abril 12, 2014 Autor Share Postado Abril 12, 2014 (editado) Parabéns pelo avanço em C++, caotic. Bom, uma dúvida, qual a vantagem da sua função sobre a getPlayerItemById, porque, certo, a sua retorna uma tabela inteira com todos os itens do jogador, mas não vejo o uso dessa tabela além de mostrar todos os itens do jogador em um FYI ou text dialog. Então, para verificar um único item do jogador, ainda recomendo a getPlayerItemById que usa um método do game.cpp findItemOfType. Mas, volto a dizer, parabaims parabéns. Verificar itens por atribbuto,nome etc... Usar id e um tanto quanto limitado. Editado Abril 12, 2014 por caotic Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1636341 Compartilhar em outros sites More sharing options...
Strogman 89 Postado Abril 16, 2014 Share Postado Abril 16, 2014 se entendi bem verifica atributo certo? lol talves com isso daria para fazer o depot para o icon system não? Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1637900 Compartilhar em outros sites More sharing options...
Slicer 1070 Postado Abril 16, 2014 Share Postado Abril 16, 2014 /\ na verdade pega soh os itens q o player ta usando/tao na BP dele... depot eh outra coisa xD mas da pra fazer a funçao pro depot tb bem facil ;x Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1637934 Compartilhar em outros sites More sharing options...
LuaniTa 0 Postado Abril 16, 2014 Share Postado Abril 16, 2014 Serve para procurar um item pelas descrições também? Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1637958 Compartilhar em outros sites More sharing options...
caotic 393 Postado Abril 18, 2014 Autor Share Postado Abril 18, 2014 (editado) Serve para procurar um item pelas descrições também? Sim qualquer atribbuto afinal tu esta pegando o uid. Se precisar do thing de qualquer forma e usar getThing(uid) Editado Abril 18, 2014 por caotic Link para o comentário https://xtibia.com/forum/topic/231603-getplayeritemscid/#findComment-1638535 Compartilhar em outros sites More sharing options...
Posts Recomendados