Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 12/11/12 em todas áreas
-
Nome: Oneshot's Anti-bot Autor: Oneshot Tipo: Sistema Descrição Este é um sistema de anti-bot simples, que envia um código numérico de 6 dígitos para cada jogador online e pede para que, através de um comando, este código de verificação seja ativado. O jogador tem um limite de tempo para fazer isso, e caso não faça, este é banido por um tempo configurável ou então, preso em um certo lugar do mapa. Instalação 1. Em data/lib, crie um arquivo chamado antibot.lua e cole o conteúdo abaixo: ANTIBOT_STORAGE_1 = 109001 ANTIBOT_STORAGE_2 = 109002 ANTIBOT_STORAGE_3 = 109003 ANTIBOT_TYPE = 2 -- [1] = Banimento, [2] = Prisão ANTIBOT_DURATION = 120 -- Em segundos ANTIBOT_DURATION_DELAY = 10 -- Em segundos ANTIBOT_MESSAGE = "[Oneshot's Anti-bot]\nSeu código de verificação é %s, responda através do comando !antibot, caso contrário, será ".. (ANTIBOT_TYPE == 1 and "banido" or "preso") ..".\nVocê têm %s segundos." ANTIBOT_BAN_TIME = 24 * 60 * 60 ANTIBOT_PRISON = {x = 1019, y = 867, z = 7} ANTIBOT_PRISON_FROMPOSITION = {x = 1018, y = 865, z = 7} ANTIBOT_PRISON_TOPOSITION = {x = 1020, y = 869, z = 7} ANTIBOT_PRISON_DURATION = 3 * 60 * 60 ANTIBOT_TEMPLE = {x = 1027, y = 912, z = 5} function AntiBot(cid) if not isCreature(cid) then return end local time = getCreatureStorage(cid, ANTIBOT_STORAGE_1) local answer = getCreatureStorage(cid, ANTIBOT_STORAGE_2) if getPlayerAccess(cid) >= 3 or not(getPlayerAccountManager(cid) == MANAGER_NONE) then return end if isInRange(getThingPosition(cid), ANTIBOT_PRISON_FROMPOSITION, ANTIBOT_PRISON_TOPOSITION) then return end if time == -1 and answer == -1 then return end if os.time() >= time then doCreatureSetStorage(cid, ANTIBOT_STORAGE_1, -1) doCreatureSetStorage(cid, ANTIBOT_STORAGE_2, -1) doBroadcastMessage("[ANTI-BOT] O jogador ".. getCreatureName(cid) .." foi ".. (ANTIBOT_TYPE == 1 and "banido" or "preso") .." por uso de bot.") if ANTIBOT_TYPE == 1 then doAddAccountBanishment(getPlayerGUID(cid), 0, (os.time() + ANTIBOT_BAN_TIME), 12, 3, "[ANTI-BOT]") doRemoveCreature(cid) else doTeleportThing(cid, ANTIBOT_PRISON) doCreatureSetStorage(cid, ANTIBOT_STORAGE_3, os.time() + ANTIBOT_PRISON_DURATION) addEvent(function() if isCreature(cid) then doTeleportThing(cid, ANTIBOT_TEMPLE) end end, ANTIBOT_PRISON_DURATION * 1000) end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, ANTIBOT_MESSAGE:format(answer, (time - os.time()))) addEvent(AntiBot, ANTIBOT_DURATION_DELAY * 1000, cid) end end 2. Crie um arquivo chamado antibot.lua em data/globalevents/scripts, cole o conteúdo abaixo function onThink(interval) for _, cid in ipairs(getPlayersOnline()) do local answer = math.random(100000, 999999) doCreatureSetStorage(cid, ANTIBOT_STORAGE_1, os.time() + ANTIBOT_DURATION) doCreatureSetStorage(cid, ANTIBOT_STORAGE_2, answer) AntiBot(cid) end return true end Adicione a seguinte linha em globalevents.xml <globalevent name="antibot" interval="900" event="script" value="antibot.lua"/> 3. Crie um arquivo em data/creaturescripts/scripts, cole o conteúdo abaixo function onLogin(cid) local time = getCreatureStorage(cid, ANTIBOT_STORAGE_1) local answer = getCreatureStorage(cid, ANTIBOT_STORAGE_2) if answer == -1 then return true end if isInRange(getThingPosition(cid), ANTIBOT_PRISON_FROMPOSITION, ANTIBOT_PRISON_TOPOSITION) then if os.time() > getCreatureStorage(cid, ANTIBOT_STORAGE_3) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu tempo de prisão acabou.") doTeleportThing(cid, ANTIBOT_TEMPLE) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ainda está preso por uso de bot.") end return true end if os.time() > ANTIBOT_STORAGE_1 then doCreatureSetStorage(cid, ANTIBOT_STORAGE_1, os.time() + ANTIBOT_DURATION) return true end AntiBot(cid) return true end Adicione a seguinte linha em seu creaturescripts.xml <event type="login" name="Antibot" event="script" value="antibot.lua"/> 4. Crie um arquivo chamado antibot.lua em data/talkactions/scripts, cole o conteúdo abaixo function onSay(cid, words, param, channel) param = tonumber(param) or "" local time = getCreatureStorage(cid, ANTIBOT_STORAGE_1) local answer = getCreatureStorage(cid, ANTIBOT_STORAGE_2) if time == -1 and answer == -1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O anti-bot não está ativado.") return true end if param == "" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Digite uma senha de verificação válida.") return true end if param ~= answer then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você digitou a senha incorreta. Digite corretamente, caso contrário, será banido.") return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Ótimo! Você digitou a resposta correta. O anti-bot foi desativado.") doCreatureSetStorage(cid, ANTIBOT_STORAGE_1, -1) doCreatureSetStorage(cid, ANTIBOT_STORAGE_2, -1) return true end Adicione a seguinte linha em seu talkactions.xml <talkaction words="!antibot" event="script" value="antibot.lua"/> Você pode fazer várias configurações na lib do sistema ANTIBOT_STORAGE_1 = 109001 ANTIBOT_STORAGE_2 = 109002 ANTIBOT_STORAGE_3 = 109003 ANTIBOT_TYPE = 2 -- [1] = Banimento, [2] = Prisão ANTIBOT_DURATION = 120 -- Em segundos ANTIBOT_DURATION_DELAY = 10 -- Em segundos ANTIBOT_MESSAGE = "[Oneshot's Anti-bot]\nSeu código de verificação é %s, responda através do comando !antibot, caso contrário, será ".. (ANTIBOT_TYPE == 1 and "banido" or "preso") ..".\nVocê têm %s segundos." ANTIBOT_BAN_TIME = 24 * 60 * 60 ANTIBOT_PRISON = {x = 1019, y = 867, z = 7} ANTIBOT_PRISON_FROMPOSITION = {x = 1018, y = 865, z = 7} ANTIBOT_PRISON_TOPOSITION = {x = 1020, y = 869, z = 7} ANTIBOT_PRISON_DURATION = 3 * 60 * 60 ANTIBOT_TEMPLE = {x = 1027, y = 912, z = 5} Como a duração do ban, a posição da prisão, o tempo de prisão, dentre outras coisas. Como não consegui fazer funcionar o banimento de um jogador só na versão 0.3.6pl1, sendo isto possível apenas na 0.4.0, resolvi colocar para o tipo de banimento ser na conta toda. Abraços.3 pontos
-
Hoje vamos dar continuidade as aulas. Aprenderemos Lógica, Algorítimos e Organização, que para mim são as coisas básicas que TODO programador deve conhecer. Lógica de Programação O que é Lógica de Programação? é uma sequencia de pensamentos com fim de atingir determinado resultado. E esses pensamentos, podem ser usados para construir uma sequencia lógica, afim de executar uma ação da maneira mais simples o possível. Isso é o conceito básico de lógica de programação. Algorítimos Agora começa a parte divertida. Algorítimo é uma sequencia de comandos(instruções) para executar tal ação, como uma receita que sua mãe usa para fazer bolos. Quaisquer sequencias de instruções podem ser consideradas algorítimos. "Algorítimo de Chupar uma bala". • Pegar a bala • Retirar o papel • Chupar a bala • Jogar o papel no lixo Todos algorítimos devem ser simples e objetivos. Organização Essa é uma parte realmente "importante": (O Mock deveria ler isso todo dia, falo mesmo) Endentação: Endentação, identação ou edentação, é o espaçamento no inicio de qualquer paragrafo, afim de diferenciar e melhorar a visualização dos escopos do algorítimo. Código sem indentação (Na verdade ele tem, mas eu tirei para usar de exemplo) function doPlayerAddAchiev(cid, achievid) local pid = getPlayerGUID(cid) local value = tonumber(getPlayerAchievById(cid, achievid)) if value == -1 then return true end if value == 0 then db.executeQuery("INSERT INTO `achievements` (`player_id`, `achievement_id`, `value`) VALUES ('"..pid.."', '"..achievid.."', '1');") end if (tonumber(getPlayerAchievById(cid, achievid)) >= achievs[achievid].qt) then doPlayerSendTextMessage(cid,22, 'Você recebeu a conquista "'..achievs[achievid].name..'"') db.executeQuery("UPDATE `achievements` SET `value` = ".. -1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") doPlayerAddAchievPoint(cid, achievs[achievid].pt) else db.executeQuery("UPDATE `achievements` SET `value` = ".. (tonumber(getPlayerAchievById(cid, achievid))) + 1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") end doPlayerSave(cid) return true end Código com identação: function doPlayerAddAchiev(cid, achievid) local pid = getPlayerGUID(cid) local value = tonumber(getPlayerAchievById(cid, achievid)) if value == -1 then return true end if value == 0 then db.executeQuery("INSERT INTO `achievements` (`player_id`, `achievement_id`, `value`) VALUES ('"..pid.."', '"..achievid.."', '1');") end if (tonumber(getPlayerAchievById(cid, achievid)) >= achievs[achievid].qt) then doPlayerSendTextMessage(cid,22, 'Você recebeu a conquista "'..achievs[achievid].name..'"') db.executeQuery("UPDATE `achievements` SET `value` = ".. -1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") doPlayerAddAchievPoint(cid, achievs[achievid].pt) else db.executeQuery("UPDATE `achievements` SET `value` = ".. (tonumber(getPlayerAchievById(cid, achievid))) + 1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") end doPlayerSave(cid) return true end Dá para perceber uma diferença bem grande na parte de visualização, certo? Nomenclatura: Essa é outra parte importante que poucos prestam atenção. Você deve criar os códigos para os OUTROS (mesmo que você não for liberar ele), e você deve imaginar que TODO mundo não entende nada de programação. Por isso, você deve usar nomes simples e sugestivos. Você NUNCA deve usar nomes assim: local var_que_solta_raio_lasers_e_panz = 12 Tente sempre ser sugestivo, nomes mais simples: local quantidade_de_stones = 12 Comentários: Essa é uma das partes mais importantes, na minha opinião. Sempre que for começar alguma ação ou escopo, comente no final da 1º Linha o que ele faz, como ele faz e por que ele faz. Como eu já disse, você deve pensar que está programando para pessoas leigas. Sem comentário: function doPlayerAddAchiev(cid, achievid) local pid = getPlayerGUID(cid) local value = tonumber(getPlayerAchievById(cid, achievid)) if value == -1 then return true end if value == 0 then db.executeQuery("INSERT INTO `achievements` (`player_id`, `achievement_id`, `value`) VALUES ('"..pid.."', '"..achievid.."', '1');") end if (tonumber(getPlayerAchievById(cid, achievid)) >= achievs[achievid].qt) then doPlayerSendTextMessage(cid,22, 'Você recebeu a conquista "'..achievs[achievid].name..'"') db.executeQuery("UPDATE `achievements` SET `value` = ".. -1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") doPlayerAddAchievPoint(cid, achievs[achievid].pt) else db.executeQuery("UPDATE `achievements` SET `value` = ".. (tonumber(getPlayerAchievById(cid, achievid))) + 1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") end doPlayerSave(cid) return true end Com Comentário: function doPlayerAddAchiev(cid, achievid) local pid = getPlayerGUID(cid) -- declaração da variavel com GUID do player. local value = tonumber(getPlayerAchievById(cid, achievid)) -- Declaração da váriavel que irá conter o valor do Achiev. if value == -1 then return true end -- Se o valor for 0, então ele irá retornar true e irá parar o código aqui. if value == 0 then db.executeQuery("INSERT INTO `achievements` (`player_id`, `achievement_id`, `value`) VALUES ('"..pid.."', '"..achievid.."', '1');") end -- Se ele for 0, então ele irá mudar o valor para 1. if (tonumber(getPlayerAchievById(cid, achievid)) >= achievs[achievid].qt) then -- Se o valor for maior ou igual ao valor da tabela, então ele irá executar o escopo. doPlayerSendTextMessage(cid,22, 'Você recebeu a conquista "'..achievs[achievid].name..'"') db.executeQuery("UPDATE `achievements` SET `value` = ".. -1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") doPlayerAddAchievPoint(cid, achievs[achievid].pt) else -- Se não, ele executará esse escopo. db.executeQuery("UPDATE `achievements` SET `value` = ".. (tonumber(getPlayerAchievById(cid, achievid))) + 1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") end doPlayerSave(cid) return true end Finalização Espero que tenham gostado dessa aula, tentei ser direto e simplório. Porém eu falei só sobre o básico, só a ponta do iceberg. Quem tiver mais interesse, o google tem milhares de apostilas sobre Algorítimos de Lógica de Programação. Link da primeira aula: http://www.xtibia.com/forum/topic/201079-aulas-basicas-com-o-sr-iunix-1-lua-o-que-e3 pontos
-
Introdução: Basicamente é uma função que força uma criatura a usar uma spell. Ignorando mana, vocação, level e tudo mais. Ela é uma função meio antiga, estou com MUITA preguiça de refazer ela. E ela tem um erro que eu realmente não consigo me lembrar.(Acho que criaturas não podem hitar com a magia se o monster já não for target) Explicação: Instalando: Abra o teu Arquivo luascript.cpp e procure por: //getCreatureHealth(cid) lua_register(m_luaState, "getCreatureHealth", LuaInterface::luaGetCreatureHealth); abaixo disso coloque: //doCreatureCastSpell(cid, spellname) lua_register(m_luaState, "doCreatureCastSpell", LuaInterface::luaDoCreatureCastSpell); Agora procure por: int32_t LuaInterface::luaDoPlayerJoinParty(lua_State* L) { //doPlayerJoinParty(cid, lid) ScriptEnviroment* env = getEnv(); Player* leader = env->getPlayerByUID(popNumber(L)); if(!leader) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } Player* player = env->getPlayerByUID(popNumber(L)); if(!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } g_game.playerJoinParty(player->getID(), leader->getID()); lua_pushboolean(L, true); return 1; } E coloque isso antes (pule umas duas linhas de espaço para não confundir e deixar organizado) int32_t LuaInterface::luaDoCreatureCastSpell(lua_State * L) { //DoCreatureCastSpell (uid, spell) std::string spell_name = popString(L); ScriptEnviroment* env = getEnv(); Creature * creature = env-> getCreatureByUID (popNumber (L)); if (! creature) { errorEx (getError (LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean (L, false); return 1; } InstantSpell* spell = g_spells->getInstantSpellByName (spell_name); if(spell) { if (spell-> castSpell(creature)) { lua_pushboolean (L, true); return 1; } } lua_pushboolean (L, false); return 1; } Agora vá em luascript.h e procure por: static int32_t luaDoPlayerAddMoney(lua_State* L); e coloque isso abaixo: static int32_t luaDoCreatureCastSpell(lua_State* L); Utilização: function onSay(cid, words, param, channel) local su = getCreatureSummons(cid)[1] doCreatureCastSpell(su, param) doPlayerSay(cid, getCreatureName(su) .. ", use " .. param .. "!") doSendAnimatedText(getCreaturePosition(su), param, math.random(255)) return true end Agradecimentos: Obrigado ao Kydrai pela ajuda com alguns erros.2 pontos
-
Me pediram por mensagem pessoal, uma talkaction que resolvesse strings de equações de primeiro grau. Fiz um pog interessante e ela está funcionando bem legal. 10:28 1x+3x+4x+88 = 0 10:28 8x = -88 10:28 x = -11 1. Crie um arquivo de nome calc.lua em talkactions/scripts, cole o conteúdo abaixo: local delay = 500 function onSay(cid, words, param, channel) local a = 0 local b = 0 local c = 0 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, param .." = 0") for s, x2 in string.gmatch(param, "([-+]*)%s*(%d+)x²") do param = string.gsub(param, "[-+]*%s*%d+x²", "") a = a + tonumber(s .. x2) end for s, x in string.gmatch(param, "([-+]*)%s*(%d+)x") do param = string.gsub(param, "[-+]*%s*%d+x", "") b = b + tonumber(s .. x) end for s, n in string.gmatch(param, "([-+]*)%s*(%d+)") do c = c + tonumber(s .. n) end if param == "" then return doPlayerSendCancel(cid, "O comando precisa de uma equação válida.") end addEvent(doPlayerSendTextMessage, delay, cid, MESSAGE_STATUS_CONSOLE_RED, "1. Detectar o grau da equação.") if a > 0 then local delta = (math.pow(b, 2) - (4 * a * c)) local x1, x2 if delta >= 0 then x1 = ((-b - math.sqrt(delta)) / 2 * a) x2 = ((-b + math.sqrt(delta)) / 2 * a) end addEvent(doPlayerSendTextMessage, 2 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "Essa é uma equação de segundo grau.") addEvent(doPlayerSendTextMessage, 3 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "2. Organizar a equação.") addEvent(doPlayerSendTextMessage, 4 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "".. a .."x²".. (b < 0 and (" - ".. (b * -1)) or (" + ".. b)) .."x".. (c < 0 and (" - ".. (c * -1)) or (" + ".. c)) .." = 0") addEvent(doPlayerSendTextMessage, 5 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "2. Calcular o discriminante da equação.") addEvent(doPlayerSendTextMessage, 6 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "D = b² - 4ac = ".. delta .."") if delta < 0 then addEvent(doPlayerSendTextMessage, 7 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "O discriminante é menor que 0, a equação não possui raízes reais.") return true elseif delta == 0 then addEvent(doPlayerSendTextMessage, 7 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "O discriminante é igual a 0, a equação possui duas raízes iguais.") addEvent(doPlayerSendTextMessage, 8 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "X¹ = X² = -b / 2 * a = ".. x1 .."") return true else addEvent(doPlayerSendTextMessage, 7 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "O discriminante é maior que 0, a equação possui duas raízes diferentes.") addEvent(doPlayerSendTextMessage, 8 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "X = (-b - ²D) / 2 * a = ".. x1 .."") addEvent(doPlayerSendTextMessage, 9 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "X² = (-b + ²D) / 2 * a = ".. x2 .."") return true end addEvent(doPlayerSendTextMessage, 10 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "Fácil, né?") elseif b > 0 then local x = -c/b addEvent(doPlayerSendTextMessage, 2 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "Essa é uma equação de primeiro grau.") addEvent(doPlayerSendTextMessage, 3 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "2. Organizar a equação.") addEvent(doPlayerSendTextMessage, 4 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "".. b .."x".. (c < 0 and (" - ".. (c * -1)) or (" + ".. c)) .." = 0") addEvent(doPlayerSendTextMessage, 5 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "3. Passe o que não está multiplicando x para o outro lado.") addEvent(doPlayerSendTextMessage, 6 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "".. b .."x = ".. -c .."") addEvent(doPlayerSendTextMessage, 7 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "4. Passe o que está multiplicando x para outro lado, dividindo.") addEvent(doPlayerSendTextMessage, 8 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "x = ".. x .."") addEvent(doPlayerSendTextMessage, 9 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "Facil, né?") else addEvent(doPlayerSendTextMessage, 2 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "Essa não é uma equação válida.") end return true end 2. Adicione a seguinte linha no seu talkactions.xml <talkaction words="/calc" event="script" value="calc.lua"/> Bugs conhecidos - Você precisa colocar todos os coeficientes, mesmo que seja 1, do contrário o burro sistema não consegue resolver. - Se você embaralhar muito a equação, talvez ocorra algum erro, por exemplo: 1x + 44 + 32 - 1x + 2x + 44 - 2x + 3x - 32 + 1x Abraços.2 pontos
-
[Encerrado] [Duvida] Como Instalar Duel System
Yan Oliveira e um outro reagiu a Slicer por um tópico no fórum
mano o duel das versoes x.7 n sao mais pora party... party eh soh party... o duel eh por Order! tu da order na pessoa q queres duelar e dai ela da order em ti para aceitar u,U pelo amor de deus VAI LER MANO!!! ta tudo detalhado nos changes logs de cada versao --' custa perder uns minutos? eu te garanto q perco bastante tempo soh pra fazer eles --' se fosse americano ainda.. mas parece q ate eles olham isso --'2 pontos -
tem gente que não se toca ou não tem o senso do ridículo.2 pontos
-
Eaí, mais uma função aí pra vocês. O que ela faz é o seguinte: ela retorna o artigo correto da string (na língua inglesa) Por exemplo: getArticle("potato") > "a" getArticle("axe") > "an" Acho que deu pra entender, a função: function getArticle(string) local x = false if isInArray({"a","e","i","o","u"},string.sub(string,0,1):lower()) then x = true end return (x == true and "an" or "a") end Versão gigante do Slicer (deem rep pra ele se forem usar) function getArticle(string) return isInArray({"a","e","i","o","u"},string.sub(string,0,1):lower()) and "an" or "a" end2 pontos
-
Doremoveitemsfrompos(Pos, Items[, Quants])
tonynamoral reagiu a MatheusGlad por um tópico no fórum
O objetivo da função é remover varios itens com diferentes quantidades de um sqm, se remover todos retorna true, caso contrario false: function doRemoveItemsFromPos(pos, items, quants) -- by MatheusMkalo items = type(items) == "table" and items or {items} local positems = {} local stat = false local quantss = {} local itemss = {} for i,x in ipairs(items) do if not isItemStackable(x) then for s = 1, quants[i] do table.insert(itemss, x) table.insert(quantss, 1) end else table.insert(itemss, x) table.insert(quantss, quants[i]) end end quants = quantss items = itemss local needitems = #items for i = 1,254 do pos.stackpos = i if table.find(items, getThingFromPos(pos).itemid) and (not quants or getThingFromPos(pos).type >= quants[table.find(items, getThingFromPos(pos).itemid)] or (getThingFromPos(pos).type == 0 and quants[table.find(items, getThingFromPos(pos).itemid)] == 1)) then local a = table.find(items, getThingFromPos(pos).itemid) table.insert(positems, {getThingFromPos(pos), quants[a]}) table.remove(quants, a) table.remove(items, a) end if #positems == needitems and #items == 0 then stat = true break end end if stat then for i,x in pairs(positems) do doRemoveItem(x[1].uid, x[2]) end return true end return false end Parametros: pos - Posição do sqm que vai ser removido os itens. items - Table com os ids dos items que serão removidos quants (opcional) - Quantidades diretamente proporcionais aos ids. Exemplo de uso: if doRemoveItemsFromPos({x=1000, y=1000, z=7}, {2472, 2494, 2160}, {1, 1, 50}) then doPlayerSendTextMessage(cid, 21, "Parabens") else doPlayerSendTextMessage(cid, 21, "Não tem os items nescessarios na pos.") end Como voces podem ver a table dos ids {2472, 2494, 2160} e suas quantidades {1, 1, 50} 2160 = Crystal Coin, ou seja precisam ter 50 crystal coins na pos. Obs: A Quantidade maior que 1 funciona em qualquer item, agrupavel ou nao. Se voce botar a quantidade de um item agrupavel maior que 100 nao ira funcionar. Em breve funcionara.1 ponto -
Faz tempo que estou querendo colaborar com Xtibia, e hoje lá vai um mini tutorial para ajudar quem estiver com alguma dificuldade ao tentar abrir o seu map no remeres. Eu procurei diversos Tutoriais para tentar sanar meu problema com map editor, não encontrando nenhum que resolvesse eu fiz um teste e deu certo, e agora vou compartilhar. "Meu problema não era quando eu tentava criar um mapa do zero, mas sim quando eu queria editar os mapas de outros autores." para executar este tutorial eu usei o seguinte mapa: Map:> mastermap.otbm Autor:> Brun123 Tutorial: Se ao tentar abrir seu Map com o Remeres e ele aparecer com o "chão" vermelho em algumas partes, ou com partes do tibia como na imagem abaixo: Feche o Remeres e faça o seguinte: ►►Vá na pasta "C:\Arquivos de Programa\Remere's Map Editor\data\854" (Porque a pasta "854"?Essa é a pasta com os arquivos compatíveis com a versão do poketibia 8.54) Se você fizer tudo certo irá ver esses arquivos dentro da pasta: ►► Minimize esta pasta e agora vá em seu "Ot" ...data\ e copie os arquivos "items.xml" e "items.otb" e cole-os na pasta "C:\Arquivos de Programa\Remere's Map Editor\data\854" (vai perguntar se deseja substituir clique em ok) ►► Agora procure pelo arquivo "creatures.xml" na pasta do seu "Ot" e também cole-o na pasta "C:\Arquivos de Programa\Remere's Map Editor\data\854" e pronto. Atenção: para visualizar seu mapa e fazer edições nele abra-o diretamente sem abrir o Remere's por exemplo clique duas vezes em "mastermap.otbm" Ao abrir o mapa diretamente pelo Remeres ficará assim: Você só estará vendo seu minimap apertando a tecla "M", mas o resto do conteúdo não. Ao abrir seu mapa cicando duas vezes no ìcone "seu mapa.otbm" o Remeres irá carregar as configurações e aperecerá essa informação: Clique em "ok" e seu mapa será carregado. Depois poderá aparecer esta outra informação no seu editor: Caso essa mensagem apareça é por que o mapa foi salvo em uma versão mais antiga do Remeres e fica ao seu critério atualizar ou não. ►E como meu já disse abra seu mapa diretamente sem executar o Remere Clicando diretamente no icone do "seumap.otb": Você verá que seu mapa agora está completo sem nenhum erro! Mas espere, ao clicar em Pallete/Creature Pallete não estiver visualizando as imagens de seus pokemons, Shiny/pokes e nem dos NPC's então você deverá exporta-los: ►Vá no menu superior do Remere e Clique em "File" depois em "Import►Import Monsters/NPC..." Irá abrir uma janela para que você aponte onde estão esses arquivos tipo "xml". Eles estão em "...\data\monster\pokes" aperte "Ctrl+A" para selecionar todos os aquivos tipo "xml" depois clique em "Abrir". ►Faça a mesma coisa com os demais arquivos: Seus "NPC's" estão em "...\data\NPC" Carregue esses Arquivos também. Seus "Pokemons Shiny" estão em "...\data\monster\pokes\Shiny". Pronto tudo carregado com êxito e você pode editar o mapa do jeito que quiser. Meu primeiro Tutorial espero ter postado no lugar certo e que possa ajudar quem está com o mesmo problema que eu tive. Desculpem algum erro ou se fui muito repetitivo, pois eu vi que em alguns tutoriais tem muito Flood por causa dos usuários que não entenderam bem o que foi escrito. Falow ai galera, e quem sabe até um próximo tutorial ! Pasta Data do Remere's com as modificações do tutorial >> http://ads.tt/4ZGomA1 ponto
-
[9.60/9.61] The Forgotten Server V0.2.14 (Mystic Spirit)
paulohenriquesouza reagiu a pessoa93 por um tópico no fórum
The Forgotten Server Version: 0.2.14 (Mystic Spirit)! A lista completa de alterações pode ser encontrada em doc / changelog. Este lançamento vem com suporte para o protocolo de 9.60/9.61, uma série de correções de bugs, otimizações, duas falhas potenciais fixa e melhorias de código. Novos recursos sem lixo nas casas, novos equipamentos, novas montarias, novos itens e muito mais! Microsoft Visual C + + Redistributable Package 2010 é necessário para executar o servidor: 32-bit download do pacote 64-bit download do pacote Código fonte: Subversion cliente: svn / svn.otland.net/public/forgottenserver/tags/0.2.14 / Procurar: [forgottenserver] Index of / tags/0.2.14 Download: 32-bits: http://www.4shared.c...214-win32.html? 62-bits: http://www.4shared.c...214-win64.html? Créditos: OTland, eu apenas traduzi e trouxe para cá para que todos tenham acesso aos servidores 9.60!1 ponto -
"utani Hur" Com Rastro De Fogo
slekron reagiu a gonorreiaswat por um tópico no fórum
Boa noite. Fui ajudar um "amigo" do forum que estava precisando desta Spell, e fazendo busca na internet percebi que não era tão fácil achá-la. No entanto, eu lembrava que já havia em meu PC. Sem mais delongas, vamos ao Script. Segue abaixo: Crie um arquivo "vip_hur.lua" na pasta Data/Spells/Scripts/Support. Cole o código abaixo dentro e salve. Agora vá no arquivo "Spells.xml" (Data/Spells) E cole a tag abaixo: Salve e feche. ScreenShot: Créditos?: Infelizmente não sei quem o criou' Espero ter ajudado alguém aí. Qualquer coisa que estiver ao meu alcance em ajudar, favor entrar em contacto.1 ponto -
• SPR & DAT Pokemon 5° Geraçao - Stigal [Download]• • Menu: ├ Informações; ├ Download; ├ PrintScreen; └ Creditos. • Informações Basicas • • Download's • [Pokemon] SPR e DAT [Pokemons 5 Geração] (4shared) http://www.4shared.com/rar/E836cXv0/Pokemon_Sprite_5_Gerao_-_Stiga.html Sprite Editor [v1.3.0] (4shared) http://www.4shared.com/rar/ZQ1w2BpH/Stigal_-_Spriter_Editor.html? Scan [Pokemon] SPR e DAT [Pokemons 5 Geração] (Virus Total) https://www.virustotal.com/file/030d85e9fe0bb5cab4e8159e3247b86a633acb35dc0773a03effe17da08cef87/analysis/1347751884/ • Prints De Algumas SPR • • Creditos • Stigal - {Master}1 ponto
-
Beleza galera,estou aqui postando a nova versão Subwat Kamikaze V23.Agora com muitas coisas novas! ATUALIZAÇÔES SUBWAT KAMIKAZE V23 Novas houses com o teleport no templo. Novas hunts com o telport no templo. Novos monsters. Retirado alguns bugs. Reformado os lugares dos itens no templo. Retirado todo o gelo. Colocado grama na city principal e com mais natureza. Novo piso na área de eventos. Novo piso na Super Vip. Reformado o piso do templo. Novas spells IMAGENS TEMPLO SUPER VIP TELEPORTS NOVOS TELEPORTS DOWNLOAD SEM ERRO: http://www.4shared.com/rar/cfUYHBJD/Subwat_Kamikaze_V23_3.html? SCAN:https://www.virustot...sis/1346091759/ Intão é isso galera,comentem com o que voces acharam,e sempre estou trazedo atualizações!Obrigado,de um rep se puder.Flw.1 ponto
-
[Vídeo Tutorial] Como Configurar O Xampp E Utilizar Porta Alternativa
Critical reagiu a MatheusEnjoy por um tópico no fórum
XTibia Exclusive Se você encontrar esse vídeo em outro fórum, por favor reporte. Caso queira ver mais videos como esse acesse XTibiaExclusive. Video http://www.youtube.com/watch?v=AXQOLnwvI0U Desculpe-me pelos erros, fiquei nervoso1 ponto -
Sisteminha De Forja
LuckOake reagiu a MaXwEllDeN por um tópico no fórum
Autor: MaXwEllDeN (Maxwell Denisson) Versão testada: TFS 0.3.6, 8.54 #Introdução Vish, eu tava aqui de boa vasculhando meus scripts e achei esse sistema de Forja, é antigo e pode conter bugs, então quem encontrar por favor reporte (: #Instalação @Actions Na pasta scripts copie qualquer arquivo com a extenção lua, e renomeie ele para Smith, abra, delete tudo que houver dentro dele, copie esse conteúdo e salve: --[[ ################################################ ## Smith System ## ## Author: Maxwell Denisson(MaXwEllDeN) ## ## Version: 1.0 ## ################################################ ]] function onUse(cid, item, frompos, item2, topos) local tekz, takz, tikz, XTz = {}, {}, {}, {} for _, v in pairs(getAllItemsInPos(topos, {1642, 1643, 1644, 1645, 1617, 1618, 1620, 1621})) do table.insert(takz, v) end for _, v in pairs(takz) do if not isInArray(tikz, v.uid) then if (v.itemid ~= 2555) then table.insert(XTz, v) end table.insert(tikz, v.uid) table.insert(tekz, v.itemid) end end if not (isInArray(tekz, 2555)) then return false end local u, d = _SMITHY_.getRevenue(topos) if (u == 0) then for i, v in pairs(d) do if (math.random(100) > 49) then local tp = (v.type > 0) and v.type or 1 doRemoveItem(v.uid, tp) end end if (#d > 0) then doSendMagicEffect(topos, 3) doPlayerSendTextMessage(cid, 21, "Failure!") end return true end local rec = _SMITHY_.receitas[u] if (math.random(10) + _SMITHY_.getLevel(cid) < rec.dif) then for i, v in pairs(d) do if (math.random(100) > 49) then local tp = (v.type > 0) and v.type or 1 doRemoveItem(v.uid, tp) end end doSendMagicEffect(topos, 3) return doPlayerSendTextMessage(cid, 21, "Failure!") end local xp = math.random(10) + rec.dif doSendAnimatedText(getThingPos(cid), xp, 125) _SMITHY_.addExp(cid, xp) if (_SMITHY_.getExp(cid) >= _SMITHY_.getExpToNextLevel(cid)) then doPlayerSendTextMessage(cid, 22, "You advanced from level ".. _SMITHY_.getLevel(cid) .. " to level ".. _SMITHY_.getLevel(cid) + 1 .. ", in smithy skills.") _SMITHY_.addLevel(cid, 1) end doPlayerSendTextMessage(cid, 27, "Experience: ".. _SMITHY_.getExp(cid) .. "/".. _SMITHY_.getExpLevel(_SMITHY_.getLevel(cid) + 1) ..".") for _, v in pairs(d) do local tp = (v.type > 0) and v.type or 1 doRemoveItem(v.uid, tp) end doSendMagicEffect(topos, 3) doPlayerSendTextMessage(cid, 25, "You've forged a ".. getItemNameById(rec.ma[1]) .. "!") return doCreateItem(rec.ma[1], rec.ma[2], topos) end TAG: <action itemid = "2422" event = "script" value = "Smith.lua"/> @Libs Na pasta lib copie qualquer arquivo com a extenção lua, e renomeie ele para SmithLib, abra, delete tudo que houver dentro dele, copie esse conteúdo e salve: --[[ ################################################ ## Smith System ## ## Author: Maxwell Denisson(MaXwEllDeN) ## ## Version: 1.0 ## ################################################ ]] _SMITHY_ = { exp_b = 40, receitas = { --dif = Dificuldade [1] = {dif = 5, -- Staff re = {{5892, 2}, }, ma = {2401, 1} }, [2] = {dif = 10, -- Mercenary Sword re = {{2401, 1}, {9971, 5}, {5887, 3}, {5892, 2}, }, ma = {7386, 1} }, [3] = {dif = 3, -- Huge chuck of crude iron re = {{5880, 20}, }, ma = {5892, 1} }, [4] = {dif = 20, -- Piece of Royal Steel re = {{5880, 10}, {2475, 1}, }, ma = {5887, 3} }, } } _SMITHY_.getRevenue = function (pos) local recs = {} local ipos = {} local posi = {} local block = {1642, 1643, 1644, 1645, 1617, 1618, 1620, 1621, 2555} local IDEx = 0 for i, v in pairs(_SMITHY_.receitas) do recs[i] = {} for _, a in pairs(v.re) do for b = 1, a[2] do table.insert(recs[i], a[1]) end end end local Zk = {} for _, v in pairs(getAllItemsInPos(pos, block)) do if not isInArray(Zk, v.uid) then table.insert(ipos, v) table.insert(Zk, v.uid) end end for _, v in pairs(ipos) do local t = (v.type > 0) and v.type or 1 for te = 1, t do table.insert(posi, v.itemid) end end for _, v in pairs(recs) do local AE = true for x, i in pairs(posi) do if (AE) then if (not isInArray(v, i)) or (#v ~= #posi) then AE = false else IDEx = _ end end end end if (#recs < 1) then return 0, ipos else return IDEx, ipos end end _SMITHY_.getExp = function (uid) if (getPlayerStorageValue(uid, 58913) < 1) then setPlayerStorageValue(uid, 58913, 0) end return getPlayerStorageValue(uid, 58913) end _SMITHY_.getLevel = function (uid) if (getPlayerStorageValue(uid, 58912) < 1) then setPlayerStorageValue(uid, 58912, 1) end return getPlayerStorageValue(uid, 58912) end _SMITHY_.addLevel = function (uid, ammount) local level = _SMITHY_.getLevel(uid) return setPlayerStorageValue(uid, 58912, level + ammount) end _SMITHY_.getExpToNextLevel = function (uid) return _SMITHY_.getExpLevel(_SMITHY_.getLevel(uid) + 1) end _SMITHY_.getExpLevel = function (level) return level * (_SMITHY_.exp_b) + (level - 1* (_SMITHY_.exp_b)) end _SMITHY_.setExp = function (uid, ammount) return setPlayerStorageValue(uid, 58913, ammount) end _SMITHY_.addExp = function (uid, ammount) local xp = _SMITHY_.getExp(uid) return _SMITHY_.setExp(uid, xp + ammount) end function getAllItemsInPos(pos, block) local results = {} for _ = 1, 255 do local findPos = {x = pos.x, y = pos.y, z = pos.z, stackpos = _} local item = getThingFromPos(findPos) if (not isInArray(block, item.itemid)) and (item.uid > 1) then table.insert(results, item) end end return results end #Configuração -- Mercenary Sword [2] = {dif = 10, -- Dificuldade para forjar o item(Influencia na experiência ganha) re = { -- RECEITA DO ITEM -- ID, QUANTIDADE {2401, 1}, {9971, 5}, {5887, 3}, {5892, 2}, }, -- RESULTADO DA FORJA -- ID, QUANTIDADE ma = {7386, 1} }, Bye [:1 ponto -
Porta Que So Gm Abre
EduziTow reagiu a MaXwEllDeN por uma questão
OnlyGM.lua local id_aberta = 1950 -- Id da porta aberta local id_fechada = 1951 -- Id da porta fechada local group_id = 6 -- Somente quem tiver no mínimo esse group poderá abrir a porta. local simple = { [id_aberta] = id_fechada, [id_fecahda] = id_aberta } function onUse(cid, item) if getPlayerGroupId(cid) < group_id then doPlayerSendCancel(cid, "Você não tem permissão para abrir esta porta!") return false end return doTransformItem(item.uid, simple[item.itemid]) end <action actionid = "7953" event = "script" value = "OnlyGM.lua"/> Depois só é abrir seu Map Editor e colocar na porta a actionoid 7953. Done!1 ponto -
Pokemon Buster
TheHerof reagiu a pokemonbuster por um tópico no fórum
O mais novo Server de Poketibia Online. Contém Tv System Addons System Clan System PvP System Dive System Auto Loot System Headbutt System Lottery System Help System Bike System Guid System Npc que troca o nome do pokemon Respaw de Pokemon Shiny Fixo e Aleatorio Varias quest's Client não requer ip change não é via hamachi, online 24 horas Inicie já sua aventura (: http://pokemonbuster.servegame.com/ Print Screen >>>1 ponto -
se vc n ta usando o OTClient eh soh pegar o arquivo XML/Groups.xml de alguma versao mais antiga... se tiver usando o OTClient eh impossivel no momento.. soh esperando a 1.8 ;/1 ponto
-
Sairei Da Equipe.
Yan Oliveira reagiu a caotic por um tópico no fórum
Vou ser sincero. Ele saiu da equipe por inveja e idiotice. Só porque o Yan foi promovido ele ficou de "mimi". Prezyoso você sonhava com a moderação mais não fazia nada. No começo era um membro "bom" depois viro um desgosto. Enfim. Fez bem em sair da equipe ;d.1 ponto -
Partner System 2.0 [Atualizado]
TiagoBordin1988 reagiu a LuckOake por um tópico no fórum
Opa, obrigado por avisar. Bug corrigido.1 ponto -
Item Que Adiciona Skill Ao Clicar
Yan Oliveira reagiu a Oneshot por uma questão
@tonynamoral Já tive o trabalho de fazer o script e testar, não darei suporte por instalação incorreta. @SmiX Só quis dizer que existe uma função que adiciona níveis de skill. @Slicer Funciona. Só colocar SKILL__MAGLEVEL no lugar de SKILL_FIST.1 ponto -
@Roksas Não vou falar nada, mas estude mais Lua, ok? Pois desse jeito, você está parecendo o SkyLigh @Maenilse local damageTypes = {COMBAT_HOLYDAMAGE, COMBAT_FIREDAMAGE, COMBAT_ICEDAMAGE, COMBAT_PHYSICALDAMAGE, COMBAT_ENERGYDAMAGE, COMBAT_EARTHDAMAGE, COMBAT_DEATHDAMAGE} local effects = {11, 11, 11, 11, 11, 11, 11} local shootEffects = {11, 17, 18, 19, 7, 27, 28} local combats = {} for i = 0, 6 do combats[i] = createCombatObject() setCombatParam(combats[i], COMBAT_PARAM_TYPE, (damageTypes[i] or 255)) setCombatParam(combats[i], COMBAT_PARAM_EFFECT, (effects[i] or 255)) setCombatParam(combats[i], COMBAT_PARAM_DISTANCEEFFECT, (shootEffects[i] or 255)) setCombatFormula(combats[i], COMBAT_FORMULA_LEVELMAGIC, -25, -25, -25, -25) end function onUseWeapon(cid, var) for i = 0, (#combats - 1) do addEvent(doCombat, i * 100, cid, combats[i], var) end return true end1 ponto
-
Algum Script Que Fassa A Posta Feixar Sozinha?
Yan Oliveira reagiu a Slicer por uma questão
aprender tb deve ser luxo neh? --'1 ponto -
Eu Queria Saber Como Botar 1 Arena Vip No Meu Ot 8.6
lucasalisson reagiu a Roksas por um tópico no fórum
Aqui está, boa sorte e BENÇA ) http://www.xtibia.com/forum/topic/133661-moveevent-action-perfect-vip-system-15/1 ponto -
Uma olhada no LUA_FUNCTIONS localizado em data/docs doPlayerAddSkill(cid, skill[, amount = 1[, round = false]]) local config = { skillName = SKILL_FIST, skillAmount = 5, magicEffect = CONST_ME_MAGIC_BLUE, removeable = "yes" } --[[ SKILL_FIST SKILL_CLUB SKILL_SWORD SKILL_AXE SKILL_DISTANCE SKILL_SHIELD SKILL_FISHING SKILL__MAGLEVEL SKILL__LEVEL ]]-- function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerAddSkill(cid, config.skillName, config.skillAmount, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Your ".. SKILL_NAMES[config.skillName] .." has grown up.") doSendMagicEffect(fromPosition, config.magicEffect) if getBooleanFromString(config.removeable) == true then doRemoveItem(item.uid, 1) end return true end1 ponto
-
Religiosos Compareçam Aqui
DiogoTemporario reagiu a Fickss10 por um tópico no fórum
Sabe o que é foda? nossos princípios morais são todos fundamentados em um livro, até higiene foi colocada na bíblia, que é dividida em períodos, o homem quando experimentou o fruto do pecado, teve noção da maldade, e da bondade, o homem não é imperfeito e sim perfeito na compreensão do bem e do mal, ele diferentemente pode compreender e escolher, em sua existência primária sem esse entendimento ele seria apenas uma marionete nas cordas, e nada do mundo atual não existiria pois não sentiriamos a necessidade de tudo isso.1 ponto -
Provavelmente seu servidor possui um arquivo chamado burst_arrow.lua na pasta data/weapons/scripts, abra-o, apague tudo que há dentro dele e cole o seguinte conteúdo abaixo: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local area = createCombatArea({ {1, 1, 1}, {1, 3, 1}, {1, 1, 1} }) setCombatArea(combat, area) local function getPlayerWeaponId(cid) -- By Oneshot local ret = 0 for slot = 6, 5, -1 do local item = getPlayerSlotItem(cid, slot) if item.itemid > 0 and isInArray({1, 2, 3, 4}, getItemInfo(item.itemid).weaponType) then ret = item.itemid break end end return ret end function onUseWeapon(cid, var) if getPlayerWeaponId(cid) == 7438 then return doCombat(cid, combat, var) end doPlayerSendCancel(cid, "You cannot use this arrow with this ordinary bow.") return false end1 ponto
-
rsrs. Pense! Que tal colocar um Tile Non-PVP? Ele não poderia atacar players, mas se regeneraria e poderia atacar monstros )1 ponto
-
[Encerrado] Itens.xml E Possivel ?
Yan Oliveira reagiu a Piabeta Kun por um tópico no fórum
vá no seu items.xml de um control+F e procureo por desc e copie toda description e coloque no item desejado, altere so o que voce quer que apareça!1 ponto -
[Encerrado] Como Aumentar O Catch Das Balls
GuiihMarquezi reagiu a iRyu por um tópico no fórum
@AncientFury, Va em "Pasta do seu servidor/ data/ actions/ catch.lua" e modifique esta parte: local ballcatch = { [2394] = {cr = 3, on = 24, off = 23, ball = 11826, send = 47, typeee = "normal"}, [2391] = {cr = 6, on = 198, off = 197, ball = 11832, send = 48, typeee = "great"}, [2393] = {cr = 10, on = 202, off = 201, ball = 11835, send = 46, typeee = "super"}, [2392] = {cr = 15, on = 200, off = 199, ball = 11829, send = 49, typeee = "ultra"}, } Para modificar o rate das balls, seria no "cr".1 ponto -
Alguem Teria
fredpadua reagiu a DiogoTemporario por um tópico no fórum
http://lmgtfy.com/?q=anderson+ferminiano1 ponto -
1 ponto
-
Abra sua pasta data/talkactions, lá dentro crie um arquivo chamado banplayer.lua e cole isto dentro: local default_comment = "" local default_lenght = 1 -- ban time in hours function onSay(cid, words, param) local parametres = string.explode(param, ",") if(parametres[1] ~= nil) then local accId = getAccountIdByName(parametres[1]) if(accId > 0) then local lenght = default_lenght local comment = default_comment if(parametres[2] ~= nil and tonumber(parametres[2]) > 0) then lenght = tonumber(parametres[2]) end if(parametres[3] ~= nil) then comment = parametres[3] end doAddBanishment(accId, lenght * 3600, 23, ACTION_BANISHMENT, comment, getPlayerGUID(cid), comment) local player = getPlayerByNameWildcard(parametres[1]) if(isPlayer(player) == TRUE) then doRemoveCreature(player) end else doPlayerSendCancel(cid, "Player with name " .. parametres[1] .. " doesn't exist.") end else doPlayerSendCancel(cid, "You must enter name.") end return true end Abra o arquivo talkactions.xml e insira essa tag: <talkaction log="yes" words="/ban" access="3" event="script" value="banplayer.lua"/> Agora para banir faça o seguinte, exemplo: /ban Nome,Tempo,Razão /ban Roksas, 1 , Desrespeitou as regras Caso não funcione, mostre o erro. Diga oque aconteceu e tentarei lhe ajudar! BENÇA ) @EDIT Baseando-me no que o Slicer disse, se não der certo meu Script, irei anexar o groups.xml e você tenta substituir! Me fale o resultado. groups.xml1 ponto
-
Olha aki Ouve este erro eu Baxei xampp E reinstalei E pegou , Talvez seja istou ou você fez algo errado.1 ponto
-
[Encerrado] [Wodbo] Como Eu Reseto Todos Os Itens Do Ot?
luizhenrique99 reagiu a dragonfight por um tópico no fórum
players_items, vai procurando pelo id do item e excluindo. se deletar tudo, vai sumir o buffs do wodbo.1 ponto -
Vá a pasta data/actions/scripts e crie um arquivo chamado itemspell.lua Adicione o script: function onUse(cid, item, frompos, var) docastspell(cid, "Berserk") return true end Para editar, mude onde está Berserk (no caso é a instant name do exori) pela instant name da spell escolhida. Agora volte a pasta data/actions e abra o arquivo actions.xml Adicione a tag: <action itemid="XXXX" event="script" value="itemspell.lua"/> Mude o XXXX pelo ID do item que será usado para a spell.1 ponto
-
A primeira spell, você edita uma ou cria uma normal, sem nada. E no final substitua a função castSpell, por essa: function onCastSpell(cid, var) local max_sqm = 3 -- Quantidade máxima que empurrará local pos = getPosByDir(getCreaturePosition(cid), getCreatureLookDirection(cid), 1) pos.stackpos = 253 if (isCreature(getThingFromPos(pos).uid)) then doTeleportThing(getThingFromPos(pos).uid, getClosestFreeTile(getThingFromPos(pos).uid, (getPosByDir(getCreaturePosition(cid), getCreatureLookDirection(cid), max_sqm)))) doSendMagicEffect(pos,10) end return FALSE end Consegui! A Segunda basta você fazer a mesma coisa que a primeira, daremos um exemplo. Abra o arquivo berserk.lua (Exori) e no final de tudo há uma função castSpell, apague-a com seu end e tudo mais, e coloque isso no lugar: function onCastSpell(cid, var) local player = getCreaturePosition(cid) local target = getCreatureTarget(cid) local enemypos = getCreaturePosition(target) if target == isMonster or isCreature then doTeleportThing(cid, enemypos) doSendMagicEffect(enemypos, 2) doCombat(cid, distanceCombat, var) return 1 else doPlayerSendCancel(cid, "Você precisa ter um target para usar essa magia!") end end @EDIT, Se for criar a magia use essa tag: Em verde o ID das vocações que a podem usar! BENÇA )1 ponto
-
Estes estabelecimentos de banqueiro são do tibia global: Já este estabelecimento é de minha autoria e pertence ao mapa de Elysium:1 ponto
-
1 ponto
-
Cara subscrever é voce clicar no Inicio do IP e escrever o seu por cima sem apagar nada. Tipo "127.0.0.7..." Eu vo clicar no Inicio assim "198.0.0.7..." Viu que eu subscrevi 3 numeros de ip eu cliquei no inicio e subscrevi. assim que vc clicar no inicio de um ip no hex editor e digitar 1 numero o numero já existente se apaga e o numero que voce colocou sera fixado. se voce nao intender so me falar que eu farei um video para melhor explicaçao. (assim que meu pc for concertado)1 ponto
-
Tobico RE-ABERTO Xtibiano entrou em contato via PM disponibilizando um novo Link para download. Topico editado e ja em funcionamento. Obs: estamos providenciando um novo scan para o novo arquivo em download.1 ponto
-
E ai galera, a pedido do meu Irmão e do Yan(pelo msn), venho postar uma sprite só para mostrar como está indo o projeto... Há varias outras sprites, que por meio de segurança não irei postar, mas agora vejam o Hyoga de Cisne. Quem quiser entrar para equipe, pode me mandar uma PM. Preciso de Spriter e Mapper1 ponto
-
Bom , estarei atualizando esse topico todo dia (ou tentarei atualizar) sou um mapper inciante e quero aprender muitas coisas novas Sobre mim : Trabalhos em otserver :eu nunca mappei nenhum mapa de nenhum server Tempo de trabalho : 1 mes Pretende fazer algum tabalho : sim , estou livre e qualquer trabalho que oferecer pra mim estarei fazendo1 ponto
-
Scite - Lua Debugger
Caronte reagiu a Demonbholder por um tópico no fórum
Faaaala galera! A pedido do Gustavo, venho aqui para tentar instrui-los a utilizar o renomado programa editor e debugger de códigos lua, o SciTE. O SciTE é provavelmente o melhor free software para debuggar códigos lua da atualidade, pois ele contém diversas bibliotecas já instaladas consigo. é um utilitário conhecido pela fácil configuração, praticidade, variedade de opções, qualidade, entre outras características que fazem dele o melhor. Aparência: Apesar de não ser o foco do programa, o SciTE lhe permite escolher a cor de fundo e apresenta um layout básico, onde é possível verificar o número de cada linha, bem como apontar as linhas nas quais se encontram uma palavra que você desejar procurar. É possível, também, minimizar cada parte do código, dividindo por blocos, seja uma função ou um if, entre outros. Bibliotecas: O SciTE apresenta diversas bibliotecas já instaladas consigo, tais como wx, socket, luasql, lanes, entre várias outras. Pode-se encontrar alguns exemplos de códigos de cada biblioteca na pasta examples. Debugger: O utilitário conta com um poderoso debugger que aponta com precisão qualquer erro no código. Não contém, porém, as bibliotecas de otserv, portanto, as funções de otserv serão vistas como inexistentes pelo SciTE, acusando erro. Para utilizar o debugger, basta pressionar F5. Por fim, para baixar o SciTE junto com as bibliotecas Lua e todos arquivos necessários para tal funcionando, Clique Aqui. Por enquanto é isso, valeu galera!1 ponto -
(Pokemon) Pokemon Venetta
pardow reagiu a linkinhopk por um tópico no fórum
Aonde que essa bosta presta?!?! Citarei pontos negativos e positivos dessa bosta NEGATIVOS: esse lixo so abre de 10h a.m ate "12 p.m eu acho'', o adm é cuzão nao sabe de porra nenhuma e ainda é analfabeto pode entrar no ot para conferir aquelas paradinhas que ficam mandando de tempos em tempos, o ot passa mais tempo off doque on, quando da um save ou clean o jogo cai, trava "particularmente eu nao sei oque acontece nessa porra", é um laag amuado. Agora vamos para os positivos. POSITIVOS:so tem um, e que é pq existe varios ot iguais a este que passam mais tempo online que esse e ainda sao mais de resposa tipo o Getpokemo este sim eu recomendo.1 ponto -
Global Extreme / Gesior Extreme / Db 100%
marciks reagiu a darkanderson por um tópico no fórum
Scan Dll: https://www.virustotal.com/file/5b322512c616daab231e907a0905ce29dd19fe2ba76d01fc173329800c312037/analysis/1333469115/ Scan Servidor: https://www.virustotal.com/file/15dba338947e55cee99855141401c9532aa05ee9501d1decf482472e371cbfcd/analysis/1333469417/ Scan Website: https://www.virustotal.com/file/8dac226449160dbdd2192833d96cb15382b7dc93b3863b98157155d157f40afa/analysis/1333469233/1 ponto -
Eu Queria Saber Como Botar 1 Arena Vip No Meu Ot 8.6
VictorFT reagiu a lucasalisson por um tópico no fórum
esse yan se acha muito reporta sua mae pra ve se ela sai vuando ¬¬'-1 pontos