Histórico de Curtidas
-
Lucas1m recebeu reputação de viniciusdr em [Resolvido] Meu RME não reconhece os itens do Poketibianão deu pra abrir a imagem aqui...
Mas ... vou tentar resolver.
vá em Data/items copie o arquivo Items.otb e o Items.xml
depois vá na pasta do seu Remere's vá em data/ versão do seu mapa e substitua os arquivos copiados.
Faça um Backup dos arquivos para não correr risco.
-
Lucas1m deu reputação a MaXwEllDeN em O que são Storages?O que são Storages?
Storage Value é um valor que fica gravado no banco de dados, no banco de dados ele é estruturado assim:
quando você usa a função getPlayerStorageValue(uid, chave)
O que acontece é praticamente o seguinte:
É basicamente assim que funciona, por isso por padrão todas storages que não tenham um valor definido recebem o valor -1.
Se não me engano um player pode ter até 65555 storages, todas ficam em uma única tabela no banco de dados.
Como atribuir uma storage a um player:
Como verificar a storage de um player: Exercício: Crie um script que só deixe o player usar um item uma vez.
Esse tutorial ficou bem curto, mas algumas pessoas têm dificuldade em entender as Storages
-
Lucas1m deu reputação a MaXwEllDeN em [Aula 3] Primeiros Passos<< Aula 2 - Lógica da programação
Primeiros Passos
Aula 3
Relembrando o que eu disse na primeira aula, você precisará de um interpretador Lua e é muito recomendado que possua também um bom editor com suporte à sintaxe Lua, então nosso primeiro passo será obter o editor e o interpretador.
As aulas serão voltadas ao scripting para Open Tibia Servers, então nada melhor do que um bom OTServer para testar seus scripts, mas ficar testando os scripts em um OTServer pode ser uma tarefa cansativa e demorada, então vamos usar também scripts fora de OTServers para praticar. Para isso, você pode fazer o download de qualquer um dos seguintes programas:
Editores + Interpretadores:
SciTE Scintilla [Avançado] OTScript Live! [Recomendado]
Editores:
Notepad++
Interpretadores:
Lua [Oficial]
Depois que você tiver seu editor e interpretador Lua (Recomendo o OTScript Live!), instale ele. No caso do OTScript Live!, depois de descompactar, vá em "Help", no menu, e clique em "Register To Lua". Abrirá uma caixa confirmando a alteração, basta apertar "OK" e todos os seus scripts irão abrir com o OTScript Live!.
Testando seus scripts!
No caso do SciTE, para testar o seu script você deve primeiro salvá-lo com a extensão Lua (*.lua). No caso do SciTE e do OTScript Live! você pode testar seu script apenas apertando F5, sendo que no OTScript Live! não é necessário salvar o script antes de testar.
Após pressionar F5, o SciTE irá abrir uma área de textos abaixo da área de edição com as informações do teste, e o OTScript Live! vai abrir uma janela.
Para testar se o seu SciTE ou OTScript Live! está funcionando, use o seguinte script:
print("Hello world!") Nas informações mostradas pelo interpretador deve estar escrito "Hello world!". Se aparecer, parabéns, você testou o seu primeiro script Lua... (ou não )
O que o script fez? o0
Uma das coisas mais importantes nos scripts são as funções. Uma função é "um bloco de código previamente pronto", uma subrotina, que quando chamada executa esse bloco. Imagine as funções como um atalho para executar alguma coisa. Pode ser usada, por exemplo, para encurtar scripts que tenham alguma parte do codigo que se repita muitas vezes. Criando uma função você pode usar esse código que se repete muitas vezes somente uma vez (Dentro da função), então em vez de usar esse bloco várias vezes, você só precisaria chamar a função várias vezes.
Você pode criar suas próprias funções, mas isso veremos mais para frente. Tudo o que importa agora é aprender a chamar funções.
O "Nome da Função", na verdade, é o nome da variável em que está armazenada a função, mas não se preocupem com isto ainda... O "Nome da Função" é o nome que você deve chamar para que a função ocorra, pois há vária funções (Obviamente), então você deve especificar qual função quer chamar. É a mesma coisa do que ter 3 pessoas. Quando quiser chamar uma das pessoas, deve dizer o nome dela. Os argumentos são as "Respostas" para as "Perguntas" da função chamada. A maioria das funções faz "perguntas". No caso da função "print", ela nos "perguntou" o que queriamos escrever na tela, e "respondemos": "Hello world!". É importante lembrar que cada pergunta deve ser respondida adequadamente, por exemplo, se alguém te pergunta: "Que horas são?" você não pode responder: "Sim.". A mesma coisa acontece com as funções, você deve responder exatamente o que ela está perguntando. Outra observação importante é que você deve responder as perguntas da função na ordem em que foram perguntadas. Se a pergunta nº 1 for "Que horas são?" e a nº 2 for "Quer um biscoito?", você deve responder respectivamente que horas são e se você quer um biscoito. OBS: Algumas funções fazem "perguntas" opcionais, ou seja, você pode ou não responder. Se você não "responder", a própria função atribuirá um valor padrão para a resposta. Os parâmetros são simplesmente o conjunto de todos os argumentos. OBS: Todos os argumentos (Respostas) do parâmetro devem estar entre parênteses e ser separados por vírgulas! Tipos de valores! Bem, como eu disse, cada resposta deve seguir o tipo da pergunta, então vou citar aqui os tipos destes valores. OBS: Existe uma função para descobrir o tipo de cada valor! Esta função é a função type(valor)... Numbers Como o nome diz, numbers são números, não há muito o que falar sobre eles... Exemplo: print(1) print(2) print(3) OBS: A função print aceita todos os tipos como resposta.
Strings
As strings devem iniciar com um símbolo especial e deve terminar com o mesmo caractere que foi usado para iniciar a string. Esses símbolos são:
Apóstrofo: Começa com ' e termina com '.
Aspas: Começa com " e termina com ".
Colchete-Colchete: Começa com [[ e termina com ]].
Colchete-Igual-Igual-Colchete: Começa com [==[ e termina com ]==].
As strings são conjuntos de caracteres, como letras, números (Não são numbers, pois se houver um número entre os símbolos especiais será tomado como string!!!), acentos, espaços, etc... Se você quiser escrever uma frase na tela, por exemplo, não pode deixá-la solta pelo script. Esta frase deve ser uma string, ou o script dará erro.
Exemplo:
print('Apóstrofos') print("Aspas") print([[Colchete-Colchete]]) print([==[Colchete-Igual-Igual-Colchete]==]) OBS: 1 << Isto é um number.
"1" << Isto é uma string.
Booleanos
Os booleanos podem assumir apenas dois valores: true e false.
true: Valor verdadeiro.
false: Valor falso.
OBS: Os booleanos podem ser complicados de entender no começo, mas com o tempo você acostuma. Não se preocupe com eles agora...
Exemplo:
print(true) print(false) print(nil)
Functions
Exatamente o que o nome diz: é o que estamos vendo agora. Functions são nada mais nada menos do que funções.
Exemplo:
print(function() end) OBS: Não se preocupe com isso ainda!
Tables ou Arrays
São tabelas, ou seja, armazenam mais do que um valor dentro de uma "caixa". Tabelas podem armazenar outras tabelas e todos os valores dentro de uma tabela possuem um identificador, chamado "index" (índice).
Tabelas começam com o símbolo { (Chave) e terminam com o símbolo } (Chave).
Exemplo:
print({})
Userdata
Lua é uma linguagem de programação criada para dar extensão à linguagem de programação C e C++. Userdatas são ponteiros que indicam valores em C ou C++. Não se preocupe com eles.
Nil
Nil simboliza um valor nulo. Não deixa de ser um valor, mas é um valor sem conteúdo.
Exemplo:
print(nil)
As funções retornam!
Toda função retorna um ou mais valores, nem que sejam valores nulos (nil), portanto você pode usar uma função dentro do print para escrever os valores que a função retornar! Vamos usar como exemplo a função type(valor), que vai nos retornar uma string com o tipo do valor.
Exemplo: print(type(1))
O exemplo acima vai escrever em sua tela a frase: "Number", pois 1 é um number!
Exercícios:
Usando a função print para escrever na tela e type para pegar o tipo de algum valor, obtenha as seguintes frases na tela:
Resposta:
Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
Aula 4 - Operadores e Bibliotecas >> -
Lucas1m deu reputação a p e o p l e em TalkActions, Comando para tutor /Mute.data/talkaction/talkactions.xml adicione a tag
<talkaction log="yes" access="1" words="/mute" event="script" value="mute.lua"/> data/talkaction/script crie um arquivo chamado mute.lua e adicione
local v = {} for k = 1, 100 do table.insert(v, createConditionObject(CONDITION_MUTED)) setConditionParam(v[k], CONDITION_PARAM_TICKS, k*60*1000) end function onSay(cid, words, param) if (words == "/mute") then local t = string.explode(param, ",") if param == '' then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") return true end local player,time,pid = getPlayerByName(t[1]),t[2],getPlayerByNameWildcard(t[1]) if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player with this name doesn\'t exist or is offline.") return TRUE end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você mutou o jogador "..t[1].." por "..time.." minutos.") doAddCondition(player, v[tonumber(time)]) setPlayerStorageValue(player, 90000, os.time()+time*60) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você foi mutado por "..time.." minutos.") elseif (words == "/desmute") then if param == '' then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") return true end local player = getPlayerByNameWildcard(param) if(not player)then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player not found.") return true end if getCreatureCondition(player, CONDITION_MUTED) == false then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "este jogador não está mutado.") return true end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você desmutou o jogador "..param..".") doRemoveCondition(player, CONDITION_MUTED) setPlayerStorageValue(player, 90000, -1) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você foi desmutado.") end return true end Lembrando cargos acima de TUTOR poderá mutar!
-
Lucas1m deu reputação a Cat em [Resolvido] [Mapping] New Wall RMEsim, mas dai vai ficar sem o item que tu apagar, tenta substituir por algum que nao esta sendo utilizado
-
Lucas1m recebeu reputação de Wreymar em [Resolvido] como-adicionar-uns-texto-saindo-do-chao-do-seu-serverGlobalEvents/script texto.lua
globalevents.xml
adiciona essa Tag:
-
Lucas1m 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 -
Lucas1m deu reputação a Jamison Collins em [Resolvido] [Pedido] Small BasinTente isso :
function onUse(cid, item, frompos, item2, topos) local config = { uniqueID = 52500, -- aqui você colocará o actionID que você terá que por no Small Basin através do Map Editor. lifecalcule = ((getCreatureMaxHealth(cid) / 100) * 20) -- não mecha aqui } if item.uid == config.uniqueID then doSendMagicEffect(getThingPos(cid), 28) doCreatureAddHealth(cid, config.lifecalcule) end return true end -
Lucas1m deu reputação a Jamison Collins em [Talkaction] Criando placas on-game !Olá galera do TibiaKing.
Bem, esse script que eu criei é meio ridículo, porém, ele me ajuda muito quando eu quero fazer um evento de última hora.
Você não já tentou criar uma placa com o comando /i IDdaPLACA + /attr set text (algo parecido) ?
Esse script vai ajudar muito !
Usando /addsing textoquevocêquernaplaca você vai estar criando uma placa com o texto que você botou, e o ID da placa muda quanto a direção em que o seu personagem GM estiver virado.
Talkaction's tag XML:
<talkaction log="yes" words="/addsing" access="3" event="script" value="createsing.lua"/> Depois, crie um arquivo .lua com e nomeie de "createsing.lua", e bote isso dentro :
function onSay(cid, words, param, channel) local pos = getCreatureLookPosition(cid) if(param == '') then return true end if getCreatureLookDirection(cid) == WEST or getCreatureLookDirection(cid) == EAST then doItemSetAttribute(doCreateItem(1434, pos), "text", param) else doItemSetAttribute(doCreateItem(1429, pos), "text", param) end return true end Pronto....
Realmente, esse script foi feito apenas por treino meu.
Obrigado
-
Lucas1m deu reputação a Jamison Collins em [Quest RPG]Solução :
-- Desenvolvido do tibiaking.com por : -- Daaniel Nolmena & Jamison Collins -------------------------------------- -------------------------------------- local config = { pos_buraco = {x =1036, y = 1017, z = 7}, -- posição em que o buraco vai aparecer tempo_normal = 10, -- tempo em segundos para o buraco desaparecer mensagem = "The hole is open. QGGGQ", -- mensagem ao tentar usar a statua com o buraco aberto effect = CONST_ME_POFF, id_do_buraco = 4835 -- itemID do buraco } function onUse(cid, item, frompos, item2, topos) if item.uid == 5755 and getTileItemById(config.pos_buraco, 407).uid > 0 then doCreateItem(config.id_do_buraco, config.pos_buraco) addEvent(buracoOP, config.tempo_normal * 1000) doSendMagicEffect(config.pos_buraco, config.effect) else doPlayerSendTextMessage(cid, 22, config.mensagem) end return true end function buracoOP() doTransformItem(getThingfromPos(config.pos_buraco).uid, 407) doSendMagicEffect(config.pos_buraco, config.effect) end -
Lucas1m deu reputação a Jamison Collins em [Quest RPG]Desculpa... eu fui testar o script e estava errado...
Agora está certo 100% eu mesmo testei !
Aqui está :
-- Desenvolvido do tibiaking.com por : -- Daaniel Nolmena & Jamison Collins -------------------------------------- -------------------------------------- local config = { pos_buraco = {x =1081, y = 1038, z =10}, -- posição em que o buraco vai aparecer tempo_normal = 10, -- tempo em segundos para o buraco desaparecer mensagem = "O buraco já está aberto !", -- mensagem ao tentar usar a statua com o buraco aberto effect = CONST_ME_POFF, id_do_buraco = 4835 -- itemID do buraco } function onUse(cid, item, frompos, item2, topos) if item.aid == 5755 and getTileItemById(config.pos_buraco, 407).itemid > 0 then doCreateItem(config.id_do_buraco, config.pos_buraco) addEvent(buracoOP, config.tempo_normal * 1000) doSendMagicEffect(config.pos_buraco, config.effect) else doPlayerSendTextMessage(cid, 22, config.mensagem) end return true end function buracoOP() doTransformItem(getThingfromPos(config.pos_buraco).uid, 407) end -
Lucas1m deu reputação a Jamison Collins em [Quest RPG]Bom, tente isso...
Crie um arquivo buracoquest.lua na pasta script da pasta actions e cole isso :
-- Desenvolvido do tibiaking.com por : -- Daaniel Nolmena & Jamison Collins -------------------------------------- -------------------------------------- local config = { pos_buraco = {x =1081, y = 1038, z =10, stackpos = 1}, -- posição em que o buraco vai aparecer tempo_normal = 10, -- tempo em segundos para o buraco desaparecer mensagem = "O buraco já está aberto !", -- mensagem ao tentar usar a statua com o buraco aberto effect = CONST_ME_POFF, id_do_buraco = 4835 -- itemID do buraco } function onUse(cid, item, frompos, item2, topos) if item.aid == 5755 and getThingfromPos(config.pos_buraco).itemid == 407 then doCreateItem(config.id_do_buraco, config.pos_buraco) addEvent(doCreateItem(407, config.pos_buraco), config.tempo_normal * 1000) doSendMagicEffect(config.pos_buraco, config.effect) else doPlayerSendTextMessage(cid, 22, config.mensagem) end return true end Em actions.xml adicione isso :
<action actionid="5755" event="script" value="buracoquest.lua"/> E não se esqueça de botar o ActionID na estatua pelo Map Editor.
Se houver algum erro no distro, tire print e cole aqui.
Obrigado.
-
Lucas1m deu reputação a Jamison Collins em [Spell] Modificações em magias de Cura +RPGOlá galera,
Venho postando para vocês umas modificações que poderão fazer a diferença em seus servidores RPG.
Como vocês bem podem perceber, o Tibia tem um sistema com falhas horríveis quanto as Spells de Cura/Suporte...
Exemplo :
Runas de cura que os players podem usar dando suporte aos outros :
Ultimate Healing Rune Light Healing Rune
Magias instantâneas de cura que os players podem dar suporte aos outros :
Mass Healing Heal Friend
Bem, como vocês bem sabem sobre essas magias, há uma possibilidade de o Suporter (geralmente os Druids) estar em uma área protegida e ajudando os aliados que estão na batalha, e isso acaba com a graça do PVP. Com os scripts a seguir, os players não poderão mais usar essas magias dentro de área protegida para ajudar o aliado em batalha.
Para aplicar o script ao seu servidor, é só você entrar na pasta spells > scripts > healing e modificar os arquivos de acordo com o nome das spells postadas a seguir ...
Então vou postar aqui a solução para esses problemas :
Heal Friend (heal friend.lua)
Mass Healing (mass healing.lua)
Light Healing Rune (light healing rune.lua)
Ultimate Healing Rune (ultimate healing rune.lua)
Bem, espero que isso tenha sido útil a vocês.
-
Lucas1m deu reputação a raikilles em [PEDIDO] npc de task diferente/simples/ para serve com rpgbom galera queria pedir um npc simples de task,porem o npc desse apenas 1 task por exemplo
player: hi
npc: ola [player] ando tendo problemas com esses malditos dwarf cavando tuneis poderia me ajuda?
player:sim
npc :va no subsolo e de uma lição a eles..voce aceitaria a tarefa de mata 300 dwarf para min ? eu te pagaria uma boa recompensa
player:sim
npc: boa sorte
ai o player vai e mata os 300 dwarf's (porem contase qualquer tipo de dwarf....solider, guard , comum )
voltase no npc
player :hi
npc :você voltou vivo,conseguiu completa a tarefa?
player:sim
npc: ok,tome sua recompensa (10000 de exp ,5 k ,dwarven legs)
player: bye
obs: gostatia que a configuração do npc fosse simples,para eu usar ele como base para criar varios npc's e espalha pelo mapas com diversas task's
-
Lucas1m deu reputação a Jamison Collins em [AJUDA] Magias de Heal , Exura , Exura Gran , Exura San , Exana MortTalvez sim, há fórmulas variadas nas magias. Não sei te explicar muito bem, mas sei te falar que a fórmula é afetada 90% pelo magic level.
-
Lucas1m deu reputação a Mophus em Recentes Trabalhos - Mapping
-
Lucas1m deu reputação a Adriano SwaTT em Como aumento o fast attack de um item específico?Em items.xml, procure o item desejado e adicione a tag abaixo:
<attribute key="attackspeed" value="500"/>
Aí você configura a seu gosto.
Espero que ajude, caso não funcione nos avise para tentarmos solucionar.
Boa Sorte.
-
Lucas1m deu reputação a Cat em [Resolvido] [Pedido] Small Basinlocal config = { actionID = 57500, -- aqui você colocará o actionID que você terá que por no Small Basin através do Map Editor. lifepercent = 20, -- porcentagem que o player vai recuperar lifecalcule = ((getCreatureMaxHealth(cid) / 100) * config.lifepercent) -- não mecha aqui } function onUse(cid, item, frompos, item2, topos) if item.aid == config.actionID then doSendMagicEffect(getThingPos(cid), 28) doCreatureAddHealth(cid, config.lifecalcule) end return true end <action actionid="57500" event="script" value="smallbasin.lua"/> créditos: jamison, não esqueça de configurar a tag.
-
Lucas1m deu reputação a Cat em [Resolvido] Blueberry bushes (erro)ja sei onde errou:
em DATA/actions/scripts/> OTHERS < copie um arquivo e renomeie para blueberrybush
function onUse(cid, item, fromPosition, itemEx, toPosition)
doCreateItem(2677, 3, fromPosition)
doTransformItem(item.uid, 2786)
doDecayItem(item.uid)
return true
end
e adicione a tag em data/actions/actions.xml
você criou o arquivo em scripts, não em scripts/others ;p
-
Caverna "Montanhosa" de Spider
Olá!!
Peguei uma imagem antiga aqui e resolvi fazer um tutorial com ela, por isso, vou ensinar somente os passos e vocês verão no final como é o resultado final.
Primeiramente, faça o contorno de um andar usando a própria montanha.
Na parte de cima, coloque a parte normal cavernosa, use isso como quiser.
Após isso, é bem facil de se fazer.
O chão, deixe normal de cavernas comuns, coloque um pouco de chão de grama e também de swamp.
(Na imagem tem muito pouco, você pode deixar bem mais!!)
Agora, coloque tufos de grama normalmente, gravel, pedras andáveis, coisas normais de todo mapa natural. Esses, coloque em todas as partes.
Agora, em torno do swamp:
Coloque plantas de swamp.
Use também Mangrove em algumas partes, vivos ou mortos.
Coloque cogumelos gigantes e pequenos.
Coloque pedras de slime, se quiser, coloque pequenas cachoeirinhas de swamp nelas, mas não representei na imagem isso.
Na verdade, como não tinha feito com esse propósito, ficou com bem pouco slime, você pode deixar assim, mas é bom deixar mais, mas sem exagero também!
Essa maneira de se fazer é inovadora e diferente, recomendo bastante o uso dela!
Espero que tenham gostado!
Abraços,
AnyurCT.
-
Lucas1m deu reputação a 3visan em Criatividade - poste suas idéias!Créditos: Xadrian
-
Lucas1m deu reputação a Cat em Criatividade - poste suas idéias!credito: otland
-
Lucas1m deu reputação a 3visan em Criatividade - poste suas idéias!Criativade - poste suas idéias
Fala galera, bem esse tópico é para mappers compartilharem suas ideias e truques de mapping para o pessoal, se você tem alguma ideia porfavor poste aqui nesse tópico.
Exemplo de uma idéia
Créditos Para o Neon!
Vamos lá pessoal mostrem oque vocês sabem.