Ir para conteúdo

Pedriinz

Membro
  • Registro em

  • Última visita

  1. L3K0T reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  2. ITALOx reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  3. Serpente reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  4. Wakon reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  5. Que tipo de modificação vc precisa?
  6. Cara, são coisas complicadas de "ENSINAR" dá mais é pra dizer onde você tem que editar e o que... agora "ensinar a descobrir como etc" requer mais tempo. Essa parada do market não é através do nome do item não? Sobre a msg do battleye tem free na internet...
  7. Estranho. Tem certeza que se trata da versão atual do TFS? E que instalou tudo certinho? Não houve em nenhuma parte dúvida sua? Tente novamente se possivel, do 0. Caso persista o erro, me manda um pvt com algum contato seu que eu vejo se consigo auxiliar. Ahh sua tfs contém modificações sua?
  8. d0gw4r reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  9. d0gw4r reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  10. Pedriinz reagiu a uma resposta no tópico: [TFS 1.2] Função getCorpseOwner em Lua
  11. KotZletY reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  12. Pedro. reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  13. Logo logo eu lanço o modal dele... Tudo é possível na programação mas não tenho planos pra fazer algo como tal. Todavia, pretendo desenvolver algo similar... criar um "espaço" apenas para loots removidos do auto-loot. Como por exemplo uma bag dentro da store. Nesse espaço não daria pra mover items manualmente, apenas o auto-loot poderia mover pra lá e contaria CAP do jogador. Talvez eu adicione isso algum tempo...
  14. Faz sentido, porém é muito simples de registrar em xml, acho que até quem não sabe nada de programação conseguiria... ou não. Mas logo eu edito o post com a talkaction "antiga". Valeu pelo feedback.
  15. Pedriinz reagiu a uma resposta no tópico: Auto Loot Sytem for TFS 1.3 + revscripts
  16. Yo! Acabei de realizar algumas atualizações no código. As mudanças foram: Junção de todos os scripts LUA em um só, resultando em um único comando para administrar o sistema de autoloot. Exemplo: !autoloot add, boots of haste !autoloot remove, boots of haste !autoloot list !autoloot Também adicionei algumas verificações no script para que o mesmo não seja executado caso o personagem não tenha nenhum item adicionado a lista de autoloot. (optimização). Verificação de capacidade também está aqui agora, caso o personagem não tenha mais que 100 de cap uma mensagem é retornada para o player informando que não foi possível saquear aquele loot devida a mesma. (No futuro talvez eu deixe isso configurável pelo config.lua). Cheers
  17. Tente usar o meu auto loot e me diga se o erro acontece, caso aconteça... veremos isso! Se você prefere utilizar o dele, então sugiro que procure o thread do sistema dele e peça ajuda lá! Outra opção é você abrir pedido de ajuda na seção de suporte. Lembre-se, não estou sendo "rude" com você... apenas não dou suporte sobre códigos de outros.
  18. Fiz esse código ontem "rápido" focando em outras partes dele como estudo... mas ainda hoje eu faço a mudança dos arquivos talk. E sobre o modal, talvez hoje também já saia algo... basta apenas que eu DURMA um pouco G_G
  19. Depois de milhões de anos sem programar porcaria nenhuma... Eu desenvolvi este sistema como um método de estudo. (C++) Este sistema foi inspirado no Auto Loot System por @psychonaut. (OTland) Criei o mesmo na versão mais recente do tfs. Auto Loot System for TFS 1.3 Como funciona? Simples, quando você mata um monstro e abre o corpo (você precisa clicar no corpo), os itens vão para o seu personagem. Instalando em actions.cpp, encontre: if (corpseOwner != 0 && !player->canOpenCorpse(corpseOwner)) { return RETURNVALUE_YOUARENOTTHEOWNER; } e mude isso para: if (corpseOwner != 0 && !player->canOpenCorpse(corpseOwner)) { return RETURNVALUE_YOUARENOTTHEOWNER; } else { if (player->canOpenCorpse(corpseOwner) && player->autoLootList.size() != 0) { if (player->getCapacity() > 100 * 100) { //Minimum of Capacity for autoloot works. (100 CAP) for (Item* item : container->getItemList()) { if (player->getItemFromAutoLoot(item->getID())) { std::ostringstream msgAutoLoot; msgAutoLoot << "You looted a " << item->getItemCount() << "x " << item->getName() << "."; g_game.internalMoveItem(container, player, CONST_SLOT_WHEREEVER, item, item->getItemCount(), nullptr); player->sendTextMessage(MESSAGE_INFO_DESCR, msgAutoLoot.str()); } } } else { player->sendTextMessage(MESSAGE_INFO_DESCR, "Sorry, you don't have enough capacity to use auto loot, so it has been disabled. (100+ capacity is required)"); } } } em player.h, abaixo de: std::unordered_set<uint32_t> VIPList; adicione isso: std::set<uint32_t> autoLootList; ainda em player.h encontre: bool hasLearnedInstantSpell(const std::string& spellName) const; adicione em baixo: void addItemToAutoLoot(uint16_t itemId); void removeItemFromAutoLoot(uint16_t itemId); bool getItemFromAutoLoot(uint16_t itemId); em player.cpp no final do arquivo, adicione: void Player::addItemToAutoLoot(uint16_t itemId) { autoLootList.insert(itemId); } void Player::removeItemFromAutoLoot(uint16_t itemId) { autoLootList.erase(itemId); } bool Player::getItemFromAutoLoot(const uint16_t itemId) { return autoLootList.find(itemId) != autoLootList.end(); } em luascript.cpp encontre: registerMethod("Player", "getFightMode", LuaScriptInterface::luaPlayerGetFightMode); e adicione em baixo: registerMethod("Player", "addItemToAutoLoot", LuaScriptInterface::luaPlayerAddItemToAutoLoot); registerMethod("Player", "removeItemFromAutoLoot", LuaScriptInterface::luaPlayerRemoveItemFromAutoLoot); registerMethod("Player", "getItemFromAutoLoot", LuaScriptInterface::luaPlayerGetItemFromAutoLoot); registerMethod("Player", "getAutoLootList", LuaScriptInterface::luaPlayerGetAutoLootList); ainda em luascript.cpp encontre essa função: int LuaScriptInterface::luaPlayerGetFightMode(lua_State* L) { // player:getFightMode() Player* player = getUserdata<Player>(L, 1); if (player) { lua_pushnumber(L, player->fightMode); } else { lua_pushnil(L); } return 1; } abaixo dela, adicione: int LuaScriptInterface::luaPlayerAddItemToAutoLoot(lua_State* L) { // player:addItemToAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } player->addItemToAutoLoot(itemId); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerRemoveItemFromAutoLoot(lua_State* L) { // player:removeItemFromAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } player->removeItemFromAutoLoot(itemId); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerGetItemFromAutoLoot(lua_State* L) { // player:getItemFromAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } if (player->getItemFromAutoLoot(itemId)) { pushBoolean(L, true); } else { pushBoolean(L, false); } return 1; } int LuaScriptInterface::luaPlayerGetAutoLootList(lua_State* L) { // player:getAutoLootList() Player* player = getUserdata<Player>(L, 1); if (player) { std::set<uint32_t> value = player->autoLootList; if (value.size() == 0) { lua_pushnil(L); return 1; } int index = 0; lua_createtable(L, value.size(), 0); for(auto i : value) { lua_pushnumber(L, i); lua_rawseti(L, -2, ++index); } } else { lua_pushnil(L); } return 1; } em luascript.h encontre: static int luaPlayerGetFightMode(lua_State* L); adicione a baixo: static int luaPlayerAddItemToAutoLoot(lua_State* L); static int luaPlayerRemoveItemFromAutoLoot(lua_State* L); static int luaPlayerGetItemFromAutoLoot(lua_State* L); static int luaPlayerGetAutoLootList(lua_State* L); em iologindata.cpp encontre: //load storage map query.str(std::string()); query << "SELECT `key`, `value` FROM `player_storage` WHERE `player_id` = " << player->getGUID(); if ((result = db.storeQuery(query.str()))) { do { player->addStorageValue(result->getNumber<uint32_t>("key"), result->getNumber<int32_t>("value"), true); } while (result->next()); } e adicione em baixo: query.str(std::string()); query << "SELECT `autoloot_list` FROM `player_autoloot` WHERE `player_id` = " << player->getGUID(); if ((result = db.storeQuery(query.str()))) { unsigned long lootlistSize; const char* autolootlist = result->getStream("autoloot_list", lootlistSize); PropStream propStreamList; propStreamList.init(autolootlist, lootlistSize); int16_t value; int16_t item = propStreamList.read<int16_t>(value); while (item) { player->addItemToAutoLoot(value); item = propStreamList.read<int16_t>(value); } } acima de: //save inbox items adicione: query.str(std::string()); query << "DELETE FROM `player_autoloot` WHERE `player_id` = " << player->getGUID(); if (!db.executeQuery(query.str())) { return false; } PropWriteStream propWriteStreamAutoLoot; for (auto i : player->autoLootList) { propWriteStreamAutoLoot.write<uint16_t>(i); } size_t lootlistSize; const char* autolootlist = propWriteStreamAutoLoot.getStream(lootlistSize); query.str(std::string()); DBInsert autolootQuery("INSERT INTO `player_autoloot` (`player_id`, `autoloot_list`) VALUES "); query << player->getGUID() << ',' << db.escapeBlob(autolootlist, lootlistSize); if (!autolootQuery.addRow(query)) { return false; } if (!autolootQuery.execute()) { return false; } em sua database, execute esta query CREATE TABLE player_autoloot ( id int NOT NULL AUTO_INCREMENT, player_id int NOT NULL, autoloot_list blob, PRIMARY KEY (id) ); agora vá em data/scripts/talkactions e crie esse arquivo LUA autoloot.lua local talk = TalkAction("!autoloot") function talk.onSay(player, words, param) local i = player:getAutoLootList() local cache = "Check your loot list: " local split = param:split(",") local action = split[1] if param == "list" then if i then for _, item in ipairs(i) do cache = cache .. (ItemType(item)):getName() .. ", " end else player:sendTextMessage(MESSAGE_INFO_DESCR, "Your list is empty! Add some item and try again.") return false end player:sendTextMessage(MESSAGE_INFO_DESCR, cache:sub(1, -3)) return false end if action == "add" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getName() == '' then player:sendCancelMessage("There is no item with that id or name.") return false end end if player:getItemFromAutoLoot(itemType:getId()) then player:sendCancelMessage("You're already autolooting this item.") return false end player:addItemToAutoLoot(itemType:getId()) player:sendTextMessage(MESSAGE_INFO_DESCR, "You're now auto looting " .. itemType:getName()) return false elseif action == "remove" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getName() == '' then player:sendCancelMessage("There is no item with that id or name.") return false end end if player:getItemFromAutoLoot(itemType:getId()) then player:removeItemFromAutoLoot(itemType:getId()) player:sendTextMessage(MESSAGE_INFO_DESCR, "You removed the " .. itemType:getName() .. " from your loot list.") else player:sendCancelMessage("This item does not exist in your loot list.") end return false end player:sendTextMessage(MESSAGE_EVENT_ORANGE, "Auto Loot commands (items are automatically moved to your bp if you open monster corpse):"..'\n'.."!addloot add, nameItem - add item to auto loot by name"..'\n'.."!autoloot remove, itemName - remove item from auto loot by name"..'\n'.."!autoloot list - list your current auto loot items") return false end talk:separator(" ") talk:register() É isso, espero que gostem do sisteminha Se você encontrar algum bug, deixe-me saber. Falta fazer: Optimizar a mensagem de loot. Adicionar ModalWindow. Cheers~
  20. Não, apenas em versões 1.0+. Sim, mas teria que modificar algumas coisas. Sim existe.
  21. Pedriinz postou uma resposta no tópico em Suporte & Pedidos
    Não dá pra afirmar isso. Já vi gente que upa na mão ganhar muito mais EXP do que um bot. E já vi bots que não ganham nada de exp por que estão caçando coisas ruims só pelo loot.
  22. Pedriinz postou uma resposta no tópico em Suporte & Pedidos
    Eu sinceramente nem entendi o que quis dizer para o 'anti bot'.
  23. Pedriinz postou uma resposta no tópico em Suporte & Pedidos
    Posso adicionar essa opção como método de verificação a escolha do dono do servidor também. Em breve vou dar update no código. Obrigado pela sugestão<3
  24. Sim, tb aconselho algo em volta de 60~120 segundos. Vou adicionar uma opção pro o dono escolher se após errar a pergunta uma vez, o jogador já ser penalizado... Para que nenhum sem futuro fique criando loop's pra responder automaticamente as verificações

Informação Importante

Confirmação de Termo