Ir para conteúdo
  • Cadastre-se

Shiuns

Membro
  • Total de itens

    27
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Shiuns deu reputação a Vodkart em Lottery system com limitação a trainers   
    troca a função la do sistema por essa:
     
     
    local function getOnlineParticipants() local players = {} for _, pid in pairs(getPlayersOnline()) do if getPlayerAccess(pid) <= 2 and getPlayerStorageValue(pid, 281821) <= os.time() and getPlayerStorageValue(pid, 281822) <= os.time() then table.insert(players, pid) end end if #players > 0 then return players end return false end  
     
    e no creaturescript:
     
     
    function onLogin(cid) registerCreatureEvent(cid, "LoterryTreiner") setPlayerStorageValue(cid, 281822, 0) return true end function onCombat(cid, target) local treiners = {"Trainer", "Training Monk"} -- nome dos trainera do seu ot if isPlayer(cid) and isMonster(target) and isInArray(treiners, getCreatureName(target)) then setPlayerStorageValue(cid, 281822, os.time()+15) end return true end  
  2. Gostei
    Shiuns deu reputação a Sun em Voce ja esta sob efeito da potion(Exp Potion)   
    @Orientalz
  3. Gostei
    Shiuns deu reputação a Vodkart em Movements ativar piso   
    é que ele faltou colocar o config.idpiso..
     
     
     
    local config = { wall = {id = 6973, pos = {x = 228, y = 76, z = 7}}, idpiso = 406, transidpiso = 405, time = 1 } function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end local ret = getTileItemById(position, config.idpiso).uid if ret == 0 then return true end local var = getTileItemById(config.wall.pos, config.wall.id).uid if var > 0 then doSendMagicEffect(config.wall.pos, CONST_ME_MAGIC_RED) doRemoveItem(var) end doTransformItem(item.uid, config.transidpiso) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Wall is removed.") addEvent(function() local x = getTileItemById(config.wall.pos, config.wall.id).uid if x == 0 then doCreateItem(config.wall.id, 1, config.wall.pos) end doTransformItem(getTileItemById(position, config.transidpiso).uid, config.idpiso) end, config.time*60*1000) return true end  
  4. Obrigado
    Shiuns recebeu reputação de Vitorelias em Skill Limite   
    SKILL_CLUB = "skill_club" SKILL_DISTANCE = "skill_dist" SKILL_SHIELD = "skill_shielding" SKILL_MAGLEVEL = "maglevel" SKILL_SWORD = "skill_sword" SKILL_AXE = "skill_axe" local storage = 45611 local coinID = 9971 -- moeda para comprar skills local runas = { ["sd"] = {bag = 5926, item= 2268, bag_quant = 2, price= 50, msg= "Parabéns você comprou 4k de SD com sucesso."}, ["uh"] = {bag = 2002, item= 2273, bag_quant = 3, price= 30, msg= "Parabéns você comprou 6k de UH com sucesso."}, ["explo"] = {bag = 2001, item= 2313, bag_quant = 3, price= 10, msg= "Parabéns você comprou 6k de Explosion com sucesso."} } local itens = { ["super divine axe"] = {item = 8926, price= 60, msg= "Você comprou um super divine axe com sucesso."}, ["super divine staff"] = {item = 8922, price= 60, msg= "Você comprou um super divine staff com sucesso."}, ["super divine club"] = {item = 7423, price= 60, msg= "Você comprou um super divine club com sucesso."}, ["super divine sword"] = {item = 7403, price= 60, msg= "Você comprou um super divine sword com sucesso."}, ["super divine crossbow"] = {item = 8851, price= 60, msg= "Você comprou um super divine crossbow com sucesso."}, ["livro nivel 6"] = {item = 8921, price= 60, msg= "Você comprou um livro nivel 6 com sucesso."} } local vip = { ["vip10"] = {days= 10, price= 5}, ["vip30"] = {ays= 30, price= 10} } local skills = { ["magiclevel"] = {vocations = {1, 5, 2, 6, 11, 12}, voc_msg= "Somente Sorcerers, Druids e Infernalists podem comprar magic level.", lim = 200, lim_msg = "Você não pode ter magic level acima de 200.", price= 3, incre = 1, skill = SKILL_MAGLEVEL}, ["skillclub"] = {vocations = {9, 10}, voc_msg= "Somente Drunous podem comprar skill de club.", lim = 350, price= 1, incre = 1, skill = SKILL_CLUB}, ["skillsword"] = {vocations = {4, 8}, voc_msg= "Somente Knights podem comprar skill de sword.", lim = 350, price= 1, incre = 1, skill = SKILL_SWORD}, ["skillaxe"] = {vocations = {4, 8}, voc_msg= "Somente Knights podem comprar skill de axe.", lim = 350, price= 1, incre = 1, skill = SKILL_AXE}, ["skilldistance"] = {vocations = {3, 7}, voc_msg= "Somente Paladins podem comprar skill de distance.", lim = 350, price= 1, incre = 1, skill = SKILL_DISTANCE}, ["skillshielding"] = {vocations = {3, 7, 4, 8, 9, 10}, voc_msg= "Somente Paladins, Knights e Drunous podem comprar skill de shield.", lim = 350, lim_msg = "Você não pode ter skill shielding acima de 350.", price= 1, incre = 1, skill = SKILL_SHIELD}, } local frags = { ["removerfrag"] = {t= 6, price= 10} } function onSay(player, words, param) local player = Player(player) local pid = player:getGuid() local tile = player:getTile() local param = param:lower() if not tile:hasFlag(TILESTATE_PROTECTIONZONE) then player:sendCancelMessage("Você precisa está em área protegida para utilizar este comando.") return true end if player:getStorageValue(storage) >= os.time() then player:sendCancelMessage("Por medidas de segurança você só pode utilizar este comando em " .. player:getStorageValue(storage)-os.time() .. " segundos.") return true end if param == "" then player:popupFYI("Para comprar digite !comprar (nome do item)\nOpcoes:\nsd = 4000 em SD por 50 barras.\nuh = 6000 em UH por 40 barras.\nexplo = 6000 em explosion por 10 barras.\nvip10 = 10 dias de vip por 5 barras.\nvip30 = 30 dias de vip por 10 barras.\ndivine staff = divine staff por 30 barras.\ndivine axe = divine axe por 30 barras.\nlivro nivel 6 = livro nivel 6 por 60 barras.\ndivine club = divine club por 30 barras.\ndivine sword = divine sword por 30 barras.\ndivine crossbow = divine crossbow por 30 barras.\nlivro nivel 5 = livro nivel 5 por 30 barras.\nsuper divine axe = super divine axe por 60 barras.\nsuper divine club = super divine club por 60 barras.\nsuper divine sword = super divine sword por 60 barras.\nsuper divine staff = super divine staff por 60 barras.\nsuper divine crossbow = super divine crossbow por 60 barras.\nskillclub = adiciona 1 skill club por 1 barras.\nskillsword = adiciona 1 skill sword por 1 barras.\nskillaxe = adiciona 1 skill axe por 1 barras.\nskilldistance = adiciona 1 skill distance por 1 barras.\nskillshielding = adiciona 1 skill shielding por 1 barras.\nmagiclevel = adiciona 1 magic level por 3 barras.\nmagiclevel5 = adiciona 5 magic level por 15 barras.\nskillclub10 = adiciona 10 skills club por 10 barras.\nskillsword10 = adiciona 10 skills sword por 10 barras.\nskillaxe10 = adiciona 10 skills axe por 10 barras.\nskilldistance10 = adiciona 10 skill distance por 10 barras.\nskillshielding10 = adiciona 10 skill shielding por 10 barras.\nremoverfrag = remove todos frags por 100k.\nO Item desejado não existe em nosso stock. Veja a cima os detalhes dos items disponíveis.") return true end if runas[param] then local v = runas[param] if player:getItemCount(coinID) >= v.price then local item_quant = (v.bag_quant * 2000)/100 for x = 1, v.bag_quant do local bag = player:addItem(v.bag, 1) for i = 1, item_quant do bag:addItem(v.item, 100) end end player:removeItem(coinID, v.price) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, v.msg) player:setStorageValue(storage, os.time()+1) else player:sendCancelMessage("Você não possui a quantidade necessária para comprar.") end return true end if itens[param] then local v = itens[param] if player:getItemCount(coinID) >= v.price then item = player:addItem(v.item, 1) item:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, "Este item pode ser adquirido através do shopping. Adquirido dia " .. os.date("%d/%m/%Y - %X") .." por ".. player:getName() ..". Serial: ".. player:getGuid() ..".") player:removeItem(coinID, v.price) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, v.msg) player:setStorageValue(storage, os.time()+1) else player:sendCancelMessage("Você não possui a quantidade necessária para comprar.") end return true end if vip[param] then local v = vip[param] if player:getItemCount(coinID) >= v.price then player:addPremiumDays(v.days) player:removeItem(coinID, v.price) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Parabéns você comprou " .. v.days .. " dias de vip com sucesso.") player:setStorageValue(storage, os.time()+1) else player:sendCancelMessage("Você não possui a quantidade necessária para comprar.") end return true end if skills[param] then local v = skills[param] if param == "magiclevel" and player:getBaseMagicLevel() >= v.lim or (player:getBaseMagicLevel() + v.incre ) >= v.lim then player:sendCancelMessage(v.lim_msg) return true elseif player:getSkillLevel(v.skill) >= v.lim or (player:getSkillLevel(v.skill) + v.incre ) >= v.lim then player:sendCancelMessage(v.lim_msg) return true end if not isInArray(v.vocations, player:getVocation():getId()) then player:sendCancelMessage(v.voc_msg) return true end if player:getItemCount(coinID) >= v.price then player:removeItem(coinID, v.price) player:setStorageValue(storage, os.time()+1) player:remove() db.query("UPDATE players SET ".. v.skill .. " = " .. v.skill .. " + " .. v.incre .. " WHERE id = ".. pid) else player:sendCancelMessage("Você não possui a quantidade necessária para comprar.") end return true end if frags[param] then local v = frags[param] if player:getItemCount(2160) >= v.price then player:removeItem(2160, v.price) player:setSkull(SKULL_NONE) player:setSkullTime(0) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your skull and frags has been removed!") player:setStorageValue(storage, os.time()+1) db.query("UPDATE player_deaths SET unjustified = 0 WHERE unjustified = 1 AND killed_by = " .. db.escapeString(player:getName())) else player:sendCancelMessage("Você não possui a quantidade necessária para comprar.") end return true end return true end  
  5. Curtir
    Shiuns deu reputação a LeoTK em Ajuda - Action que vende itens da BP   
    Este tópico foi movido para a seção de Suporte Otserv.
    @vine96 Testa ai

     
     
  6. Gostei
    Shiuns recebeu reputação de Rogeriok em (Resolvido)Script Inteligente de Invasão para Evento   
    só usar os.date assim:
     
    if tonumber(os.date("%d")) == 01 or tonumber(os.date("%d")) == 15 then ... end  
  7. Gostei
    Shiuns recebeu reputação de Rogeriok em (Resolvido)Remover o item na backpack   
    adc na lib essas funções:
     
    function getContainerItems(container, array, haveCap) array = array or {} haveCap = haveCap or false if not isContainer(container.uid) or getContainerSize(container.uid) == 0 then array[#array +1] = container else local size = getContainerSize(container.uid) haveCap = (getContainerCap(container.uid) -size) > 0 for slot = 0, (size -1) do local item = getContainerItem(container.uid, slot) if item.itemid > 1 then getContainerItems(item, array, haveCap) end end end return #array >= 1 and array, haveCap end function getContainerItemsById(container, itemid) local founds = {} local items = not container.uid and container or getContainerItems(container) for index, item in pairs(items) do if item.itemid == itemid then founds[#founds +1] = item end end return #founds >= 1 and founds end  
     
    e tenta usar a função do npc assim:
     
    local onSell = function(cid, item, subType, amount, ignoreCap, inBackpacks) if getPlayerSlotItem(cid, CONST_SLOT_BACKPACK).itemid ~= 0 then local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) local z = getContainerItemsById(bp, item) if #z >= amount and items[item].sellPrice ~= 0 then doPlayerAddMoney(cid, items[item].sellPrice * amount) for i = 1, amount do doRemoveItem(z[i].uid) end end end return true end  
  8. Obrigado
    Shiuns recebeu reputação de elielder em (Resolvido)Colocar delay   
    local globalEvent = 0 local function globalSave(minutes) if minutes <= 0 then doSetGameState(GAMESTATE_SHUTDOWN) os.exit(0) return true end if minutes == 1 then addEvent(doSaveServer, 59000) -- 59 segundos doBroadcastMessage("Global server save in " .. minutes .. " minute, please go to safe zone and logout. The save will not be longer than 1 minute.") elseif minutes <= 3 then doBroadcastMessage("Global server save in " .. minutes .. " minutes, please go to safe zone. The save will not be longer than 1 minute.") else doBroadcastMessage("Global server save in " .. minutes .. " minutes, please go to safe zone. The save will not be longer than 1 minute.") end globalEvent = addEvent(globalSave, 60000, minutes - 1) return true end function onTime(interval, lastExecution) setGlobalStorageValue(48572, 1) return globalSave(math.abs(math.ceil(5))) end  
  9. Gostei
    Shiuns deu reputação a Vodkart em Poção/Item Que Aumenta Velocidade De Upar X Skill [ MODS]   
    que estranho, no meu server funcionou, testei num baiak 8.6...
     
    pode ser que a função seja diferente, tenta colocar 2 desse jeito para ver se aumenta a taxa de up
     
     
    <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Exp Potion" version="1.0" author="Vodkart" contact="DISCORD: vodkart#6090" enabled="yes"> <config name="exppotion"><![CDATA[ Potions_Rates = { [14562] = {name = "Exp Potion", skill = SKILL__LEVEL, storages = {987681, 987682}, minutes = 2, new_rate = 2}, [14565] = {name = "Fist Potion", skill = SKILL_FIST, storages = {987683, 987684}, minutes = 2, new_rate = 2}, [14566] = {name = "Distance Potion", skill = SKILL_DISTANCE, storages = {987685, 987686}, minutes = 2, new_rate = 2} } function convertTime(a) if(type(tonumber(a)) == "number" and a > 0) then if (a <= 3599) then local minute = math.floor(a/60) local second = a - (60 * minute) if(second == 0) then return ((minute)..((minute > 1) and " minutos" or " minuto")) else return ((minute ~= 0) and ((minute>1) and minute.." minutos e " or minute.." minuto e ").. ((second>1) and second.." segundos" or second.." segundo") or ((second>1) and second.." segundos" or second.. " segundo")) end else local hour = math.floor(a/3600) local minute = math.floor((a - (hour * 3600))/60) local second = (a - (3600 * hour) - (minute * 60)) if (minute == 0 and second > 0) then return (hour..((hour > 1) and " horas e " or " hora e "))..(second..((second > 1) and " segundos" or " segundo")) elseif (second == 0 and minute > 0) then return (hour..((hour > 1) and " horas e " or " hora e "))..(minute..((minute > 1) and " minutos" or " minuto")) elseif (second == 0 and minute == 0) then return (hour..((hour > 1) and " horas" or " hora")) end return (hour..((hour > 1) and " horas, " or " hora, "))..(minute..((minute > 1) and " minutos e " or " minuto e "))..(second..((second > 1) and " segundos" or " segundo")) end end end ]]></config> <event type="login" name="ExpPotionLogin" event="script"><![CDATA[ domodlib('exppotion') function onLogin(cid) for _, ret in pairs(Potions_Rates) do if getPlayerStorageValue(cid, ret.storages[1]) - os.time() > 0 then registerCreatureEvent(cid, "ExpPotionThink") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você ainda tem "..convertTime(getPlayerStorageValue(cid, ret.storages[1]) - os.time()).." de "..ret.name..".") if ret.skill == SKILL__LEVEL then doPlayerSetExperienceRate(cid, ret.new_rate) else doPlayerSetRate(cid, ret.skill, ret.new_rate) end setPlayerStorageValue(cid, ret.storages[2], 1) -- registro end end return true end]]></event> <event type="think" name="ExpPotionThink" event="script"><![CDATA[ domodlib('exppotion') function onThink(cid, interval) for _, ret in pairs(Potions_Rates) do if getPlayerStorageValue(cid, ret.storages[2]) > 0 and getPlayerStorageValue(cid, ret.storages[1]) - os.time() <= 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sua ".. ret.name .." acabou!") if ret.skill == SKILL__LEVEL then doPlayerSetExperienceRate(cid, 1) else doPlayerSetRate(cid, ret.skill, 1) end setPlayerStorageValue(cid, ret.storages[2], 0) -- registro end end return true end]]></event> <talkaction words="!scrolltime;/scrolltime;!tscroll;/tscroll" event="buffer"><![CDATA[ domodlib('exppotion') local str ="# POTIONS INFO #\n\n" for _, ret in pairs(Potions_Rates) do str = str.."["..ret.name.."] -> "..(getPlayerStorageValue(cid, ret.storages[1]) - os.time() <= 0 and "Não ativo" or "voce tem "..convertTime(getPlayerStorageValue(cid, ret.storages[1]) - os.time()).." de ".. ret.name).."\n" end return doPlayerPopupFYI(cid, str) ]]></talkaction> <action itemid="14562;14565;14566" event="script"><![CDATA[ domodlib('exppotion') function onUse(cid, item, fromPosition, itemEx, toPosition) if not Potions_Rates[item.itemid] then return true end local ret = Potions_Rates[item.itemid] if getPlayerStorageValue(cid, ret.storages[1]) - os.time() > 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você não pode usar outra "..ret.name..". Você já possui uma Ativa. E Ainda restam: "..convertTime(getPlayerStorageValue(cid, ret.storages[1]) - os.time())..".") return true end local rates = 1 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você ativou ".. ret.name .." por "..ret.minutes.." minutos! Durante este tempo, você receberá + ".. string.format("%.1f", ret.new_rate) * 100 .."% de skill Extra de Qualquer Mob. Para saber o tempo, digite: /scrolltime") setPlayerStorageValue(cid, ret.storages[1], os.time()+ret.minutes*60) setPlayerStorageValue(cid, ret.storages[2], 1) if ret.skill == SKILL__LEVEL then doPlayerSetExperienceRate(cid, ret.new_rate) else doPlayerSetRate(cid, ret.skill, ret.new_rate) end registerCreatureEvent(cid, "ExpPotionThink") doRemoveItem(item.uid) return true end]]></action> </mod>  
     
  10. Obrigado
    Shiuns recebeu reputação de Msloko em (Resolvido)[Action] Reset system por Action   
    Falta estudar tabelas...
     
    local tabble = { {reqVoc= 7, needLevel=330000}, } print(tabble.reqVoc) -- retorna nil --------------------------- local tabble = { {reqVoc= 7, needLevel=330000}, } print(tabble[1].reqVoc) -- retorna 7 ---------------------------- o certo é usar: local tabble = { reqVoc= 7, needLevel= 330000, } print(tabble.reqVoc)  
     
     
     
    o código:
     
    function onUse(cid, fromPosition, itemEx, toPosition) local tabble = { reqVoc = 7, needLevel = 330000 } local config = { pid = getPlayerGUID(cid), newlv = 90000, life = 3599865, mana = 3599715 } if getPlayerLevel(cid) < 330000 and tabble.needLevel then doPlayerPopupFYI(cid, "Voce precisa ser level " .. needLevel .. " para resetar.") return true elseif tabble.reqVoc >= getPlayerVocation(cid) or 8 then doPlayerPopupFYI(cid, "Voce já é vocaçao.") return true elseif tabble.reqVoc <= 7 and getPlayerVocation(cid) then doPlayerPopupFYI(cid, "Voce precisa ser vocaçao para resetar.") return true end if tabble.reqVoc == getPlayerVocation(cid) then setPlayerStorageValue(cid, 887978, 1) end local newvoc = tabble.reqVoc ~= getPlayerVocation(cid) and (tabble.reqVoc+1) setPlayerStorageValue(cid, 887979, newvoc) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `level` = "..config.newlv..", `experience` = "..getExperienceForLevel(config.newlv)..",`manamax` = "..config.mana..",`health` = "..config.life..", `healthmax` = "..config.life..",`mana` = "..config.mana.." WHERE `id` = "..config.pid) return true end  
  11. Gostei
    Shiuns deu reputação a WooX em Cave Exclusiva [SUPER UP] by WooX   
    Não. Se não me engano é o sistema do Vodkart que da pra fazer isso, tem aqui no fórum da uma procurada.
  12. Gostei
    Shiuns recebeu reputação de Cat em Otimizado: AutoLoot in Sources for Otx(2 ou menor)   
    no meu serve funcionou de primeira
    ficou muito bom esse trem
    vaaaaaaaaleeeeeeeeeeeeeeeeeeeeu
  13. Obrigado
    Shiuns recebeu reputação de knepperzik em (Resolvido)Ao upar club ganhar recompensa   
    function onAdvance(cid, skill, oldLevel, newLevel) local config = { [50] = {item = 2160, count = 5}, [100] = {item = 2160, count = 15}, [150] = {item = 2160, count = 20}, [200] = {item = 2160, count = 25}, [250] = {item = 2160, count = 30}, [300] = {item = 2160, count = 50}, [350] = {item = 4891, count = 1}, [400] = {item = 4892, count = 1}, } if skill == SKILL_CLUB then for level, info in pairs(config) do if newLevel >= level and (getPlayerStorageValue(cid, 30705) == -1 or not (string.find(getPlayerStorageValue(cid, 30705), "'" .. level .. "'"))) then doPlayerAddItem(cid, info.item, info.count) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Parabéns, você atingiu o level "..newLevel.." e ganhou "..info.count.." "..getItemNameById(info.item)..".") local sat = getPlayerStorageValue(cid, 30705) == -1 and "Values: '" .. level .. "'" or getPlayerStorageValue(cid, 30705) .. ",'" .. level .. "'" setPlayerStorageValue(cid, 30705, sat) end end end return true end  
  14. Gostei
    Shiuns recebeu reputação de Naze em Otimizado: AutoLoot in Sources for Otx(2 ou menor)   
    no meu serve funcionou de primeira
    ficou muito bom esse trem
    vaaaaaaaaleeeeeeeeeeeeeeeeeeeeu
  15. Gostei
    Shiuns deu reputação a Naze em Otimizado: AutoLoot in Sources for Otx(2 ou menor)   
    boa se funciono ta blz, agr q percebi realmente erro meu, pois check retorna true se ta na lista tbm, vou corrigir no post depois. 
  16. Gostei
    Shiuns deu reputação a Movie em Square System TFS 1.X   
    Square System
     

     
    Esse sistema irá possibilitar você colocar uma square em determinado player.
     
    Em luascript.cpp, acima de
    registerMethod("Player", "isPlayer", LuaScriptInterface::luaPlayerIsPlayer); coloque isso
    registerMethod("Player", "sendCreatureSquare", LuaScriptInterface::luaSendCreatureSquare);  
    Agora, acima de
    int LuaScriptInterface::luaPlayerCreate(lua_State* L) Coloque isso
    int LuaScriptInterface::luaSendCreatureSquare(lua_State* L) { // player:sendCreatureSquare(creature, color) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } Creature* creature = getUserdata<Creature>(L, 2); if (!creature) { lua_pushnil(L); return 1; } uint32_t color = getNumber<uint32_t>(L, 3, 0); player->sendCreatureSquare(creature, static_cast <SquareColor_t>(color)); lua_pushboolean(L, true); return 1; }  
    Agora em luascript.h, antes de
    static int luaPlayerIsPlayer(lua_State* L); adicione isso
    static int luaSendCreatureSquare(lua_State* L);  
     
    Agora para utilizar use player:sendCreatureSquare(creature, color)
     
    Boa criatividade.
     
    Créditos: 100% meu  
     
  17. Gostei
    Shiuns deu reputação a Naze em Otimizado: AutoLoot in Sources for Otx(2 ou menor)   
    Uns dos problemas das maiorias dos otserv casual que estão online é o autoloot, alguns com erros e defeito na checagem dos containers e sempre consumindo muito por ser em lua fazendo checagens de tile, corpo, itens e etc. Por isso decidi da uma contribuição a essa comunidade que me evoluiu bastante um autoloot diretamente na source na função que insere os itens no corpo, otimizando em 100% na hr da entrega do item, e não tendo problemas ocasionais como corpos sobre corpos ou varias bags.
     
         Esse sistema já é bem comum quando comprado, mas gratuito acredito que ainda não tinha disponível, então fiz esse totalmente do 0 na source tfs 0.4 rev 3999 (do yan) e passei para Otx corrigindo alguns erros de compatibilidade.
        
        Atenção na instalação! Qualquer problema pra compilar que envolva as linhas presente no código verifique novamente se instalou corretamente antes de pedir ajuda para evitar flood. Qualquer bug, erro ou mal funcionamento encontrado pode postar que estarei corrigindo, mas não irei customizar a seu agrado, você consegue fazer isso sozinho com atenção e calma, e se precisa de ajuda é só posta as duvidas.
     
    Imagens do Sistema:
     
    Características: 
    -> Otimizado executando apenas funções necessarias -> Comandos simples e praticos -> !autoloot on/off //Autoloot estara sempre ligado, e caso queria desliga use '!autoloot off' -> !autoloot bank/bag //Define para onde ira o dinheiro coletado, direto banco ou no inventario -> !autoloot list //Lista todos itens adicionados para coleta -> !autoloot clear/clean //Remove todos itens da lista -> !autoloot add, name item, name item, ... //Adiciona itens na lista, podendo adicionar quantos quiser de uma vez. Ele retorna um messagem dizendo os itens que foram adicionados e os que deram erro e não foram adicionados, talvez por escrito errado, ja existente na lista, na lista de bloquados, etc. -> !autoloot remove, item name, item name, ... //Remove itens da lista, com a mesma logica do add. -> Opções configuravel pelo Config.lua -> AutoLoot_MoneyIDs //IDs dos Itens Moedas do servidor como gold coins, platinium coins, crystal coins. -> AutoLoot_BlockIDs //IDs dos itens bloqueados para autoloot -> AutoLoot_MaxItem //Quantidade maxima de itens para adicionar a lista -> Sistema livres de bugs ou logs de erros.  
    Instalação:
    Toda instalação será feita na source, exceto por 1 linha em talkactions.xml e 3 variáveis no config.lua
     
    Otx :
     
    Link para TFS -> https://tibiaking.com/forums/topic/101079-otimizado-autoloot-in-sources-for-tfs-036-tfs-04/
     
    Caso ocorra algum erro na compilação so mandar que ajudo a resolver, testei apenas em uma otx que tenho então nao sei se pode sugir outros problemas. Nas versões atual da Otx para servidores 10+ não ira funcionar pois algumas funções são diferente e não irei corrigir agora, em breve passo o mesmo pra tfs 1.3 e otx3.
     
    Esse sistema foi totalmente feito por mim, mas dou créditos também ao @Mathias Kenfi por me ajudar muito na evolução em lua/c++ e a tabela sql é a mesma usada no quick autoloot 1.3 postado por Pedriinz
  18. Gostei
    Shiuns deu reputação a Naze em Otimizado: AutoLoot in Sources for TFS 0.3.6, TFS 0.4   
    Uns dos problemas das maiorias dos otserv casual que estão online é o autoloot, alguns com erros e defeito na checagem dos containers e sempre consumindo muito por ser em lua fazendo checagens de tile, corpo, itens e etc. Por isso decidi da uma contribuição a essa comunidade que me evoluiu bastante um autoloot diretamente na source na função que insere os itens no corpo, otimizando em 100% na hr da entrega do item, e não tendo problemas ocasionais como corpos sobre corpos ou varias bags.
     
         Esse sistema já é bem comum quando comprado, mas gratuito acredito que ainda não tinha disponível, então fiz esse totalmente do 0 na source tfs 0.4 rev 3999 (do yan).
        
        Atenção na instalação! Qualquer problema pra compilar que envolva as linhas presente no código verifique novamente se instalou corretamente antes de pedir ajuda para evitar flood. Qualquer bug, erro ou mal funcionamento encontrado pode postar que estarei corrigindo, mas não irei customizar a seu agrado, você consegue fazer isso sozinho com atenção e calma, e se precisa de ajuda é só posta as duvidas.
     
    Imagens do Sistema:
     
    Características: 
    -> Otimizado executando apenas funções necessarias -> Comandos simples e praticos -> !autoloot on/off //Autoloot estara sempre ligado, e caso queria desliga use '!autoloot off' -> !autoloot bank/bag //Define para onde ira o dinheiro coletado, direto banco ou no inventario -> !autoloot list //Lista todos itens adicionados para coleta -> !autoloot clear/clean //Remove todos itens da lista -> !autoloot add, name item, name item, ... //Adiciona itens na lista, podendo adicionar quantos quiser de uma vez. Ele retorna um messagem dizendo os itens que foram adicionados e os que deram erro e não foram adicionados, talvez por escrito errado, ja existente na lista, na lista de bloquados, etc. -> !autoloot remove, item name, item name, ... //Remove itens da lista, com a mesma logica do add. -> Opções configuravel pelo Config.lua -> AutoLoot_MoneyIDs //IDs dos Itens Moedas do servidor como gold coins, platinium coins, crystal coins. -> AutoLoot_BlockIDs //IDs dos itens bloqueados para autoloot -> AutoLoot_MaxItem //Quantidade maxima de itens para adicionar a lista -> Sistema livres de bugs ou logs de erros.  
    Instalação:
    Toda instalação será feita na source, exceto por 1 linha em talkactions.xml e 3 variáveis no config.lua
     
    TFS 0.4 :
     
    Link para Otx -> https://tibiaking.com/forums/topic/101086-otimizado-autoloot-in-sources-for-otx2-ou-menor/
     
    Nas versões atual da TFS para servidores 10+ não ira funcionar pois algumas funções são diferente e não irei corrigir agora, em breve passo o mesmo pra tfs 1.x e otx3.
     
    Esse sistema foi totalmente feito por mim, mas dou créditos também ao @Mathias Kenfi por me ajudar muito na evolução em lua/c++ e a tabela sql é a mesma usada no quick autoloot 1.3 postado por Pedriinz
     
    @Edit: 
    Quem usa source de derivados caso ocorra erro aplica as alterações dos comentários abaixo.
    Pequena correção em talkactions.cpp na parte remove na linha if(!player->checkAutoLoot(itemId)), para if(player->checkAutoLoot(itemId))
  19. Gostei
    Shiuns deu reputação a Vodkart em [TFS] New Auto Loot Unlimited Edition 2.0   
    [ + ] Descrição: Autoloot refeito para VERSÃO TFS e adicionado algumas outras funções que estarei explicando ao decorrer do tópico.
     
    [ + ] Se você quer o Autoloot para VERSÃO OTX clica neste Link: AUTOLOOT OTX
     
     

     
     
    [ + ] Imagem do comando:
     

     
    [ + ] Features:
     
    [ - ] Você pode ativar ou desativar o autoloot a hora que achar necessário.
    [ - ] Também existe um comando para ativar ou desativar mensagens do loot que o autoloot coleta!
    [ - ] Você pode escolher a cor do texto em que irá aparecer a coleta do loot!
    [ - ] O autoloot informará para você se estiver com pouco slots na sua backpack, e o jogador poderá escolher se quer habilitar ou não está função no autoloot.
    [ - ] Versão ilimitada de itens(não ficam armazenadas em storages).
    [ - ] O jogador poderá optar por depositar direto no banco os golds que forem dropados.
     
    [ + ] Instalação:
     
    Primeiramente CRIE uma PASTA VAZIA chamanda "autoloot" em DATA/LOGS, ficando assim:
     

     
     
    Depois instale o MODS normalmente na pasta MODS do seu servidor.
     

     
     
    new_perfect_autoloot_tfs.xml
     
    Link: https://pastebin.com/raw/0xJR4nwr
     
     
     [ + ] Configuração:
     
    Dentro do mods tem essa tabela
    info = { distro = 1, -- 1 = TFS // 2 = talk modificada directory = "data/logs/autoloot", -- não mexer Warn_Bp_Slots = 5, -- quando tiver 5 ou menos slots na BP vai avisar o jogador Talkaction_delay = 5, -- em segundos // delay para remover e adicionar item BlockMonsters = {}, -- Lista de monstros que o autoloot nao vai funcionar BlockItemsList = {2123,2515}, -- Lista de itens que o autoloot nao coleta Money_ids = {2148, 2152, 2160}, -- id das moedas do ot Max_Slots = {free = 3, premium = 5}, -- quantidade de itens que podem ser adicionados no autoloot por free e premium Storages = {988801, 988802, 988803, 988804, 988805, 988806, 988807} -- não mexer }  
    Sobre o distro = 1
     
    Isso significa que ele usa versão padrão (1), pois existem 2 versões, caso aconteça esse error no seu console ao usar a talkaction do autoloot:
     
    [8/10/2020 19:19:58] [Error - TalkAction Interface]
    [8/10/2020 19:19:58] local words = "!autoloot"
    (...)
    [8/10/2020 19:19:59] return true
    [8/10/2020 19:19:59] Description: 
    [8/10/2020 19:19:59] (LuaInterface::luaGetItemIdByName) Item not found
     
    Você deverá colocar:
     
    distro = 2
     
    Pq? acontece que em alguns servidores não reconhecem o parâmetro "false" da função "getItemIdByName"
     
    OBS: Estarei anexando o autoloot já atualizado na versão 2.0 para quem tiver preguiça de copiar e colar!!
     
     
     
    new_perfect_autoloot_tfs.xml
  20. Gostei
    Shiuns deu reputação a Vodkart em [8.6] Labia System   
    UPDATE 05/02/2019:  - Colocado exhauted na venda de items para não bugar a venda de itens com elf bot!
     
    Descrição do Arquivo
    *Sobre o Sistema*
     
    Labia System é um sistema que proporciona ao jogador a capacidade de aprimorar sua habilidade de venda, aumentando assim sua Labia Skill e obtendo maiores lucros em futuras vendas de itens.
    O Skill de Labia, pode ser upado enquanto Free ou Premmy Account em qualquer level que você queira!
     
    Basta vender itens no NPC Soya Master.
     
    Lembrando que sendo free, sua lábia pode ser upada apenas até skill 90. Já sendo premmium até a lábia 120.
    Se o player for premmy account, de repente ficar free... sua lábia cai para 90, e todos os itens serão vendidos com preços avaliados dentro dessa lábia!
    Quanto mais caro for, o item vendido, maior será a porcentagem de lábia upada.
     
    *Exclusividade*
     
    O Sistema também conta com uma configuração exclusiva, tendo a possibilidade de jogadores Premmy account possam upar mais rapído a sua Skill de Labia!
    Sem falar no comando inovador:
     
    !labia info -- Ensinando ao jogador como usar o sistema
    !labia level -- Mostrando ao jogador quanto de skill Try falta para o próximo level!!
     
     
     
    *Benefícios da Lábia*

    Quanto maior for sua Labia Skill, maior será o valor pago pelas NPC Soya Master em troca do seu item ! Lembrando que, este é um benefício apenas, para premiuns!, Desta maneira, jogadores premiuns com labia skill alta, conseguem  maiores lucros ao vender seus itens!
     
     
    O valor do item varia de acordo com a Labia upada! Quanto mais skill, mais lucro na venda!

    A maior Labia alcançada é você que decide nas suas configurações! por exemplo no RPG Brasil a  é Skill 120.
     
     

    *exemplo da fórmula para cálculos do valor do item de acordo com uma Lábia desejada*
     
    P = PI + PI * 0,025 * (L / 2)
    Onde:
    P ~ Preço que o item será vendido na lábia L.
    PI ~ Preço Inicial do item, preço do item para um lábia 0.
    L ~ Labia em que o item será vendido! Vale lembrar que se L for um nº ímpar, deve-se reduzir uma unidade deste número, ou seja, 13 vira 12, 27 vira 26, 91 vira 90, nesse esquema, apenas se L for í­mpar!
    Exemplo:
    Preço de uma Golden Legs na lábia 95:
    P = PI + PI * 0,025 * (L / 2)
    Como L é í­mpar (95), reduzimos uma unidade, 95 vira 94:
    P = 48000 + 48000 * 0,025 * (94 / 2)
    P = 48000 + 48000 * 0,025 * 47
    P = 48000 + 56400
    P = 104400 GP's ou 104,4 k
     
     
     
    Sistema Labia.rar
  21. Gostei
    Shiuns deu reputação a Vodkart em [NPC] Fixando BUG de o NPC comprar itens equipados nos slots(corpo)!   
    Em alguns servidores a função 'doPlayerRemoveItem' não tem o parâmetro 'ignoreEquipped', fazendo com que o jogador acabe vendendo os itens que estão nos slots(equipados).
     
    Esta função(gambiarra) serve para que o jogador ao vender itens no npc, o mesmo só compre itens que estiverem dentro da bp.
     
     
    Primeiramente coloque essas duas funções na lib do seu ot caso você não tenha:
     
    https://pastebin.com/raw/BfRLcrLA
     
     
    agora vá em \data\npc\lib\npcsystem e abra o seu modules.lua 
     
    substitua essa função:
     
    -- Callback onSell() function. If you wish, you can change certain Npc to use your onSell(). function ShopModule:callbackOnSell(cid, itemid, subType, amount, ignoreCap, inBackpacks) if(self.npcHandler.shopItems[itemid] == nil) then error("[ShopModule.onSell]", "items[itemid] == nil") return false end if(self.npcHandler.shopItems[itemid].sellPrice == -1) then error("[ShopModule.onSell]", "Attempt to sell a non-sellable item") return false end local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = amount * self.npcHandler.shopItems[itemid].sellPrice, [TAG_ITEMNAME] = self.npcHandler.shopItems[itemid].realName } if(subType < 1) then subType = -1 end if(doPlayerRemoveItem(cid, itemid, amount, subType)) then local msg = self.npcHandler:getMessage(MESSAGE_SOLD) msg = self.npcHandler:parseMessage(msg, parseInfo) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg) doPlayerAddMoney(cid, amount * self.npcHandler.shopItems[itemid].sellPrice) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end return true else local msg = self.npcHandler:getMessage(MESSAGE_NEEDITEM) msg = self.npcHandler:parseMessage(msg, parseInfo) doPlayerSendCancel(cid, msg) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end return false end end  
    por esta:
     
    -- Callback onSell() function. If you wish, you can change certain Npc to use your onSell(). function ShopModule:callbackOnSell(cid, itemid, subType, amount, ignoreCap, inBackpacks) if(self.npcHandler.shopItems[itemid] == nil) then error("[ShopModule.onSell]", "items[itemid] == nil") return false end if(self.npcHandler.shopItems[itemid].sellPrice == -1) then error("[ShopModule.onSell]", "Attempt to sell a non-sellable item") return false end local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = amount * self.npcHandler.shopItems[itemid].sellPrice, [TAG_ITEMNAME] = self.npcHandler.shopItems[itemid].realName } if(subType < 1) then subType = -1 end if getPlayerSlotItem(cid, CONST_SLOT_BACKPACK).itemid ~= 0 then local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) local z = getContainerItemsById(bp, itemid) if #z >= amount then for i = 1, amount do doRemoveItem(z[i].uid) end local msg = self.npcHandler:getMessage(MESSAGE_SOLD) msg = self.npcHandler:parseMessage(msg, parseInfo) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg) doPlayerAddMoney(cid, amount * self.npcHandler.shopItems[itemid].sellPrice) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end return true else local msg = self.npcHandler:getMessage(MESSAGE_NEEDITEM) msg = self.npcHandler:parseMessage(msg, parseInfo) doPlayerSendCancel(cid, msg) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end return false end else doPlayerSendCancel(cid, "I only buy items that are inside a BackPack") if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end return false end end  
  22. Gostei
    Shiuns recebeu reputação de Vodkart em Anti-Exit Treiners! 8.60   
    Versão Testada: Tibia 8.60 // TFS 0.3.6 & 0.4
     
    Descrição: Evita jogadores que dão exit nos treiners upando skills. Eles são kikados automaticamente depois de alguns minutos e algumas verificações.
     
     
    exit_treiner.lua
    config_exit_treiner = { Warning = "Favor trocar seu char de direção para evitar que ele seja kikado", -- mensagem time = 3, -- a cada 3 minutos irá checar roudsKick = 3, -- se ele estiver parado na mesma direção por 3 checagem seguidas será kikado storages = {879780,879781}, -- n edite treiners = {"Trainer", "Training Monk"} -- coloque aqui os Treiners do seu ot } --[[Functions List]]-- function doAddRoundExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end setPlayerStorageValue(cid, config_exit_treiner.storages[1], getPlayerStorageValue(cid, config_exit_treiner.storages[1]) < 0 and 1 or getPlayerStorageValue(cid, config_exit_treiner.storages[1])+1) if getRoundExitTreiner(cid) >= config_exit_treiner.roudsKick then doKickExitTreiner(cid) end end function getRoundExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end return getPlayerStorageValue(cid, config_exit_treiner.storages[1]) < 0 and 1 or getPlayerStorageValue(cid, config_exit_treiner.storages[1]) end function doResetExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end return setPlayerStorageValue(cid, config_exit_treiner.storages[1], 0) end function doKickExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end if getTileInfo(getCreaturePosition(cid)).protection or not getTreinerSpectators(cid) then doResetExitTreiner(cid) setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) else doResetExitTreiner(cid) doRemoveCreature(cid) end end function getTreinerSpectators(cid) local t = getSpectators(getCreaturePosition(cid), 2, 2, false) if t then for _, cid in ipairs(t) do if isMonster(cid) and isInArray(config_exit_treiner.treiners, getCreatureName(cid)) then return true end end end return false end function doCheckLookDirExitTreiner(cid, r) if not isCreature(cid) then return LUA_ERROR end if getTreinerSpectators(cid) then local new = getCreatureLookDirection(cid) if r == new then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, config_exit_treiner.Warning) doAddRoundExitTreiner(cid) else doResetExitTreiner(cid) end addEvent(doCheckLookDirExitTreiner,config_exit_treiner.time*60*1000, cid, new) else setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) doResetExitTreiner(cid) end end --[[Script System]]-- function onLogin(cid) doResetExitTreiner(cid) setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) registerCreatureEvent(cid, "NewExitTreiner") return true end function onCombat(cid, target) if not isCreature(cid) or not isPlayer(cid) then return true end if getPlayerStorageValue(cid, config_exit_treiner.storages[2]) - os.time() > 0 then return true end if not isMonster(target) then return true end if isMonster(target) and not isInArray(config_exit_treiner.treiners, getCreatureName(target)) and getRoundExitTreiner(cid) > 0 then setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) doResetExitTreiner(cid) return true end if isMonster(target) and isInArray(config_exit_treiner.treiners, getCreatureName(target)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, config_exit_treiner.Warning) addEvent(doCheckLookDirExitTreiner, config_exit_treiner.time*60*1000, cid, getCreatureLookDirection(cid)) setPlayerStorageValue(cid, config_exit_treiner.storages[2], os.time()+5*60) end return true end  
    TAG
    <event type="login" name="ExitTreiners" event="script" value="exit_treiner.lua"/> <event type="combat" name="NewExitTreiner" event="script" value="exit_treiner.lua"/>  
  23. Gostei
    Shiuns recebeu reputação de KotZletY em Anti-Exit Treiners! 8.60   
    Versão Testada: Tibia 8.60 // TFS 0.3.6 & 0.4
     
    Descrição: Evita jogadores que dão exit nos treiners upando skills. Eles são kikados automaticamente depois de alguns minutos e algumas verificações.
     
     
    exit_treiner.lua
    config_exit_treiner = { Warning = "Favor trocar seu char de direção para evitar que ele seja kikado", -- mensagem time = 3, -- a cada 3 minutos irá checar roudsKick = 3, -- se ele estiver parado na mesma direção por 3 checagem seguidas será kikado storages = {879780,879781}, -- n edite treiners = {"Trainer", "Training Monk"} -- coloque aqui os Treiners do seu ot } --[[Functions List]]-- function doAddRoundExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end setPlayerStorageValue(cid, config_exit_treiner.storages[1], getPlayerStorageValue(cid, config_exit_treiner.storages[1]) < 0 and 1 or getPlayerStorageValue(cid, config_exit_treiner.storages[1])+1) if getRoundExitTreiner(cid) >= config_exit_treiner.roudsKick then doKickExitTreiner(cid) end end function getRoundExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end return getPlayerStorageValue(cid, config_exit_treiner.storages[1]) < 0 and 1 or getPlayerStorageValue(cid, config_exit_treiner.storages[1]) end function doResetExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end return setPlayerStorageValue(cid, config_exit_treiner.storages[1], 0) end function doKickExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end if getTileInfo(getCreaturePosition(cid)).protection or not getTreinerSpectators(cid) then doResetExitTreiner(cid) setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) else doResetExitTreiner(cid) doRemoveCreature(cid) end end function getTreinerSpectators(cid) local t = getSpectators(getCreaturePosition(cid), 2, 2, false) if t then for _, cid in ipairs(t) do if isMonster(cid) and isInArray(config_exit_treiner.treiners, getCreatureName(cid)) then return true end end end return false end function doCheckLookDirExitTreiner(cid, r) if not isCreature(cid) then return LUA_ERROR end if getTreinerSpectators(cid) then local new = getCreatureLookDirection(cid) if r == new then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, config_exit_treiner.Warning) doAddRoundExitTreiner(cid) else doResetExitTreiner(cid) end addEvent(doCheckLookDirExitTreiner,config_exit_treiner.time*60*1000, cid, new) else setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) doResetExitTreiner(cid) end end --[[Script System]]-- function onLogin(cid) doResetExitTreiner(cid) setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) registerCreatureEvent(cid, "NewExitTreiner") return true end function onCombat(cid, target) if not isCreature(cid) or not isPlayer(cid) then return true end if getPlayerStorageValue(cid, config_exit_treiner.storages[2]) - os.time() > 0 then return true end if not isMonster(target) then return true end if isMonster(target) and not isInArray(config_exit_treiner.treiners, getCreatureName(target)) and getRoundExitTreiner(cid) > 0 then setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) doResetExitTreiner(cid) return true end if isMonster(target) and isInArray(config_exit_treiner.treiners, getCreatureName(target)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, config_exit_treiner.Warning) addEvent(doCheckLookDirExitTreiner, config_exit_treiner.time*60*1000, cid, getCreatureLookDirection(cid)) setPlayerStorageValue(cid, config_exit_treiner.storages[2], os.time()+5*60) end return true end  
    TAG
    <event type="login" name="ExitTreiners" event="script" value="exit_treiner.lua"/> <event type="combat" name="NewExitTreiner" event="script" value="exit_treiner.lua"/>  
  24. Gostei
    Shiuns recebeu reputação de Storm em Anti-Exit Treiners! 8.60   
    Versão Testada: Tibia 8.60 // TFS 0.3.6 & 0.4
     
    Descrição: Evita jogadores que dão exit nos treiners upando skills. Eles são kikados automaticamente depois de alguns minutos e algumas verificações.
     
     
    exit_treiner.lua
    config_exit_treiner = { Warning = "Favor trocar seu char de direção para evitar que ele seja kikado", -- mensagem time = 3, -- a cada 3 minutos irá checar roudsKick = 3, -- se ele estiver parado na mesma direção por 3 checagem seguidas será kikado storages = {879780,879781}, -- n edite treiners = {"Trainer", "Training Monk"} -- coloque aqui os Treiners do seu ot } --[[Functions List]]-- function doAddRoundExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end setPlayerStorageValue(cid, config_exit_treiner.storages[1], getPlayerStorageValue(cid, config_exit_treiner.storages[1]) < 0 and 1 or getPlayerStorageValue(cid, config_exit_treiner.storages[1])+1) if getRoundExitTreiner(cid) >= config_exit_treiner.roudsKick then doKickExitTreiner(cid) end end function getRoundExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end return getPlayerStorageValue(cid, config_exit_treiner.storages[1]) < 0 and 1 or getPlayerStorageValue(cid, config_exit_treiner.storages[1]) end function doResetExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end return setPlayerStorageValue(cid, config_exit_treiner.storages[1], 0) end function doKickExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end if getTileInfo(getCreaturePosition(cid)).protection or not getTreinerSpectators(cid) then doResetExitTreiner(cid) setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) else doResetExitTreiner(cid) doRemoveCreature(cid) end end function getTreinerSpectators(cid) local t = getSpectators(getCreaturePosition(cid), 2, 2, false) if t then for _, cid in ipairs(t) do if isMonster(cid) and isInArray(config_exit_treiner.treiners, getCreatureName(cid)) then return true end end end return false end function doCheckLookDirExitTreiner(cid, r) if not isCreature(cid) then return LUA_ERROR end if getTreinerSpectators(cid) then local new = getCreatureLookDirection(cid) if r == new then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, config_exit_treiner.Warning) doAddRoundExitTreiner(cid) else doResetExitTreiner(cid) end addEvent(doCheckLookDirExitTreiner,config_exit_treiner.time*60*1000, cid, new) else setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) doResetExitTreiner(cid) end end --[[Script System]]-- function onLogin(cid) doResetExitTreiner(cid) setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) registerCreatureEvent(cid, "NewExitTreiner") return true end function onCombat(cid, target) if not isCreature(cid) or not isPlayer(cid) then return true end if getPlayerStorageValue(cid, config_exit_treiner.storages[2]) - os.time() > 0 then return true end if not isMonster(target) then return true end if isMonster(target) and not isInArray(config_exit_treiner.treiners, getCreatureName(target)) and getRoundExitTreiner(cid) > 0 then setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) doResetExitTreiner(cid) return true end if isMonster(target) and isInArray(config_exit_treiner.treiners, getCreatureName(target)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, config_exit_treiner.Warning) addEvent(doCheckLookDirExitTreiner, config_exit_treiner.time*60*1000, cid, getCreatureLookDirection(cid)) setPlayerStorageValue(cid, config_exit_treiner.storages[2], os.time()+5*60) end return true end  
    TAG
    <event type="login" name="ExitTreiners" event="script" value="exit_treiner.lua"/> <event type="combat" name="NewExitTreiner" event="script" value="exit_treiner.lua"/>  
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo