
Histórico de Curtidas
-
Eddy2000 deu reputação a 9k22 em [Action] Mount System (completo)Nome: Mount System
Versão: 8.70
Sistema: Action
Bem, estava vendo aqui e não encontrei nenhum mount system pareçido com oque tenho aqui intão vou postar para vocês completo e funcionando perfeitamente.
Testado em Crystal server V1.0
Em data/action/script crie um arquivo .lua e adicione:
local function tameMonster(cid, item, itemEx, tame, run, broken) n = math.random(100) if n <= broken then doCreatureSay(cid, "Lost item", TALKTYPE_ORANGE_1) doRemoveItem(item.uid) elseif n > broken and n <= (tame+broken) then doRemoveItem(item.uid) doCreatureSay(cid, "You tamed the mount", TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You tamed the mount "..getCreatureName(itemEx.uid)..".") return true elseif n > (tame+broken) and n <= (tame+broken+run) then doCreatureSay(cid, "the monster fled", TALKTYPE_ORANGE_1) doRemoveCreature(itemEx.uid) else doCreatureSay(cid, "Try again", TALKTYPE_ORANGE_1) end return false end local function inArray(table, value) for i,v in pairs(table) do if (v.name == string.lower(value)) then return i end end return 0 end local mounts = { {item = 13307, name = "wailing widow", id = 1, tame=10, run=39, broken=51}, {item = 13298, name = "terror bird", id = 2, tame=10, run=39, broken=51}, {item = 5907, name = "bear", id = 3, tame=7, run=39, broken=54}, {item = 13295, name = "black sheep", id = 4, tame=7, run=35, broken=58}, {item = 13293, name = "midnight panther", id = 5, tame=10, run=39, broken=51}, {item = 13294, name = "draptor", id = 6, tame=10, run=39, broken=51}, {item = 13305, name = "crustacea gigantica", id = 7, tame=10, run=39, broken=51}, {item = 13292, name = "tin lizzard", id = 8, tame=10, run=36, broken=54}, {item = 13247, name = "boar", id = 10, tame=10, run=39, broken=51}, {item = 13291, name = "undead cavebear", id = 12, tame=10, run=39, broken=51} } function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then if inArray(mounts, getCreatureName(itemEx.uid)) > 0 then i = inArray(mounts, getCreatureName(itemEx.uid)) if item.itemid == mounts[i].item and not getPlayerMount(cid, mounts[i].id) then if tameMonster(cid, item, itemEx, mounts[i].tame, mounts[i].run, mounts[i].broken) then doSendMagicEffect(fromPosition, CONST_ME_MAGIC_BLUE) doRemoveCreature(itemEx.uid) doPlayerAddMount(cid, mounts[i].id) else doSendMagicEffect(toPosition, CONST_ME_POFF) end end end end return true end Agora em action.xml adicione: <action itemid="13295" event="script" value="tools/mounts.lua"/> --reins <action itemid="13294" event="script" value="tools/mounts.lua"/> --harness <action itemid="13293" event="script" value="tools/mounts.lua"/> --leather whip <action itemid="13298" event="script" value="tools/mounts.lua"/> --carrot on a stick <action itemid="13247" event="script" value="tools/mounts.lua"/> --hunting horn <action itemid="13305" event="script" value="tools/mounts.lua"/> --Giant Shrimp <action itemid="13291" event="script" value="tools/mounts.lua"/> --Maxilla Maximus <action itemid="5907" event="script" value="tools/mounts.lua"/> --Slingshot <action itemid="13307" event="script" value="tools/mounts.lua"/> --Sweet Smelling Bait <action itemid="13292" event="script" value="tools/mounts.lua"/> --Tin key Agora em items/items.xml adicione na ultima linha, antes do </items> <item id="13291" name="maxilla maximus" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> <item id="13292" name="tin key" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> <item id="13293" name="leather whip" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> <item id="13294" name="harness" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> <item id="13295" name="reins" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> <item id="13298" name="carrot on a stick" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> <item id="13305" name="giant shrimp" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> <item id="13307" name="sweet smelling bait" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> <item id="13247" name="hunting horn" article="a"> <attribute key="description" value="A hermit near Carlin might be able to tell you more about it." /> <attribute key="weight" value="200" /> </item> E por ultimo em XML/mounts.xml adicione: <?xml version="1.0" encoding="UTF-8"?> <mounts> <mount id="1" clientId="368" name="Widow Queen" speed="10" /> <mount id="2" clientId="369" name="Racing Bird" speed="20" /> <mount id="3" clientId="370" name="War Bear" speed="10" /> <mount id="4" clientId="371" name="Black Sheep" speed="5" /> <mount id="5" clientId="372" name="Midnight Panther" speed="20" /> <mount id="6" clientId="373" name="Draptor" speed="40" /> <mount id="7" clientId="374" name="Titanica" speed="15" /> <mount id="8" clientId="375" name="Tin Lizzard" speed="15" /> <mount id="9" clientId="376" name="Blazebringer" speed="20" /> <mount id="10" clientId="377" name="Rapid Boar" speed="20" /> <mount id="11" clientId="378" name="Stampor" speed="20" /> <mount id="12" clientId="379" name="Undead Cavebear" speed="20" /> </mounts>
Caso já tenha os items configurados no items.xml, basta trocar a config do action!
tame - possibilidade do monstro fugir em %
run - possibilidade de adquirir a montaria em %
broken - possibilidade de quebrar o item em %
PS: caso modifique preste muita atenção, ao total tem que dar 100 em tame, run e broken juntos ex:
Créditos: ruda 100%
-
Eddy2000 deu reputação a xWhiteWolf em Tibia Guitar Hero [0.3.6~0.4]Fala pessoal, hoje vim trazer pra vocês um sistema que eu desenvolvi em outro fórum e decidi trazer pra cá
Chega de falatório e vamos direto aos negócios:
Introdução: O sistema em si é uma cópia dos jogos de ritmo (GuitarFreaks, Band Hero, Rocksmith e o próprio Guitar Hero). Neste jogo pequenas notas irão cair pela tela até atingir um local especial, onde você poderá usar as teclas (Shift + 7, Shift + 8, Shift + 9, ou apenas 7, 9 e 9 [com Num Lock desativado]) para escolher as direções que as notas estão afim de "ativá-las". Uma vez ativada a nota ela será "queimada" e será considerado 1 acerto. Caso você não consiga ativar a nota e ela passar direto, um efeito de fumaça indicará o "Miss", o mesmo vale para se você tentar ativar uma região sem notas.
Sistema de pontuação: Haverão 3 classificadores estatísticos para cada música tocada, sendo eles:
Notas acertadas: O principal fator de ponto, ele que definirá seu recorde e o valor máximo q ele pode assumir será o número de notas da música.
Movimentos errados: Quantidade de movimentos que você fez para alguma região que não possuia notas, conta como pontuação punitiva.
Notas passadas/erradas: Quantidade de notas que você deixou escapar, note que as notas acertadas + notas passadas compõe o número total de notas da música.
Por enquanto o sistema não possui nenhum preço para se jogar mas também não possui nenhuma recompensa, fiz com o intuito de ser apenas um mini game divertido dentro do Tibia. Porém o código é livre e está disponibilizado aqui embaixo pra qualquer um modificar como desejar.
Video explicativo: Dificuldades: O mini game possui 3 dificuldades, porém essa quantidade é tão configurável quanto as pré definições de cada dificuldade. Além da quantidade de notas ser diferente, a velocidade com que elas descem e consequentemente o tempo que você tem pra acertá-las fica diminuido.
Diferenciais: Um forte diferencial desse sistema é que ele foi feito seguindo todas as regras possíveis pra melhorar seu desempenho, desde funções recursivas leves até separação em funções encapsuladas que carregam apenas as informações necessárias. O sistema contém também algumas seguranças que serão explicadas mais abaixo juntamente com o código para prevenir bugs e garantir diversão sem dores de cabeça!
Instalação (Map Editor): Primeiramente faça uma área parecida com essa daqui:
Não precisa ser igualzinha, apenas seguir a mesma proporção
Agora use a ferramenta de No-Logout para setar os quadradinhos que contém UID e UID2 escritos como No-Logout, isso vai impedir que players desloguem e fiquem presos dentro da sala (se eles derem exit, quando eles relogarem estarão do lado de fora da sala)
Ainda olhando a foto acima, coloque 42320 nos pisos que estão escritos UID, e 42319 no piso que contém UID2.
Nas alavancas, coloque uid 2819 em todas elas e coloque actionid 101 para a alavanca do fácil, 102 na alavanca do médio e 103 na do dificil;
A regra é sempre 100 + dificuldade, como nós estamos utilizando apenas 3 será do 101 ao 103.
Note que se você esquecer ou colocar uma dificuldade não existente o sistema adotará a dificuldade 1 como padrão para aquela alavanca.
Se chegou até aqui, meus parabéns. Muito provável que você tenha feito tudo certo. Agora vamos à parte do código.
Instalação (scripts): Em actions.xml insira essa linha
<action uniqueid="2819" event="script" value="GHtest.lua"/> Agora em data/actions/scripts crie um arquivo com extensão.lua e chameo de GHtest. Insira o seguinte bloco de instruções dentro dele:
<movevent type="StepIn" uniqueid="42320;42319" event="script" value="GHTestmov.lua"/> Por fim crie um arquivo chamado GHTestmov.lua em data/movements/scripts e preencha seu conteúdo com as linhas abaixo:
Configurando seu sistema (básico):
Para as pessoas que querem configurar apenas as coisas básicas, você pode fazê-lo nas primeiras linhas de cada script (actions/movements) ou alterando diretamente na lib, irei ensinar passo a passo aqui oque significa cada coisa.
Alterando a lib As coisas básicas que podem ser alteradas na lib são as seguintes:
dif = { -- [dificuldade] = notas que serao tocadas (nil = vazio, 0 = primeira posicao, 1 = segunda e 2 = terceira) [1] = {nil,nil,0,1,2,nil,nil,2,1,1,0,0,2,0,1}, [2] = {nil,nil,0,1,1,2,1,1,0,0,2,0,1,nil,1,2,1,1,0,0,2,0,1}, [3] = {nil,nil,0,nil,1,nil,1,1,0,0,2,0,1,1,1,nil,0,2,1,1,0,0,2,1,1,0,nil,2,2,1,1,1,1,2} } delay = { -- delay entre cada nota de acordo com a dificuldade [dificuldade] = delay [1] = 500, [2] = 400, [3] = 300 } recorde = { -- salva os recordes de cada dificuldade separadamente [1] = 12724, [2] = 12725, [3] = 12726 } dif separa como será cada música de cada dificuldade, as notas sempre serão nesse exato formato. nil significa que não estarei usando posição nenhuma naquela linha, 0 significa a primeira posição (nota verde), 1 significa segunda opção (nota vermelha) e 2 significa terceira opção (nota azul). Eu aconselho a começar todas as músicas com 2 ou mais 'nil' para dar tempo de o player entender que vai começar. A distribuição que eu usei foi meio que aleatória então sinta-se a vontade pra mudar tanto o tamanho das musicas quanto a variedade de notas.
delay é a tabela que oganiza os delays de cada dificuldade, isso significa que para a dificuldade 1(fácil) nós temos 500 milisegundos para cada mudança de nota (1000 milisegundos = 1 segundo), ou seja, a cada 2 passadas de nota temos 1 segundo dentro da sala. No modo hard a cada 300 milisegundos mudamos a nota, deixando o jogo muito mais rápido e dificil.
recorde é a tabela que possui os storages que irão salvar os recordes nas respectivas dificuldades.
Alterando actions local storage_point = 12721 -- storage que salva os pontos local storage_erradas = 12722 -- storage que salva as notas erradas local storage_passadas = 12723 -- storage que salva as notas que passaram Apenas mude os storages
Alterando movements local itemid = 1680 --- coloque o id da nota do meio local npos = {x = 141, y = 51, z = 7} -- posicao que ira nascer a primeira nota local storage_point = 12721 -- storage que salva os pontos local storage_erradas = 12722 -- storage que salva as notas erradas local storage_passadas = 12723 -- storage que salva as notas que passaram aconselho mexer somente nos storages, mantendo igual à action.
Só abra o spoiler abaixo se você estiver descontente com a forma que seu código roda e tiver certeza absoluta de que você tem o conhecimento necessário para alterar as coisas que vou explicar.
-
Eddy2000 deu reputação a Tibia Dr em Comandos rapidos RMEOla pessoal, trousse todos os comandos rapidos que conheço do RME :
Ctrl + Q = fecha o Remere's map editor
Ctrl + W = deixa o floor a baixo invisível
Ctrl + E = deixa o mapa invisível
Ctrl + T = abre o editor de cidades (serve para editar o nome da cidade e aonde fica o templo “local onde o personagem renasce após a morte”)
Ctrl + Y = vai para frente (ex: após usar Ctrl + Z)
Ctrl + O = procurar para abrir um arquivo (open file)
Ctrl + P = abre as propriedades do mapa
Ctrl + S = salva o mapa
Ctrl + F = procura itens (pela id ou nome)
Ctrl + G = vai para o local escolhido (definido por: X/Y/Z
Ctrl + Z = volta uma coisa
Ctrl + C = copia o local selecionado
Ctrl + V = cola o local selecionado (após usar Ctrl + C)
Ctrl + N = cria um novo projeto
Q = deixa o floor abaixo mais escuro
W = abre palette de waypoints
E = desativa visão de casa
R = abre palette de RAW
T = abre palette de Terrain
I = abre palette de items
O = marca em vermelho os locais onde o personagem não consegue passar
S = aparece ou desaparece o Spawn time flame (fogo que faz monstros renascerem)
D = abre palette doodad
F = faz os animais desaparecerem
G = Deixa objetos transparentes
H = abre house palette
J = abre o itens selecionado no RAW palette (usando id ou nome)
C = abre palette de creatures
V = marca em azul todos os detalhes do mapa
M = abre o mini mapa de navegação
Espero que não seja inutil, e tambem espero que gostem, vlw TibiaKing!
-
Eddy2000 deu reputação a Bruno Carvalho em [TalkAction] Player Check SystemVersão: 3.2
Versão de tibia: 9.4+ (Funciona em anteriores)
Descrição: Existem muitos scripts que ajudam o administrador do servidor a cuidar dele, um deles é saber coisas sobre quem está jogando e se está sendo honesta. Eu peguei alguns scripts e estou juntando em um para diminuir o tamanho e ter uma fácil verificação.
TAG:
<talkaction log="yes" words="!p;/p" access="5" event="script" value="playercheck.lua"/> Script:
Talkactions/scripts/playercheck.lua
local config = { check = {"check", "viwer", "verificar", "ver"}, delete = {"del", "delete", "deletar"}, search = {"search", "procurar"} } function getItemsInContainer(cont, sep) local text = "" local tsep = "" local count = "" for i=1, sep do tsep = tsep.."-" end tsep = tsep..">" for i=0, getContainerSize(cont.uid)-1 do local item = getContainerItem(cont.uid, i) if isContainer(item.uid) == FALSE then if item.type > 0 then count = "("..item.type.."x)" end text = text.."\n"..tsep..getItemNameById(item.itemid).." "..count.." ("..item.itemid..")" else if getContainerSize(item.uid) > 0 then text = text.."\n"..tsep..getItemNameById(item.itemid).." ("..item.itemid..")" text = text..getItemsInContainer(item, sep+2).." ("..item.itemid..")" else text = text.."\n"..tsep..getItemNameById(item.itemid).." ("..item.itemid..")" end end end return text end function onSay(cid, words, param, channel) local slotName = {"Cabeça", "Amuleto", "Backpack", "Armor", "Mao Direita", "Mao Esquerda", "Legs", "Pés", "Ring", "Ammo Slot"} local t = string.explode(param, ",") if(table.isStrIn(param, config.check)) then if getPlayerGroupId (cid) >= 5 then local player = getPlayerByNameWildcard(t[2]) if isPlayer(player) == TRUE then local text = getPlayerName(player).."'s Equipment: " for i=1, 10 do text = text.."\n\n" local item = getPlayerSlotItem(player, i) if item.itemid > 0 then if isContainer(item.uid) == TRUE then text = text..slotName[i]..": "..getItemNameById(item.itemid).." ("..item.itemid..") "..getItemsInContainer(item, 1) else text = text..slotName[i]..": "..getItemNameById(item.itemid).." ("..item.itemid..")" end else text = text..slotName[i]..": Empty" end end doShowTextDialog(cid, 6579, text) else doPlayerSendCancel(cid, "This player is not online.") end end elseif(table.isStrIn(param, config.delete)) then if getPlayerGroupId(cid) >= 5 then local player = getPlayerByNameWildcard(t[3]) if isPlayer(player) == TRUE then count = t[4] if(not t[4]) then count = 1 end if getPlayerItemCount(player, t[2]) > 0 then if doPlayerRemoveItem(player, t[2], count) then doPlayerSendCancel(cid, "Item Deletado.") else doPlayerSendCancel(cid, "Este player não esta quantidade.") end else doPlayerSendCancel(cid, "Este player não tem o item.") end end end elseif(table.isStrIn(param, config.search)) then if getPlayerGroupId (cid) >= 5 then local player = getPlayerByNameWildcard(t[3]) local result = db.getResult("SELECT name, online FROM players WHERE id IN (SELECT player_id FROM player_items WHERE itemtype = ".. t[2] ..");") local msg = "Resultados da busca pelo item ".. t[2] .." em seu banco de dados:\n\n" if result:getID() ~= -1 then while true do local name = result:getDataString("name") local online = result:getDataInt("online") msg = msg .. name .." [".. (online == 1 and "Online" or "Offline") .."]\n" if not result:next() then break end end else msg = msg .. "O item não foi encontrado em nenhum jogador." end doShowTextDialog(cid, t[2], msg) end end return true end Explicação:
Quando o god digita:
/p check, (PNAME) - Ele verifica os items que o player tem.
/p del, (ID), (PNAME), (COUNT) - Ele deleta o item de determinado player (Se não colocar o count ele irá remover somente 1).
/p search, (ID) - Ele verifica quantos players tem tal item e se está online.
Créditos:
Oneshot
CaioODemais
Comedinha (Bruno Carvalho)
-
Eddy2000 deu reputação a Duda Lima em Real Map [8.60] + Quirefang + GnomesReal Map [8.60] + Quirefang + Gnomes
Galera esse mapa é todo trackeado do tibia.
É para a versão 8.60 apenas.
Espero que gostem e seja útil também!
Foto:
Download:
Scan:
Credits:
Duda Lima!
Amy Azzkaban
RaikØx
TE ajudei? +REP
-
Eddy2000 deu reputação a Weslley Kiyo em [SPELL] Mas Mort e Mas PoxVersão Testada: OTX_2 0.3.7 (8.60)
Basicamente são 2 spells: Exevo gran mas mort e exevo gran mas pox (as duas com condições curse e poison).
Estas spells já estão balanceadas mas recomendo fazer testes
> Imagens <
Em data/spells/scripts/attack crie 2 arquivos .lua com nomes: mort core e poison core
Mort Core
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 8, 15) local condition = createConditionObject(CONDITION_CURSED) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 4, 2000, -60) setCombatCondition(combat, condition) local area = createCombatArea(AREA_CROSS5X5) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end
Poison Core
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14) local condition = createConditionObject(CONDITION_POISON) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 4, 2000, -40) setCombatCondition(combat, condition) local area = createCombatArea(AREA_CROSS6X6) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end
Agora em data/spells/spells.xml adicione as 2 TAGS:
<instant name="Mort Core" words="exevo gran mas mort" lvl="120" mana="2100" prem="0" exhaustion="5000" selftarget="1" needlearn="0" event="script" value="attack/mort core.lua"> <vocation id="1"/> <vocation id="5"/> </instant> <instant name="Poison Core" words="exevo gran mas pox" lvl="120" mana="1900" prem="0" selftarget="1" exhaustion="5000" needlearn="0" event="script" value="attack/poison core.lua"> <vocation id="2"/> <vocation id="6"/> </instant>
mana="1900" -- É a mana necessária para usar a spell
exhaustion="5000" -- Tempo de exaust da spell
-
Bom dia jovens, graças ao grande Omega eu consegui terminar o código do NPC Dicer, a função para checar o gold foi feita por ele então deem um beijo nele
O NPC é parecido com aqueles BOTS que ficam no tibia global em yalahar normalmente, você joga uma quantia em gold e fala L ou H também pode ser Low ou High e com sorte pode ganhar o dobro da quantia apostada, exemplo:
Eu vou lá jogo 20k na mesa e falo Low, caso caia nos números 1, 2 ou 3 eu irei ganhar o dobro da quantia que eu apostei que no foi 20k, mas se cair nos números 4, 5 ou 6 eu iria perder esses 20k.
O High é a mesma coisa porém ao contrario, se eu falo High e cair nos numero 4, 5 ou 6 eu ganho o dobro da quantia que eu apostei e se cair no 1, 2 ou 3 eu perderia tudo.
Crie um arquivo em data/npc com o nome dicer.xml e adicione isso dentro:
<?xml version="1.0"?> <npc name="Dicer" script="data/npc/scripts/dicer.lua" walkinterval="1000" floorchange="0"> <health now="100" max="100"/> <look type="132" head="114" body="0" legs="0" feet="114" addons="3"/> <parameters> <parameter key="message_greet" value="Ola {|PLAYERNAME|}, caso queria tentar a sorte diga {L} ou {Low} para apostar nos numeros {1}, {2} ou {3} ||| {H} ou {High} para apostar nos numeros {4}, {5} ou {6}!" /> </parameters> </npc> Agora vá até data/npc/scripts e crie um arquivo com o nome dicer.lua e adicione isso dentro:
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local coins = {[2148] = 1, [2152] = 100, [2160] = 10000} function countMoneyOnPos(pos) local money = 0 for stack = 1, 50 do pos.stackpos = stack local item = getThingFromPos(pos) if item and item.uid > 0 then if coins[item.itemid] then money = money + coins[item.itemid] * item.type end end end return money end local posCoal = {x = 169, y = 58, z = 7} -- POSIÇÃO DO COAL, ONDE O GOLD DEVE ESTAR local posNpc = {x = 193, y = 45, z = 7} -- POSIÇÃO DO NPC local pos = getPosByDir(getThingPos(cid), getCreatureLookDirection(cid), 1) -- NÃO ALTERAR if msgcontains(msg, 'l') or msgcontains(msg, 'L') or msgcontains(msg, 'low') or msgcontains(msg, 'Low') then if countMoneyOnPos(pos) > 0 then if math.random(1, 6) <= 3 then doPlayerAddMoney(cid, countMoneyOnPos(pos)*2) doRemoveItem(getTileItemById(pos, 2148).uid) repeat until not doRemoveItem(getTileItemById(pos, 2148).uid) doRemoveItem(getTileItemById(pos, 2152).uid) repeat until not doRemoveItem(getTileItemById(pos, 2152).uid) doRemoveItem(getTileItemById(pos, 2160).uid) repeat until not doRemoveItem(getTileItemById(pos, 2160).uid) doSendMagicEffect(posNpc, 26) doSendMagicEffect(posNpc, 28) doCreatureSay(getNpcId(), getCreatureName(cid)..' tirou o numero '..math.random(1, 3)..', parabéns!', TALKTYPE_ORANGE_1) else doRemoveItem(getTileItemById(pos, 2148).uid) repeat until not doRemoveItem(getTileItemById(pos, 2148).uid) doRemoveItem(getTileItemById(pos, 2152).uid) repeat until not doRemoveItem(getTileItemById(pos, 2152).uid) doRemoveItem(getTileItemById(pos, 2160).uid) repeat until not doRemoveItem(getTileItemById(pos, 2160).uid) doSendMagicEffect(posNpc, 2) doSendMagicEffect(posNpc, 26) doCreatureSay(getNpcId(), getCreatureName(cid)..' tirou o numero '..math.random(4, 6)..', tente novamente!', TALKTYPE_ORANGE_1) end else doCreatureSay(getNpcId(), getCreatureName(cid)..', coloque uma quantia de gold no recipiente para começar a apostar!', TALKTYPE_ORANGE_1) end elseif msgcontains(msg, 'h') or msgcontains(msg, 'H') or msgcontains(msg, 'high') or msgcontains(msg, 'High') then if countMoneyOnPos(pos) > 0 then if math.random(1, 6) <= 3 then doPlayerAddMoney(cid, countMoneyOnPos(pos)*2) doRemoveItem(getTileItemById(pos, 2148).uid) repeat until not doRemoveItem(getTileItemById(pos, 2148).uid) doRemoveItem(getTileItemById(pos, 2152).uid) repeat until not doRemoveItem(getTileItemById(pos, 2152).uid) doRemoveItem(getTileItemById(pos, 2160).uid) repeat until not doRemoveItem(getTileItemById(pos, 2160).uid) doSendMagicEffect(posNpc, 26) doSendMagicEffect(posNpc, 28) doCreatureSay(getNpcId(), getCreatureName(cid)..' tirou o numero '..math.random(4, 6)..', parabéns!', TALKTYPE_ORANGE_1) else doRemoveItem(getTileItemById(pos, 2148).uid) repeat until not doRemoveItem(getTileItemById(pos, 2148).uid) doRemoveItem(getTileItemById(pos, 2152).uid) repeat until not doRemoveItem(getTileItemById(pos, 2152).uid) doRemoveItem(getTileItemById(pos, 2160).uid) repeat until not doRemoveItem(getTileItemById(pos, 2160).uid) doSendMagicEffect(posNpc, 2) doSendMagicEffect(posNpc, 26) doCreatureSay(getNpcId(), getCreatureName(cid)..' tirou o numero '..math.random(1, 3)..', tente novamente!', TALKTYPE_ORANGE_1) end else doCreatureSay(getNpcId(), getCreatureName(cid)..', coloque uma quantia de gold no recipiente para começar a apostar!', TALKTYPE_ORANGE_1) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Você deve fazer alterações nesta parte:
local posCoal = {x = 169, y = 58, z = 7} -- POSIÇÃO DO COAL, ONDE O GOLD DEVE ESTAR local posNpc = {x = 193, y = 45, z = 7} -- POSIÇÃO DO NPC Aconselhável montar uma área pro npc ficar idêntica a da fotos para não bugar o código, o coal() deve sempre ficar na frente do player pois a função ira chegar o gold a frente do player.
Ao falar Hi
Npc verificando que não tem gold no coal
Vencendo uma aposta
Perdendo uma aposta
Créditos:
Markin(Anne)
Omega pela função de checar o gold
-
Eddy2000 deu reputação a Adriano SwaTT em Sistema: Cassino Slots.Boa noite galera,
após um pedido aqui no fórum sobre um sistema de Cassino, decidi então criar este e disponibilizar para vocês.
Introdução:
Bom, este script simula a máquina de Cassino conhecida como Cassino Slots, pra quem não conhece é a máquina que se encontra no spoiler abaixo:
Como funciona?
O jogador precisa escolher 1 (um) dos 10 (dez) itens disponíveis (da para configurar a quantidade de itens) como seu Item da Sorte, e após feito isso, terá que girar a alavanca e torcer para que a máquina sorteie 3 itens repetidos igual ao que o jogador em questão escolheu.
Para tornar um pouco mais fácil de vencer, criei para que a máquina dê pequenos brindes à quem acertar 1 ou 2 itens dos sorteados (configurável).
Como jogar?
Para jogar é simples, como desenvolvi todo script em apenas um arquivo, para facilitar na criação, na instalação e até mesmo na jogabilidade, o jogo se baseia na posição em que o jogador está para identificar qual ação executar.
Selecionar Item da Sorte: com seu personagem virado para baixo (sul), clique na alavanca e automaticamente o item da sorte aparecerá na mesa configurada no script, caso queira outro item, basta ir usando a alavanca até encontrar o item desejado.
Como Jogar: Após ter selecionado seu item da sorte, que deve estar à mostra em cima da mesa própria, basta virar seu personagem para cima (norte) e clicar novamente na alavanca.
E se virar esquerda ou direita?: Nada acontecerá, apenas uma mensagem ensinando como jogar será enviada para que o jogador se oriente.
Dicas de instalação!
Sugiro que quando for criar o mapa para o evento, não faça como do vídeo, pois os itens criados nas mesas não estão com atributos para que não possam ser movidos, sendo assim é provável que jogadores de má fé venham a roubar itens... Faça como a imagem abaixo:
Instalando:
Basta criar um arquivo na pasta “data/actions/scripts” chamado “cassino_slots.lua” e adicionar o código abaixo dentro:
Agora em “actions.xml” adicione a tag abaixo:
Agora basta configurar de acordo com as informações disponíveis no início do script.
Vejam o vídeo demonstrativo do Sistema em funcionamento.
Criado por: Adriano Swatt'
-
Eddy2000 recebeu reputação de Vodkart em Simple Task 3.0Man, deu certo..
eu tinha apagado os bosses ali no 'configbosses_task'
ai voltei..kkkk
ai coloquei o X Y Z do templo nos bosses.
ai deu certo
o NPC pagou e mandou pro templo.
Cara Obrigadão !
-
Eddy2000 deu reputação a principe sharingan em [talkAction] Comando /banVá em data/talkactions/scripts crie um arquivo bannes.lua e cole isso:
function onSay(cid, words, param, channel)
Vá em Talkactions.xml e cole está tag:
Exemplo: /ban Principe,60
Dias de banimento.
Nick to Player a ser banido.
Sabe o Ban IP que c tava querendo ? Você pode usar o CTRL + Y para dar ban no player. Ban IP, etc. Mas ta ae o comando como c pediu
-
Eddy2000 deu reputação a Adriano SwaTT em [Resolvido] Tibia .dat e spr que funcione em Item editor 8.60Bom dia, venho lhe trazer boas novas, caso não tenha conseguido solucionar seu problema ainda.
Faça o download deste "DatEditor", clicando no nome do mesmo. (Link direto do forum, postado por Vittu)
Link do Scan.
E na hora de abrir seus arquivos "Tibia.dat" e "Tibia.spr" da versão 8.60, estou postando essa observação que provavelmente solucionará seu problema. (funcionou comigo)
Ao abrir o Dat Editor e clicar em "Open" ou "Ctrl + O" ...
Abrirá uma janela como a da imagem abaixo:
Carregue seu arquivo Tibia.dat e Tibia.spr do Tibia 8.60 e onde está "780" ao lado do botão "Open", marque a opção "760".
Ou seja, quando selecionado a opção 760 é para versões recentes do Tibia, e quando marcado 780 é para versões abaixo de 8.5x'
Creio que funcionará, caso dê algum erro... contacte-me'
Abraços & Boa sorte.
-
Eddy2000 deu reputação a Xagah em (Resolvido)Export MiniMapVá em:
File > Export > Export Minimap > (Abrirá uma Janela)
Na Opção:
Floor Options
Selecione: Ground Floor ( Que é o andar térreo).
Na opção Browse escolha onde o arquivo será salvo.
Se e finalize com "ok". Se o mapa for muito grande, seu programa poderá demorar para abrir o arquivo.
Se seu Mapa realmente tiver algo irá aparecer.
Acredito que seja isto.
Posta o que conseguiu aqui.
-
Eddy2000 deu reputação a Danihcv em [TUTORIAL] Resolvendo qualquer erro na data baseOpa, galerinha do TK, pro meu primeiro tutorial resolvi fazer uma solução de um problema que desde que cheguei no TK, vejo que ocorre com uma certa frequência. Os erros da data base.
Neste tutorial vou ensinar a resolver os erros do tipo No such table, Insert into, No such column, ... has no column named... etc.
1°) NO SUCH TABLE
Bom, para o erro No such table, basta vc visualizar qual table está faltando. Para isso basta ler o erro na distro:
No caso da imagem, está faltando a table: player_statements
Para resolver este e qualquer outro problema deste tipo, caso sua data base seja sqlite,
basta abrir sua data base pelo Sqlite Studio(download: http://sqlitestudio.pl/?act=download) e clicar em Open SQL query editor:
Mas caso sua data base seja Mysql abra pelo phpMyadmin, ou por outro editor de sua preferencia.
1.1°) EXECUTANDO OS COMANDOS PARA RESOLVER O PROBLEMA
Bom, dependendo da table que estiver faltando, vc irá colocar seu respectivo comando, segue abaixo TODOS os comandos básicos necessários para que sua data base fique Ok! : (VC VAI PEGAR O COMANDO REFERENTE À TABLE QUE VC QUER!!!)
account_viplist
Sqlite
accounts
Sqlite
bans
Sqlite
environment_killers
Sqlite
global_storage
Sqlite
guild_invites
Sqlite
guild_kills
Sqlite
guild_ranks
Sqlite
guild_wars
Sqlite
guilds
Sqlite
house_auctions
Sqlite
house_data
Sqlite
house_lists
Sqlite
houses
Sqlite
killers
Sqlite
market_history
Sqlite
market_offers
Sqlite
player_deaths
Sqlite
player_depotitems
Sqlite
player_inboxitems
Sqlite
player_items
Sqlite
player_killers
Sqlite
player_namelocks
Sqlite
player_skills
Sqlite
player_spells
Sqlite
player_statements
Sqlite
player_storage
Sqlite
player_viplist
Sqlite
players
Sqlite
server_config
Sqlite
server_motd
Sqlite
server_record
Sqlite
server_reports
Sqlite
tile_items
Sqlite
tile_store
Sqlite
tiles
Sqlite
announcements
Sqlite
pagsegurotransacoes
Sqlite
player_advances
Sqlite
reports
Sqlite
thanks
Sqlite
z_bug_logs
Sqlite
z_featured_article
Sqlite
z_forum
Sqlite
z_helpdesk
Sqlite
z_monsters
Sqlite
z_network_box
Sqlite
z_news_tickers
Sqlite
z_ots_comunication
Sqlite
z_polls
Sqlite
z_polls_answers
Sqlite
z_poll_votes
Sqlite
z_shop_history_item
Sqlite
z_shop_history_pacc
Sqlite
z_shop_offer
Sqlite
z_spells
Sqlite
z_news_big
Sqlite
2°) No such column / "NOME DA TABLE" has no column named "NOME DA COLUMN QUE FALTA" / Insert into
Bom, para resolver esse problema vc deve identificar em qual TABLE está essa coluna que falta. Para isso, basta ler o erro como na imagem:
No caso da imagem, está faltando a column WORLD_ID dentro da table MARKET_OFFERS. Para resolver, vc deve executar excluir a sua table MARKET_OFFERS existante em sua data base, e em seguida, executar o domando da da market_offers, encontrado acima, logicamente isso só se aplica ao caso da imagem, depende do seu caso, vc deve excutar o comando da table que estiver sendo referida no erro. Mas antes de executá-lo vc deve excluir a sua table EXISTENTE, para então executar o comando.
ESTA FORMA DE RESOLUÇÃO SE APLICA AOS TRÊS CASOS: NO SUCH COLUMN, ...HAS NO COLUMN NAMED... e INSERT INTO.
Bom galera, é isso.
SE ENCONTRAREM, OU SE DEPARAREM COM ALGUM ERRO, BASTA ME PEDIR AJUDA QUE EU DAREI TOTAL SUPORTE PARA VOCÊS!
SE ESTIVR FALTANDO MAIS ALGUMA TABLE QUE EU NÃO COLOQUEI AQUI, PF ME INFORMEM E EU ATUALIZAREI O TÓPICO!!!
Lembrem-se, se eu te ajudei, por favor, deem REP++ pois foi meio trabolhoso fazer este tutorial todo...
ESTOU A DISPOSIÇÃO DE TODOS! Tanto por PM quanto por SKYPE, e até mesmo por aqui, pois vou checar este tópico regularmente!!
Espero ter ajudado!!
Abraços.
-
Eddy2000 deu reputação a Absolute em [Banir IP] !banipOlá galera do TK trago hoje uma talkaction fácil que fiz para facilitar a banir os players que divulgam ot no seu servidor.
Nada mais fácil que digitar !banip playername não é? Pronto acabou com o xarope rs.
Vamos lá, é bem simples!
Em data/talkactions/scripts crie um arquivo com o nome banip.lua e dentro adicione:
function onSay(cid, words, param) if(param == "") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Parametro necessario.") return TRUE end local pid = getPlayerByNameWildcard(param) local tmp = getPlayerIp(pid) if(doAddIpBanishment(tmp) or pid == 0 or (isPlayerGhost(pid) == TRUE)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Jogador " .. param .. " nao existe ou n esta online.") end if isPlayerGhost(pid) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Seu ip foi banido amigao.") doAddIpBanishment(tmp, 30 * 24 * 60 * 60) doRemoveCreature(pid) end return TRUE end Logo depois em talkactions.xml adicione a seguinte linha:
<talkaction log="yes" group="4-6" access="3-6" words="!banip" event="script" value="banip.lua"/>
Agora você pode banir o divulgador por: !banip NOMEDOPLAYER
Espero ter ajudado, demais dúvidas poste aqui no tópico
Até o próximo.
Absolute.
-
Eddy2000 deu reputação a Vodkart em [8.6] [Talkactions] - Find ItemÉ um comando para procurar determinado item no servidor, ele procura em:
*Jogador
*Depot
*House Tiles
basta usar o comando /find NOME DO ITEM
exemplo: /find solar axe
Obs: Como é feito por DB, os items só ficaram salvo quando der serve save(hora que altera os valores na data base), então se o jogador receber o item as 15:00 e só de serve save as 16:00, só irá aparecer no comando as 16:00 horas.
talkactions
finditem.lua
function onSay(cid, words, param) if param == '' or tonumber(param) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "/find item name") return true end local item_id = getItemIdByName(tostring(param), false) if not item_id then doPlayerSendCancel(cid, "This item does not exist.") return true end local str, player_depotitems, players_items, tile_items = "",{},{},{} local dp = db.getResult("SELECT `player_id`, `count` FROM `player_depotitems` WHERE `itemtype` = "..item_id),{} if (dp:getID() ~= -1) then repeat player_depotitems[#player_depotitems+1] = {dp:getDataInt("player_id"), dp:getDataInt("count") } until not(dp:next()) dp:free() end local pi = db.getResult("SELECT `player_id`, `count` FROM `player_items` WHERE `itemtype` = "..item_id),{} if (pi:getID() ~= -1) then repeat players_items[#players_items+1] = {pi:getDataInt("player_id"), pi:getDataInt("count") } until not(pi:next()) pi:free() end local hi = db.getResult("SELECT `tile_id`, `count` FROM `tile_items` WHERE `itemtype` = "..item_id),{} if (hi:getID() ~= -1) then repeat local tile = db.getResult("SELECT `house_id`, `x`, `y`, `z` FROM `tiles` WHERE `id` = "..hi:getDataInt("tile_id")),{} tile_items[#tile_items+1] = {tile:getDataInt("house_id"),tile:getDataInt("x"),tile:getDataInt("y"),tile:getDataInt("z")} until not(hi:next()) hi:free() end if #player_depotitems > 0 then str = str .. "#DEPOT ITEMS#\nQuantidade - Jogador\n" for i = 1, table.maxn(player_depotitems) do str = str .. player_depotitems[i][2] .. ' ' .. getPlayerNameByGUID(player_depotitems[i][1]) ..' \n' end end if #players_items > 0 then str = str .. (str ~= "" and "--------------//-------------\n\n#PLAYER ITEMS#\nQuantidade - Jogador\n" or "#PLAYER ITEMS#\nQuantidade - Jogador\n") for i = 1, table.maxn(players_items) do str = str .. players_items[i][2] .. ' ' .. getPlayerNameByGUID(players_items[i][1]) ..' \n' end end if #tile_items > 0 then str = str .. (str ~= "" and "--------------//-------------\n\n#TILE ITEMS#\nHouse ID - Tile Position\n" or "#TILE ITEMS#\nHouse ID -Tile Position\n") for i = 1, table.maxn(tile_items) do str = str .. tile_items[i][1] .. ' - {x = ' .. tile_items[i][2] ..', y = ' .. tile_items[i][3] ..', z = ' .. tile_items[i][4] ..'} \n' end end return doShowTextDialog(cid,item_id, str) end
TAG
<talkaction log="yes" words="!find;/find" access="5" event="script" value="finditem.lua"/>
-
Eddy2000 deu reputação a mariatti em (Resolvido)[Pedido] NPC Task SystemSimple Task.xml
<?xml version="1.0" encoding="UTF-8"?> <mod name="Simple Task" version="3.0" author="Vodkart" contact="#####.com" enabled="yes"> <config name="task_func"><![CDATA[ tasktabble = { ["troll"] = {monster_race={"troll","frost troll","furious troll","island troll","swamp troll","troll champion","troll legionnaire"}, storage_start = 200201, storage = 91001,count = 150,exp = 200,money = 250}, ["globin"] = {monster_race={"goblin","goblin assassin","goblin leader"}, storage_start = 200202, storage = 91002,count = 150,exp = 300,money = 300}, ["rotworm"] = {monster_race={"rotworm","carrion worm"}, storage_start = 200203, storage = 91003,count = 300,exp = 1000,money = 800}, ["cyclops"] = {monster_race={"cyclops","cyclops smith","cyclops drone"}, storage_start = 200204, storage = 91004,count = 500,exp = 3000,money = 800}, ["green djinn"] = {monster_race={"green djinn","efreet"}, storage_start = 200205, storage = 91005,count = 500,exp = 10000,money = 5000}, ["blue djinn"] = {monster_race={"blue djinn","marid"}, storage_start = 200206, storage = 91006,count = 500,exp = 10000,money = 5000}, ["pirate one"] = {monster_race={"pirate buccaneer","pirate corsair","pirate cutthroat","pirate ghost","pirate marauder","pirate skeleton"}, storage_start = 200207, storage = 91007,count = 300,exp = 10000,money = 5000}, ["pirate two"] = {monster_race={"pirate buccaneer","pirate corsair","pirate cutthroat","pirate ghost","pirate marauder","pirate skeleton"}, storage_start = 200208, storage = 91008,count = 300,exp = 10000,money = 5000}, ["minotaur"] = {monster_race={"minotaur","minotaur archer","minotaur mage","minotaur guard"}, storage_start = 200209, storage = 91009,count = 20}, ["necromancer"] = {monster_race={"necromancer","priestess"}, storage_start = 200210, storage = 91010,count= 400}, ["carniphila"] = {monster_race={"carniphila"}, storage_start = 200211, storage = 91011,count= 150, exp = 2500}, ["stone golem"] = {monster_race={"stone golem"}, storage_start = 200212, storage = 91012,count= 220, exp = 2000}, ["ice golem"] = {monster_race={"ice golem"}, storage_start = 200213, storage = 91013,count= 300, exp = 12000}, ["dragon"] = {monster_race={"dragon","dragon lord","frost dragon"}, storage_start = 200214, storage = 91014,count= 250, exp = 50000}, ["mutated rat"] = {monster_race={"mutated rat"}, storage_start = 200215, storage = 91015,count = 210, exp = 25000, money = 10000}, ["giant spider"] = {monster_race={"giant spider"}, storage_start = 200215, storage = 91016,count = 500, exp = 50000, money = 15000}, ["hydra"] = {monster_race={"hydra"}, storage_start = 200217, storage = 91017,count = 5000, exp = 2000, money = 15000, reward = {{6433,1},{7434,1},{2197,1},{2476,1}}}, ["sea serpent"] = {monster_race={"sea serpent"}, storage_start = 200218, storage = 91018,count = 1500, exp = 70000, money = 30000}, ["behemoth"] = {monster_race={"behemoth"}, storage_start = 200219, storage = 91019,count = 1800, exp = 50000, money = 30000, reward = {{6391,1},{5741,1}}}, ["serpent spawn"] = {monster_race={"serpent spawn"}, storage_start = 200220, storage = 91020,count = 1400, exp = 70000, money = 30000}, ["demon"] = {monster_race={"demon"}, storage_start = 200221, storage = 91021,count = 6666, exp = 70000, money = 200000, reward = {{2495,1},{2496,1},{2520,1},{2472,1}}}, ["quara"] = {monster_race={"quara predator","quara constrictor","quara hydromancer","quara mantassin","quara pincher"}, storage_start = 200222, storage = 91022,count = 300, exp = 40000, money = 50000}, ["quara scout"] = {monster_race={"quara predator scout","quara constrictor scout","quara hydromancer scout","quara mantassin scout","quara pincher scout"}, storage_start = 200223, storage = 91023,count = 300, exp = 50000, money = 60000} } configbosses_task = { {race = "minotaur",Playerpos = {x = 189, y = 57, z = 7}, FromPosToPos = {{x = 186, y = 54, z = 7},{x = 193, y = 60, z = 7}},time = 5}, {race = "necromancer",Playerpos = {x = 196, y = 39, z = 7}, FromPosToPos = {{x = 195, y = 37, z = 7},{x = 198, y = 41, z = 7}}, time = 5}, {race = "dragon",Playerpos = {x = 208, y = 59, z = 7}, FromPosToPos = {{x = 206, y = 56, z = 7},{x = 209, y = 65, z = 7}}, time = 5} } function CheckTask(cid) for k, v in pairs(tasktabble) do if getPlayerStorageValue(cid,v.storage_start) >= 1 then return true end end return false end function finisheAllTask(cid) local config = { exp = {true,100000}, money = {true,200000}, items ={false,{{2124,2},{2173,1}}}, premium ={true,5} } local x = true for k, v in pairs(tasktabble) do if tonumber(getPlayerStorageValue(cid,v.storage)) then x = false end end if x == true then setPlayerStorageValue(cid, 521456, 0) local b = getGlobalStorageValue(63005) if b == -1 then b = 1 end if b < 11 then setGlobalStorageValue(63005,b+1) doBroadcastMessage('[Task Mission Complete] '..getCreatureName(cid)..' was the '..b..' to finish the task!.') doPlayerAddPremiumDays(cid, config.premium[1] == true and config.premium[2] or 0) doPlayerAddExp(cid, config.exp[1] == true and config.exp[2] or 0) doPlayerAddMoney(cid, config.money[1] == true and config.money[2] or 0) if config.items[1] == true then doAddItemsFromList(cid,config.items[2]) end doItemSetAttribute(doPlayerAddItem(cid, 7369), "name", "trophy "..getCreatureName(cid).." completed all the task.") end end end function HavePlayerPosition(cid, from, to) return isInRange(getPlayerPosition(cid), from, to) and true or false end function getRankStorage(cid, value, max, RankName) -- by vodka local str ="" str = "--[".. (RankName == nil and "RANK STORAGE" or ""..RankName.."") .."]--\n\n" local query = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..value.." ORDER BY cast(value as INTEGER) DESC;") if (query:getID() ~= -1) then k = 1 repeat if k > max then break end str = str .. "\n " .. k .. ". "..getPlayerNameByGUID(query:getDataString("player_id")).." - [" .. query:getDataInt("value") .. "]" k = k + 1 until not query:next() end return doShowTextDialog(cid, 2529, str) end function getItemsInContainerById(container, itemid) -- Function By Kydrai local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end end end return items end function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid) local piles = 0 if #item > 0 then for i,x in pairs(item) do if getThing(x).type < 100 then local it = getThing(x) doTransformItem(it.uid, itemid, it.type+quant) if it.type+quant > 100 then doPlayerAddItem(cid, itemid, it.type+quant-100) end else piles = piles+1 end end else return doPlayerAddItem(cid, itemid, quant) end if piles == #item then doPlayerAddItem(cid, itemid, quant) end end function getItemsFromList(items) -- by vodka local str = '' if table.maxn(items) > 0 then for i = 1, table.maxn(items) do str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1]) if i ~= table.maxn(items) then str = str .. ', ' end end end return str end function doAddItemsFromList(cid,items) -- by vodka if table.maxn(items) > 0 then for i = 1, table.maxn(items) do local count = items[i][2] while count > 0 do if isItemStackable(items[i][1]) then doPlayerAddItemStacking(cid, items[i][1], 1) else doPlayerAddItem(cid, items[i][1],1) end count = count - 1 end end end end function pairsByKeys(t, f) local a = {} for n in pairs(t) do table.insert(a, n) end table.sort(a, f) local i = 0 local iter = function () i = i + 1 if a[i] == nil then return nil else return a[i], t[a[i]] end end return iter end ]]></config> <event type="login" name="TaskLogin" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "KillTask") return true end]]></event> <talkaction words="/task;!task" event="buffer"><![CDATA[ domodlib('task_func') local param = string.lower(param) if param == "rank" then getRankStorage(cid, 521456, 20, "Task Rank Finalizadas") return true end local str = "" str = str .. "Task Completed :\n\n" for k, v in pairsByKeys(tasktabble) do local contagem = getPlayerStorageValue(cid, v.storage) if (contagem == -1) then contagem = 1 end str = str..k.." = ".. (not tonumber(contagem) and "["..contagem.."]" or "["..((contagem)-1).."/"..v.count.."]") .."\n" end str = str .. "" return doShowTextDialog(cid, 8983, str) ]]></talkaction> <event type="kill" name="KillTask" event="script"><![CDATA[ domodlib('task_func') function onKill(cid, target, lastHit) if(isMonster(target) == true) then local n = string.lower(getCreatureName(target)) for race, mob in pairs(tasktabble) do if getPlayerStorageValue(cid,mob .storage_start) >= 1 then for i = 1,#mob.monster_race do if n == mob.monster_race[i] then local contagem = getPlayerStorageValue(cid, mob.storage) if (contagem == -1) then contagem = 1 end if not tonumber(contagem) then return true end if contagem > mob.count then return true end if contagem > mob.count then return true end setPlayerStorageValue(cid, mob.storage, contagem+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,""..(contagem == mob.count and "Congratulations! You finished the task of "..race.."." or "defeated. Total [" .. contagem .. "/" .. mob.count .. "] " .. race .. ".").."") end end end end end return true end]]></event> </mod> NPC/SCRIPT simple_task.lua domodlib('task_func') local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) if isInArray({"task","tasks","missao","mission"}, msg) then npcHandler:say("Me diga o nome do monstro que você deseja fazer a task!", cid) talkState[talkUser] = 1 elseif talkState[talkUser] == 1 then if tasktabble[msg] then if CheckTask(cid) ~= true then local contagem = getPlayerStorageValue(cid, tasktabble[msg].storage) if (contagem == -1) then contagem = 1 end if not tonumber(contagem) then npcHandler:say('Desculpe, mas você já terminou a task do '..msg, cid) return true end setPlayerStorageValue(cid, tasktabble[msg].storage_start, 1) npcHandler:say("Parabéns, agora você está participando da missão task do "..msg..", falta matar "..string.sub(((contagem)-1)-tasktabble[msg].count, 2).." "..msg, cid) talkState[talkUser] = 0 else npcHandler:say('Desculpe, mas você já faz parte de uma task!', cid) talkState[talkUser] = 0 end else npcHandler:say('digite o nome correto da missão task! para mais informações digite {!task}', cid) talkState[talkUser] = 1 end elseif isInArray({"receber","reward","recompensa","report","reportar"}, msg) then if CheckTask(cid) then for k, v in pairs(tasktabble) do racetype = k if getPlayerStorageValue(cid,v.storage_start) >= 1 then local contagem = getPlayerStorageValue(cid, v.storage) if (contagem == -1) then contagem = 1 end if not tonumber(contagem) then npcHandler:say('você só pode receber os items uma única vez!', cid) return true end if (((contagem)-1) >= v.count) then for _, check in pairs(configbosses_task) do if string.lower(check.race) == string.lower(racetype) then local on = getPlayersOnline() for i=1, #on do if HavePlayerPosition(on[i], check.FromPosToPos[1],check.FromPosToPos[2]) then selfSay('aguarde alguns instantes, tem pessoas fazendo a task.', cid) return true end end doTeleportThing(cid, check.Playerpos) local function checkArea(cid) if not isCreature(cid) then return LUA_ERROR end if HavePlayerPosition(cid, check.FromPosToPos[1],check.FromPosToPos[2]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end end addEvent(checkArea, check.time*60*1000, cid) end end local str = "" if v.exp ~= nil then doPlayerAddExp(cid, v.exp ) str = str.."".. (str == "" and "" or ",") .." "..v.exp.." de exp" end if v.money ~= nil then doPlayerAddMoney(cid, v.money) str = str.."".. (str == "" and "" or ",") ..""..v.money.." gps" end if v.reward ~= nil then doAddItemsFromList(cid,v.reward) str = str.."".. (str == "" and "" or ",") ..""..getItemsFromList(v.reward) end npcHandler:say("Obrigado pela sua ajuda Recompensas: "..(str == "" and "nenhuma" or ""..str.."").." por ter completado a task do "..k, cid) setPlayerStorageValue(cid, v.storage, "Finished") setPlayerStorageValue(cid, v.storage_start, 0) setPlayerStorageValue(cid, 521456, getPlayerStorageValue(cid, 521456) == -1 and 1 or getPlayerStorageValue(cid, 521456)+1) finisheAllTask(cid) else npcHandler:say('Desculpe,mas você só matou '..((contagem)-1)..' de '..v.count..' '..k, cid) end end end else npcHandler:say("você não está em nenhuma missão task", cid) end elseif isInArray({"sair","leave","exit"}, msg) then if CheckTask(cid) then talkState[talkUser] = 2 for k, v in pairs(tasktabble) do if getPlayerStorageValue(cid,v.storage_start) >= 1 then storagesair = v.storage_start local contagem = getPlayerStorageValue(cid, v.storage) if (contagem == -1) then contagem = 1 end npcHandler:say('você está participando de uma missão task do '..k..' e já tem '..((contagem)-1)..' '..k..' mortos, deseja mesmo sair?', cid) end end else npcHandler:say("você não está em nenhuma missão task", cid) end elseif msgcontains(msg, 'yes') and talkState[talkUser] == 2 then setPlayerStorageValue(cid, storagesair, 0) npcHandler:say("Você foi retirado da task com sucesso!", cid) elseif msg == "no" then selfSay("Tudo bem então", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) NPC Ludger.xml <?xml version="1.0"?> <npc name="Ludger" script="data/npc/scripts/simple_task.lua" walkinterval="50000" floorchange="0"> <health now="100" max="100"/> <look type="129" head="95" body="116" legs="121" feet="115" addons="3"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. quer fazer uma {task}? ou {sair} de uma? tambem pode {receber} premios se terminou ela!" /> </parameters> </npc>
Script do Vodkart
-
Eddy2000 deu reputação a MaXwEllDeN em [Talkaction] Comando que mostra as quests não feitasAutor: MaXwEllDeN
Idealizador: markim1986
Versão testada: TFS 0.4.0
#Introdução
Este é um script bem simples em que o administrador escreve no script as quests que tem no servidor e quando o player digita !quests, aparece na tela dele as quests que ele já fez e as que ele não fez.
#Instalação
Adicione a seguinte tag ao seu talkactions.xml:
@Talkaction
<talkaction words="!quests" event="script" value="ServQuests.lua"/>
Copie qualquer arquivo com extensão .lua na pasta talkactions/scripts, renomeie ele para ServQuests.lua, limpe todo seu conteúdo e cole esse:
--################################### --## Developed by: MaXwEllDeN ## --## Contact: ## --## [email protected] ## --################################### local quests = { -- [" Nome da quest "] = Storageid, ["Em nome do Rei"] = 2789, ["Caça às Bruxas"] = 7231, ["Ajude a princesa"] = 1236, } function onSay(cid) local str = "#Quest(s) não concluída(s):\n" local conc = {} for i, v in pairs(quests) do if getPlayerStorageValue(cid, v) > 0 then table.insert(conc, i) else str = str .. "\n".. i .. " - Não concluída" end end str = str .. "\n\n#Quest(s) concluída(s):\n" for _, v in pairs(conc) do str = str .. "\n".. v .. " - Concluída" end return doShowTextDialog(cid, 1746, str) end -
Eddy2000 deu reputação a paulo thush em New Baiak 8.6 Editado. V2.0AGORA NA VERSÃO 2.0
Ola amigo Tibiaking vim trazer uma novidade a vocês...
sei que existem varios Baiaks por ai.. todos diferentes alguns são até iguais mais com funções inovadoras..
A um tempo atras resolvi criar um Baiakão pra mim rsrs. E pior que deu certo, em 5 dias online consegui conquistar mais de 100 players fixos online. mais acabei ficando sem tempo de resolver tudo sozinho e resolvi fechar.
o server ficou parado aqui.. muitos no msn me pedirão e eu nunca tive coragem de entregar ele assim de mão beijada né guardei por um bom tempo.. Mais.... hoje resolvi dar uma olhada nele e enquanto eu via o mapa .. funções.. e outras coisas mais , acabei achando interessante eu liberar ele aqui pra vocês ... Então chega de papo e vamos ao que Importa....
Baiak 8.60
Usando Crystal server
All features, actions, funções 100%
Addons 100%
Spells 100%
Vocações balanceadas.
Estabilidade garantida.
Serve save sem lag
Clean 100%
Talkactions GOD, CM, GM 100%
MAPA
Baiak Yourots Editado por mim.
INQ. Quest 100%
POI 100%
Anihi 100%
Areá VIP com Hunts e teleports 100%
Sala de teleports Arenas e muito mais...
LAST UPDATE
VIP 1 - 100%
VIP 2 - 100%
Adicionado Comando !buyvip por 3kk
Adicionado Novos Outfits "Elf e Vampire"
Mapa com novo visual
npcs concertados e melhorados
Novas quests
novas hunts
novas arenas
PRINTS...
É isso ai galera .. já que viram um pouco do mapa.. irei postar abaixo beleza xD acho que sera util para alguem que esteja a proucura de um baiak estavel.. Se a galera curtir estarei disponibilizando ele na versão 9.44 do Crystal server...
ACC GOD = god/god
CREDITOS:
Tryller - desenvolvedor crystal server.
Erimyth - Edição, melhorias e adaptações de novas actions.
Equipe Baiak Yourots.
DOWNLOAD:
LINK ON - >>> Mediafire <<<
SCAN: CLICK AQUI - VIRUSTOTAL <- Scan atualizado com a versão 2.0