Tony Araujo 282 Postado Abril 22, 2020 Share Postado Abril 22, 2020 (editado) [C++] getContainerItems(containerUID) testado: TFS - 0.3.6 (porém acredito que funcione em outros) autor: Tony Araújo (OrochiElf) Fala galera, de boas ? Quanto tempo né? xD Hoje, vim por estas bandas para compartilhar um code que talvez ajude bastante gente, criei ela pois senti necessidade de trabalhar com items que estariam dentro de um certo "container", no caso backpacks, caixas, e qualquer outro tipo de container. Ela consiste em retornar uma tabela com todos os items que existir dentro daquele container, seja dentro de outros containers e afim. Sua aplicação é bem básica, no final deixarei um exemplo. Sem mais, vamos a instalação: Vá em luascript.h, e procure pela linha: static int32_t luaGetContainerItem(lua_State* L); E abaixo você adiciona a linha: static int32_t luaGetContainerItems(lua_State* L); Agora vá em luascript.cpp, procure pela linha: lua_register(m_luaState, "getContainerItem", LuaScriptInterface::luaGetContainerItem); Logo abaixo, adicione: //getContainerItems(uid) lua_register(m_luaState, "getContainerItems", LuaScriptInterface::luaGetContainerItems); Continuando no luascript.cpp, você procura pela função: int32_t LuaScriptInterface::luaGetContainerItem(lua_State* L) E abaixo desta função, você adiciona esta: int32_t LuaScriptInterface::luaGetContainerItems(lua_State* L) { //getContainerItems(uid) Item* item = NULL; ScriptEnviroment* env = getEnv(); if(Container* container = env->getContainerByUID(popNumber(L))) { uint32_t i = 1; lua_newtable(L); Item* tmpItem = NULL; for(ContainerIterator it = container->begin(); it != container->end(); ++it) { if(tmpItem = (*it)->getItem()) { lua_pushnumber(L, i); pushThing(L, tmpItem, env->addThing(tmpItem)); pushTable(L); i++; } } } else { errorEx(getError(LUA_ERROR_CONTAINER_NOT_FOUND)); pushThing(L, NULL, 0); } return 1; } Bom, feito isso, apenas compilar novamente suas sources. Façam bom proveito xD Aconselho que usem o build all, para evitar qualquer tipo de problema de anexamento do código Abaixo, um sistema de autoloot, como exemplo de uso da função. function onUse(cid, item, fromPosition, itemEx, toPosition) if getItemAttribute(item.uid, "corpseowner") ~= cid then return doPlayerSendCancel(cid, "You're not the owner.") end if #getContainerItems(item.uid) > 0 then for _, it in ipairs(getContainerItems(item.uid)) do local playerItem = getPlayerItemById(cid, true, it.itemid) if playerItem.uid > 0 then if (playerItem.type + it.type) > 100 then doPlayerAddItem(cid, it.itemid, (playerItem.type + it.type) - 100) doTransformItem(playerItem.uid, it.itemid, 100) else doTransformItem(playerItem.uid, it.itemid, playerItem.type + it.type) end else doPlayerAddItem(cid, it.itemid, it.type) end doRemoveItem(it.uid) end return true end return false end Editado Abril 22, 2020 por Tony Araujo jeanferson, LeoTK, andrefelphes e 6 outros reagiu a isso 6 3 Link para o comentário Compartilhar em outros sites More sharing options...
layontopers 0 Postado Abril 22, 2020 Share Postado Abril 22, 2020 6 minutos atrás, Tony Araujo disse: [C++] getContainerItems(containerUID) testado: TFS - 0.3.6 (porém acredito que funcione em outros) autor: Tony Araújo (OrochiElf) Fala galera, de boas ? Quanto tempo né? xD Hoje, vim por estas bandas para compartilhar um code que talvez ajude bastante gente, criei ela pois senti necessidade de trabalhar com items que estariam dentro de um certo "container", no caso backpacks, caixas, e qualquer outro tipo de container. Ela consiste em retornar uma tabela com todos os items que existir dentro daquele container, seja dentro de outros containers e afim. Sua aplicação é bem básica, no final deixarei um exemplo. Sem mais, vamos a instalação: Vá em luascript.h, e procure pela linha: static int32_t luaGetContainerItem(lua_State* L); E abaixo você adiciona a linha: static int32_t luaGetContainerItems(lua_State* L); Agora vá em luascript.cpp, procure pela linha: lua_register(m_luaState, "getContainerItem", LuaScriptInterface::luaGetContainerItem); Logo abaixo, adicione: //getContainerItems(uid) lua_register(m_luaState, "getContainerItems", LuaScriptInterface::luaGetContainerItems); Continuando no luascript.cpp, você procura pela função: int32_t LuaScriptInterface::luaGetContainerItem(lua_State* L) E abaixo desta função, você adiciona esta: Ocultar conteúdo int32_t LuaScriptInterface::luaGetContainerItems(lua_State* L) { //getContainerItems(uid) Item* item = NULL; ScriptEnviroment* env = getEnv(); if(Container* container = env->getContainerByUID(popNumber(L))) { uint32_t i = 1; lua_newtable(L); Item* tmpItem = NULL; for(ContainerIterator it = container->begin(); it != container->end(); ++it) { if(tmpItem = (*it)->getItem()) { lua_pushnumber(L, i); pushThing(L, tmpItem, env->addThing(tmpItem)); pushTable(L); i++; } } } else { errorEx(getError(LUA_ERROR_CONTAINER_NOT_FOUND)); pushThing(L, NULL, 0); } return 1; } Bom, feito isso, apenas compilar novamente suas sources. Façam bom proveito xD Aconselho que usem o build all, para evitar qualquer tipo de problema de anexamento do código Abaixo, um sistema de autoloot, como exemplo de uso da função. Mostrar conteúdo oculto function onUse(cid, item, fromPosition, itemEx, toPosition) if getItemAttribute(item.uid, "corpseowner") ~= cid then return doPlayerSendCancel(cid, "You're not the owner.") end if #getContainerItems(item.uid) > 0 then for _, it in ipairs(getContainerItems(item.uid)) do local playerItem = getPlayerItemById(cid, true, it.itemid) if playerItem.uid > 0 then if (playerItem.type + it.type) > 100 then doPlayerAddItem(cid, it.itemid, (playerItem.type + it.type) - 100) doTransformItem(playerItem.uid, it.itemid, 100) else doTransformItem(playerItem.uid, it.itemid, playerItem.type + it.type) end else doPlayerAddItem(cid, it.itemid, it.type) end doRemoveItem(it.uid) end return true end return false end god Link para o comentário Compartilhar em outros sites More sharing options...
Riakisuk1 0 Postado Abril 22, 2020 Share Postado Abril 22, 2020 11 minutos atrás, Tony Araujo disse: [C++] getContainerItems(containerUID) testado: TFS - 0.3.6 (porém acredito que funcione em outros) autor: Tony Araújo (OrochiElf) Fala galera, de boas ? Quanto tempo né? xD Hoje, vim por estas bandas para compartilhar um code que talvez ajude bastante gente, criei ela pois senti necessidade de trabalhar com items que estariam dentro de um certo "container", no caso backpacks, caixas, e qualquer outro tipo de container. Ela consiste em retornar uma tabela com todos os items que existir dentro daquele container, seja dentro de outros containers e afim. Sua aplicação é bem básica, no final deixarei um exemplo. Sem mais, vamos a instalação: Vá em luascript.h, e procure pela linha: static int32_t luaGetContainerItem(lua_State* L); E abaixo você adiciona a linha: static int32_t luaGetContainerItems(lua_State* L); Agora vá em luascript.cpp, procure pela linha: lua_register(m_luaState, "getContainerItem", LuaScriptInterface::luaGetContainerItem); Logo abaixo, adicione: //getContainerItems(uid) lua_register(m_luaState, "getContainerItems", LuaScriptInterface::luaGetContainerItems); Continuando no luascript.cpp, você procura pela função: int32_t LuaScriptInterface::luaGetContainerItem(lua_State* L) E abaixo desta função, você adiciona esta: Mostrar conteúdo oculto int32_t LuaScriptInterface::luaGetContainerItems(lua_State* L) { //getContainerItems(uid) Item* item = NULL; ScriptEnviroment* env = getEnv(); if(Container* container = env->getContainerByUID(popNumber(L))) { uint32_t i = 1; lua_newtable(L); Item* tmpItem = NULL; for(ContainerIterator it = container->begin(); it != container->end(); ++it) { if(tmpItem = (*it)->getItem()) { lua_pushnumber(L, i); pushThing(L, tmpItem, env->addThing(tmpItem)); pushTable(L); i++; } } } else { errorEx(getError(LUA_ERROR_CONTAINER_NOT_FOUND)); pushThing(L, NULL, 0); } return 1; } Bom, feito isso, apenas compilar novamente suas sources. Façam bom proveito xD Aconselho que usem o build all, para evitar qualquer tipo de problema de anexamento do código Abaixo, um sistema de autoloot, como exemplo de uso da função. Mostrar conteúdo oculto function onUse(cid, item, fromPosition, itemEx, toPosition) if getItemAttribute(item.uid, "corpseowner") ~= cid then return doPlayerSendCancel(cid, "You're not the owner.") end if #getContainerItems(item.uid) > 0 then for _, it in ipairs(getContainerItems(item.uid)) do local playerItem = getPlayerItemById(cid, true, it.itemid) if playerItem.uid > 0 then if (playerItem.type + it.type) > 100 then doPlayerAddItem(cid, it.itemid, (playerItem.type + it.type) - 100) doTransformItem(playerItem.uid, it.itemid, 100) else doTransformItem(playerItem.uid, it.itemid, playerItem.type + it.type) end else doPlayerAddItem(cid, it.itemid, it.type) end doRemoveItem(it.uid) end return true end return false end Já deixei o rep :) Link para o comentário Compartilhar em outros sites More sharing options...
andrefelphes 2 Postado Abril 22, 2020 Share Postado Abril 22, 2020 Brabo, ajudou demais ! Link para o comentário Compartilhar em outros sites More sharing options...
Ayron5 40 Postado Abril 22, 2020 Share Postado Abril 22, 2020 53 minutos atrás, Tony Araujo disse: [C++] getContainerItems(containerUID) testado: TFS - 0.3.6 (porém acredito que funcione em outros) autor: Tony Araújo (OrochiElf) Fala galera, de boas ? Quanto tempo né? xD Hoje, vim por estas bandas para compartilhar um code que talvez ajude bastante gente, criei ela pois senti necessidade de trabalhar com items que estariam dentro de um certo "container", no caso backpacks, caixas, e qualquer outro tipo de container. Ela consiste em retornar uma tabela com todos os items que existir dentro daquele container, seja dentro de outros containers e afim. Sua aplicação é bem básica, no final deixarei um exemplo. Sem mais, vamos a instalação: Vá em luascript.h, e procure pela linha: static int32_t luaGetContainerItem(lua_State* L); E abaixo você adiciona a linha: static int32_t luaGetContainerItems(lua_State* L); Agora vá em luascript.cpp, procure pela linha: lua_register(m_luaState, "getContainerItem", LuaScriptInterface::luaGetContainerItem); Logo abaixo, adicione: //getContainerItems(uid) lua_register(m_luaState, "getContainerItems", LuaScriptInterface::luaGetContainerItems); Continuando no luascript.cpp, você procura pela função: int32_t LuaScriptInterface::luaGetContainerItem(lua_State* L) E abaixo desta função, você adiciona esta: Mostrar conteúdo oculto int32_t LuaScriptInterface::luaGetContainerItems(lua_State* L) { //getContainerItems(uid) Item* item = NULL; ScriptEnviroment* env = getEnv(); if(Container* container = env->getContainerByUID(popNumber(L))) { uint32_t i = 1; lua_newtable(L); Item* tmpItem = NULL; for(ContainerIterator it = container->begin(); it != container->end(); ++it) { if(tmpItem = (*it)->getItem()) { lua_pushnumber(L, i); pushThing(L, tmpItem, env->addThing(tmpItem)); pushTable(L); i++; } } } else { errorEx(getError(LUA_ERROR_CONTAINER_NOT_FOUND)); pushThing(L, NULL, 0); } return 1; } Bom, feito isso, apenas compilar novamente suas sources. Façam bom proveito xD Aconselho que usem o build all, para evitar qualquer tipo de problema de anexamento do código Abaixo, um sistema de autoloot, como exemplo de uso da função. Ocultar conteúdo function onUse(cid, item, fromPosition, itemEx, toPosition) if getItemAttribute(item.uid, "corpseowner") ~= cid then return doPlayerSendCancel(cid, "You're not the owner.") end if #getContainerItems(item.uid) > 0 then for _, it in ipairs(getContainerItems(item.uid)) do local playerItem = getPlayerItemById(cid, true, it.itemid) if playerItem.uid > 0 then if (playerItem.type + it.type) > 100 then doPlayerAddItem(cid, it.itemid, (playerItem.type + it.type) - 100) doTransformItem(playerItem.uid, it.itemid, 100) else doTransformItem(playerItem.uid, it.itemid, playerItem.type + it.type) end else doPlayerAddItem(cid, it.itemid, it.type) end doRemoveItem(it.uid) end return true end return false end Nice! rep. Link para o comentário Compartilhar em outros sites More sharing options...
Tony Araujo 282 Postado Abril 24, 2020 Autor Share Postado Abril 24, 2020 Valeu galera xD Caso tenham alguma outra função que sintam necessidade e tenham dificuldades, pode mandar as sugestões aí, estarei sempre olhando e trazendo novas funções Tamujunto! Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados