getPlayerItems(cid)

caotic
Por caotic
em Linguagens de Programação

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

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

 

 

 

Techrlz

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 03/03/14Posts: 239

Otima função :D

 

 

Maenilse

q manero em fera
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/09/12Posts: 711Char no Tibia: noé

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.

Lordbaxx

Imperium Project
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 01/07/13Posts: 521

Poderia Exemplificar, para oq essa função serve? um exemplo?

LOGO OFICIAL.png

gonorreiaswat

I'm AdrianøØ SwaTT
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 16/09/07Posts: 600Gênero: MasculinoChar no Tibia: NãoJogoMais

Ótima função.

Mais pra frente irei adicionar ao meu Projeto.

 

Obrigado por compartilhar estas pérolas.

Atenciosamente,
Adriano Swatt'

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

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.

gonorreiaswat

I'm AdrianøØ SwaTT
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 16/09/07Posts: 600Gênero: MasculinoChar no Tibia: NãoJogoMais

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.

Atenciosamente,
Adriano Swatt'

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

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.

Strogman

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 04/11/12Posts: 464Gênero: MasculinoChar no Tibia: Lysty Of Death

se entendi bem verifica atributo certo? lol talves com isso daria para fazer o depot para o icon system não?

 

                                 logo_full_1600.png.f8d0c5d8ba71c660bad630b327c3e64d.png

                                                              htps://www.facebook.com/PokemonOnlineSVKE

                                                                                                                       PokeSvke

Slicer

Insanity
avatar
Príncipe
Príncipe

INFOS

Grupo: PríncipeRegistrado: 19/08/10Posts: 4014Gênero: Masculino

/\ 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

"Só a beira do abismo que os seres humanos acham forças para mudar."... E isso me da nojo... ¬¬

"Insanity is doing the exact... same fucking thing... over and over again expecting... shit to change... That. Is. Crazy." -Vass/Einstein

 

LuaniTa

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/08/12Posts: 31

Serve para procurar um item pelas descrições também?

Você é apenas uma gota em um oceano infinito..

E o que é o oceano se não uma infinidade de gotas?

A VIAGEM

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

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)