Ir para conteúdo

Ryzor

Membro
  • Registro em

  • Última visita

Tudo que Ryzor postou

  1. Ryzor postou uma resposta no tópico em Suporte Tibia OTServer
    O serve e com site , então se o player crio conta e isso nao tinha cido corrigido ele ira nascer embaixo da terra msm + se voce tivese arrumado o accountmanager.php antes nao ocorreria este erro ex. eu hj crio conta no seu sv da pa mim joga suave
  2. Ryzor postou uma resposta no tópico em Suporte Tibia OTServer
    E o seguinte . vai no seu accountmanager.php e procure prosx procurando vai ta la 3 opção e so vc por ex 160 51 7 ajudei ? REP+
  3. Ryzor postou uma resposta no tópico em Suporte Tibia OTServer
    Basta voce agurdar que eles irão mandar um email mandando o ip,senha do dedicado.
  4. Ryzor postou uma resposta no tópico em Playground (Off-topic)
    que titulo mais gay que foi esse ;/ roubado :x
  5. Ryzor postou uma resposta no tópico em Playground (Off-topic)
    Tigres 2 X Bambis 0 e corinthians domingo campeão !
  6. Cara use o xamp 1.7.3 e o melhor.
  7. Ryzor postou uma resposta no tópico em Mapas de Tibia
    Não consigo ver as imagems
  8. Ryzor postou uma resposta no tópico em Remere's Map Editor
    Fazendo Praia Olá pessoal, tudo bom? Gostaria de ensinar a vocês como fazer uma praia simples e legal para seu servidor. É algo fácil de fazer mas poucos têm noção de como! Para começar, faça seu mapa base, com água e areia. Esse foi o começo, agora você irá colocar também grama e as bordas de praia. As bordas que você deve usar estão entre o id 4644 e o id 4663, tudo bem? Posicionem de acordo com o que você vai colocar de grama e tenha cuidado, deixe uma parte com areia, não tão grande e outra com grama. Você pode fazer algo grande, mas no tibia, é bom ir variando entre areia e grama! Você também pode colocar bordas grossas de grama em alguns lugares. Agora é a hora de detalhar! Primeiramente, coloque alguns arbustos e árvores na parte verde do mapa, assim como tufos de grama. Caso queira colocar tufos de grama na areia, você pode, mas sem exagerar. Coloque também alguns mangroves mortos (5392 e 5396) na areia e mangroves vivos (5393 e 5397) na parte de grama. Coloque palmeiras vivas e mortas, na grama ou na areia, procure não exagerar! Coloque algumas conchas (5680) na areia! Também na areia, coloque os sand gravel (id 8033 a 8045) em algumas partes! Acho que ficou bem legal seu mapa, não é? Como é um tutorial, não fiz algo tão bem detalhado, por isso vou colocar uma outra foto aqui de algo que pode ser também uma praia! Assim, é possível notar que você pode colocar alguns cactos, flores e também outros tipos de bordas, mas são coisas que não são essenciais!! Creditos : Anyur
  9. Ryzor postou uma resposta no tópico em Playground (Off-topic)
    --' sai fora que doido voce raspar o saco nem ferrando so mais dexa a moita memo aushauhsa
  10. Ryzor postou uma resposta no tópico em Playground (Off-topic)
    Praticamente o campeonato ta sendo treino para nois um jogo-treino kk
  11. Ryzor postou uma resposta no tópico em Playground (Off-topic)
    Nois so ta treinando ok ? o corinthians pode ta em primeiro e jogar contra o lanterna do campeonato pode perder. O futebol e foda ;s
  12. Lista dos melhores tutoriais, selecionados e classificados por nivel de conhecimento necessár io , a lista não precisa ser seguida necessariamente na ordem que se encontra, este tópico apenas contém um apoio ao estudo. Lembrando , não reviva os tópicos aqui listados com agradecimentos ou comentários desnecessários , salvo os casos onde alguma dúvida não foi sanada (pesquise antes para saber se sua pergunta já não foi respondida) e for relevante ao assunto tratado no tópico ! As estrelas representam o nível de recomendação tendo como base o conteúdo tratado em cada tutorial e não o nível de qualidade. Matematica Afinal, quem deseja programar (independente da linguagem) precisa saber e gostar (pelo menos um pouco) de matematica. http://tibiaking.com/forum/topic/19534-caculos-com-porcentagem/ http://tibiaking.com/forum/topic/19533-math-a-matematica-por-traz-do-script/ Programação/Scripting Lua Programação Lua propriamente dita que pode ser aplicada fora ou em um OTServer. • Dicas e/ou Técnicas de Programação Algumas dicas que podem ou não ajudar sua produtividade e/ou economizar tempo. http://tibiaking.com/forum/topic/18735-automatizacao-e-simplificacao-de-scripts/ http://tibiaking.com/forum/topic/18592-metodologia-de-scripting/ http://tibiaking.com/forum/topic/19554-did-you-know/ http://tibiaking.com/forum/topic/18584-matematica-lua/ http://tibiaking.com/forum/topic/18606-dicas-essenciais-em-lua/ http://tibiaking.com/forum/topic/19556-boas-praticas-de-programacao/ http://tibiaking.com/forum/topic/19177-algumas-libs-uteis-em-otserv/ http://tibiaking.com/forum/topic/19328-conceitos-de-aleatorio/ http://tibiaking.com/forum/topic/19557-declarando-variaveis-de-forma-simples/ http://tibiaking.com/forum/topic/19558-scripting-dictionary/ • Iniciante http://tibiaking.com/forum/topic/19560-tutorial-return/ http://tibiaking.com/forum/topic/19026-conhecendo-o-osdate/ http://tibiaking.com/forum/topic/19562-nmedio-string-tutorial/ http://tibiaking.com/forum/topic/19563-criando-funcoes/ • Intermediario http://tibiaking.com/forum/topic/19248-manipulando-arquivos-atraves-de-lua/ • Avançado http://tibiaking.com/forum/topic/18766-poo-em-lua/ http://tibiaking.com/forum/topic/19565-patterns/ http://tibiaking.com/forum/topic/19250-metametodos/ http://tibiaking.com/forum/topic/18784-nvav-usando-luasql/ ✔ Programação/Scripting Lua direcionado a OTServ Parte que visa a programação Lua para OTServ, suas particularidades e funções. http://tibiaking.com/forum/topic/19261-entendendo-o-stackpos/ http://tibiaking.com/forum/topic/19051-informacoes-que-vaija-precisarprecisou/ • Intermediário http://tibiaking.com/forum/topic/19056-talkaction-com-multiplos-parametros/
  13. Ryzor postou uma resposta no tópico em Playground (Off-topic)
    vai tomar pau
  14. Ryzor postou uma resposta no tópico em Tutoriais sobre Scripting
    Pattern Pattern ("Padrão" em pt-br) é uma poderosa funcionalidade para manipulação de strings (caso você não saiba o que é uma "string", busque saber antes de continuar, recomendo também ter um certo domínio sobre a biblioteca string), e usada para buscar um padrão de texto pré-definido. Porque aprender ? Possui recursos indispensáveis quando se precisa trabalhar com strings, alta aplicabilidade em scripts direcionados a otserv (talkactions), não que se vá usar isso a todo o momento, mas é altamente recomendado que se saiba trabalhar com patterns, é extremamente útil as vezes. Funções Algumas funções da biblioteca padrão string que aceitam pattern em seus parâmetros: string.find( string , pattern ) – Procura a primeira instância da pattern na string string.gfind( string , pattern ) – Quando for chamada repetidamente, retorna cada instância da pattern na string string.gsub( string , pattern , replace ) – Retorna uma string em que todas as instâncias da pattern foram substituidas por replace string.match( string , pattern , init ) – Retorna uma lista de ocorrências da pattern na string, começando em init (1 significa o primeiro caractere da string, 2 o segundo, assim por diante) Conjuntos Quando se constrói uma pattern, se utiliza alguns caracteres, cada um representando um conjunto diferente: x (onde "x" não é um caractere mágico ^$()%.[]*+-? ) → Representa o caractere "x" mesmo; . → Representa todos os caracteres; %a → Representa todas as letras; %c → Representa todos os caracteres de controle; %d → Representa todos os dígitos; %l → Representa todas as letras minusculas; %p → Representa todos os caracteres de pontuação; %s → Representa todos os caracteres de espaço; %u → Representa todas as letras maiúsculas; %w → Representa todos os caracteres alfanuméricos; %x → Representa todos os dígitos hexadecimais; %z → Representa o caractere com a representação do 0 (zero). Ao usar zeros na pattern ela não irá funciona, use esta nesse caso; Ao usar letra maiúscula, isso faz representar o contrário (Exemplo: %A → Representa tudo que não for letras; %D → Representa tudo que não for um digito; assim por diante...).Como dito anteriormente, para se criar uma pattern é necessário utilizar esses conjuntos, uma pattern é feita de uma sequência desses conjuntos. Se você quisesse criar uma pattern para encontrar uma certa string em um texto, por exemplo, para encontrar os números da string "23otserv", você teria que usar esta pattern "%d%dotserv", assim você estaria definindo que quer os numeros que estão ao lado da palavra ‘otserv’. Mas e se tivesse que encontrar um numero com 10 "casas" ? Por isso existe os modificadores, para evitar essa repetição desnecessária. Modificadores Servem principalmente para poupar serviço e são quatro, entenda 'x' como sendo algum conjunto (%a, %c, %d, ...): x * → Retorna 0 ou mais repetições do conjunto x. Sempre retornará a maior cadeia possível encontrada; x + → Retorna 1 ou mais repetições do conjunto x. Sempre retornará a maior cadeia possível encontrada; x - → Retorna 0 ou mais repetições do conjunto x. Sempre retornará a menor cadeia possível encontrada; x ? → Retorna 0 ou 1 ocorrência de x; Elementos especiais Existe também quatro elementos especiais: %n → Sendo n um numero entre 1 e 9, busca a enésima captura (apenas vi sendo usada na função string.gsub); %bxy → Procura uma string que inicia com x e termina com y; ^ → Quando está no começo da pattern, força a pattern a ser encontrada no começo da string; $ → Quando está no final da pattern, força a pattern a ser encontrada no fim da string;Nota: Se ^ ou $ estiverem em outros lugares da pattern, não fazem nada, apenas representam eles mesmos. Construindo uma pattern Vamos construir algumas patterns com os elementos citados acima. Primeiro alguns exemplos e depois uma explicação mais detalhada de cada elemento da pattern: String para as patterns: "Exemplo lua de pattern lua feito em lua" exemplos toscos, a gente se vê por aqui Pattern: (%a+) luaCapturaria: Exemplo lua de pattern lua feito em luaEle só retornará o primeiro caso que corresponder com a pattern. Agora, ao invés de usar o "%a" fosse usado o "." (que captura tudo), aconteceria isso: Pattern: (.+) luaCapturaria: Exemplo lua de pattern lua feito em luaComo "%a" captura apenas letras e não o "espaço", foi por isso que no primeiro exemplo só capturou a palavra "Exemplo" e no segundo exemplo, como foi usado o "." que captura tudo, capturou uma parte maior (ai que vêm a parte do modificador) por causa do modificador "+" que sempre vai buscar a maior cadeia possivel, agora veja um exemplo usando o "-": Pattern: (.-) luaCapturaria: Exemplo lua de pattern lua feito em luaO modificador "-", como dito anteriormente, captura a menor cadeia e por isso capturaria apenas o "Exemplo". Todos os modificadores são importantes. Um exemplo maior: Pattern: (%a+) lua (.-) lua (.+)Capturaria: Exemplo lua de pattern lua feito em lua Para quem não entendeu Explicação passo a passo: ( %d + ) Captura → O parenteses define que você quer que retorne essa captura. Conjunto → No caso é o de digitos. Modificador → No caso mostra que é para obter a maior cadeia possivel com 1 ou mais repetições do conjunto. Um exemplo mais avançado Agora usando de exemplo a pattern da função string.trim, que remove os espaços em branco do lado esquerdo e direito da string. Código: function string.trim(str) -- Function by Colandus return (string.gsub(str, "^%s*(.-)%s*$", "%1")) end string.gsub( str , " ^ %s* (.-) %s* $ ", " %1 ") str → Uma string qualquer; ^ → Força o começo da pattern ser encontrada no começo de str; %s* → Conjunto de espaços, podendo ter 0 ou mais repetições; (.-) → A captura principal, a que vai ser retornada, podendo ser digitos, letras, espaço, etc; $ → Força o final da pattern ser encontrada no fim de str; %1 → Retorna a 1ª captura da pattern e usa como parametro da função (Esse é um dos elementos especiais, %n);Dessa forma será removido os espaços apenas no começo e no fim da string ! Complemento Depois de dominar e entender como funciona as patterns, vamos aplica-las em funções, vou mostrar um exemplo de cada função (as que foram citadas no começo). string.find: Código: init, end, case1, case2 = string.find("minha string123", "(%a+) (.+)") init → Onde inicia a captura encontrada ( nesse caso, init = 1 ); end → Onde termina a captura encontrada ( end = 15 ); case1 → Primeira captura que equivale a pattern (%a+) ( case1 = minha ); case2 → Segunda captura que equivale a pattern (.+) ( case2 = string123 ); string.gfind: Código: for occ in string.gfind("a1a2a3a4a5", "(%a%d)") do print(occ) end occ → Terá um valor para cada instância da pattern (%a%d) encontrada, então irá printar a1, a2, a3, a4 e a5. string.match: Código: case1, case2 = string.match("Eu tenho 50 reais", "(%d+) (%a+)") case1 → Primeira captura que equivale a pattern (%d+) ( case1 = 50 ); case2 → Segunda captura que equivale a pattern (%a+) ( case2 = reais ); Referência http://www.lua.org/manual/5.1/pt/manual.html#5.4.1 http://lua-users.org/wiki/PatternsTutorial Então é isso, espero ter sido o mais claro possivel, Qualquer dúvida, erro ou sugestão, poste ! Creditos Lwkass
  15. Ryzor postou uma resposta no tópico em Tutoriais sobre Scripting
    Criando funções Nesse breve tutorial vou tentar explicar da forma mais simples possível como criar funções, principalmente para pessoas que entraram recentemente no universo de Lua. Como fazer funções? Quando você cria um script para otserver, uma action por exemplo,geralmente se inicia com uma function onUse(...). Quando se faz isso, você está simplesmente criando uma função em Lua, que será executada pelo software em C++ que roda o servidor, assim executando o script. Na declaração de uma função, usamos a seguinte sintaxe: function nomeDaFunção() corpoDaFunção end Ou a seguinte: nomeDaFunção = function() corpoDaFunção end Em nomeDaFunção, você definirá um nome para ser usado, no corpo da função você colocará tudo que quiser que ela execute, lembrando que para ela retornar alguma coisa terá que ser usado o comando return. Parâmetros São como variáveis,que ao ser executada a função é atribuido um valor e eles, exemplo: function somar(p1,p2) return p1+p2 end Ele irá retornar a soma dos dois parâmetros aos quais será atribuído um valor quando é executada a função, exemplo: somar(1,2) Nesse exemplo, será atribuído o valor 1 e 2 a p1 e p2, respectivamente, se não declararmos esses argumentos ao executar a função, p1 e p2 se tornarão nulos. Vamos voltar ao exemplo da function onUse(cid,item,topos,item2,frompos).Se quando ela é executada pelo servidor, por exemplo, sejam dados os seguintes valores: onUse(10,{itemid = 1,actionid = 0,uid = 0},{x,y,z},{itemid = 2,actionid = 0,uid = 0},{x,y,z}) Nesse exemplo, os valores cid,item,topos,item2,frompos valerão 10,{itemid = 1,actionid = 0,uid = 0},{x,y,z},{itemid = 2,actionid = 0,uid = 0},{x,y,z}. Outro exemplo, você quer fazer uma função que consiga o nome do player, você fará assim: function getName(cid) return getPlayerName(cid) end Creditos : Dean
  16. Ryzor postou uma resposta no tópico em Tutoriais sobre Scripting
    ..:: String Tutorial ::.. O que são strings? São seqüências ordenadas de caracteres, símbolos, escolhidos a partir de um conjunto pré-determinado. Manipulando Strings A biblioteca string provê funções com diversas utilidades, para manipulação de strings (cadeias de caracteres, como explicado acima). Como exemplos, podemos citar a localização e extração de subcadeias, além de casamento de padrões. Em lua, o primeiro caractere da indexação vai estar na posição 1, e não na 0 (como em C). Os índices podem ter valores negativos, e nesse caso serão interpretados como uma indexação de trás pra frente, começando do final da cadeira. Logo, o ultimo caractere está na posição -1, e assim por diante. OBS: Na sintaxe das funções citadas abaixo, os parâmetros entre colchetes são facultativos. Byte Descrição: Retorna o código numérico interno dos caracteres, cada caractere possui um numero, vide tabela Ascii. Sintaxe: string.byte(string [, n]), aonde string é a Cadeia de caracteres, e n a posição do caractere que você deseja pegar o número interno onde o valor padrão é 1. Exemplo: >> string.byte("Eu sou uma string.") = 69 -- 69 é o numero interno do caractere "E" >> string.byte("Eu sou uma string.", 1) = 69 >> string.byte("Eu sou uma string.", 2) = 117 -- 117 é o numero interno do caractere "u" >> string.byte("Eu sou uma string.", -1) = 46 -- 46 é o numero interno do caractere "." >> string.byte("Eu sou uma string.", -2) = 103 -- 103 é o numero interno do caractere "g" Char Descrição: Faz o inverso o string.byte citado acima, ele transforma o código numérico interno dos caracteres no caractere em si. Sintaxe: string.char(numero1 [, numero2, ...]) aonde cada parâmetro conterá o numero interno do caractere desejado, podendo ter infinitos parâmetros. Exemplo: >> string.char(69) = "E" >> string.char(117) = "u" >> string.char(69, 117) = "Eu" Len Descrição: Retorna o numero de caracteres da cadeia. Sintaxe: string.len(string), onde string é a Cadeia de caracteres. Exemplo: >> string.len("Eu sou uma string.") = 18 -- numero de caracteres desta cadeia >> string.len("Eu sou uma outra string.") = 24 -- numero de caracteres desta cadeia Lower Descrição: Converte todos os caracteres maiúsculos, de uma cadeia, para minúsculos e apenas copia os outros. Sintaxe: string.lower(string), aonde string é a cadeia de caracteres. Exemplo: >> string.lower("Eu Sou Uma String.") = "eu sou uma string" -- cadeia convertida para minúscula >> string.lower("eU sOu OuTrA StRiNg.") = "eu sou outra string" -- cadeia convertida para minúscula Upper Descrição: Converte todos os caracteres minúsculos, de uma cadeia, para maiúsculos e apenas copia os outros. Sintaxe: string.upper(string), aonde string é a cadeia de caracteres. Exemplo: >> string.upper("Eu Sou Uma String.") = "EU SOU UMA STRING" -- cadeia convertida para maiúscula >> string.upper("eU sOu OuTrA StRiNg.") = "EU SOU OUTRA STRING" -- cadeia convertida para maiúscula Rep Descrição: Retorna uma cadeia que é a conexão de cópias da string. Sintaxe: string.rep(string, n), onde string é a cadeia de caracteres e n é o número de cópias de string a serem ligadas. Exemplo: >> string.rep("Eu Sou Uma String.",2) = "Eu Sou Uma String.Eu Sou Uma String." -- conexão das cadeias. >> string.rep("Eu Sou Uma String.",3) = "Eu Sou Uma String.Eu Sou Uma String.Eu Sou Uma String." -- conexão das cadeias. Reverse Descrição: Retorna a cadeia de caracteres ao contrário, do fim para inicio. Sintaxe: string.reverse(string), aonde string é a cadeia de caracteres. Exemplo: >> string.reverse("Eu Sou Uma String.") = ".gnirtS amU uoS uE" -- cadeia invertida. >> string.reverse("Eu Sou Outra String.") = ".gnirtS artuO uoS uE" -- cadeia invertida. Sub Descrição: Retorna uma subcadeia da cadeia de caracteres. Sintaxe: string.sub(string, n [, z]), onde string é a cadeia de caracteres, n é onde a subcadeia começa e z é onde a subcadeia termina. Se z for ausente, a função assume ele como igual a -1, que será o final da cadeia. Exemplo: >> string.sub("Eu Sou Uma String.",1,9) = "Eu Sou Um" -- Subcadeia, de 1 ("E" de "Eu") à 9 ("m" de "Uma") >> string.sub("Eu Sou Outra String.") = "Sou Uma Outra String." -- Subcadeia, de 4 ("S" de "Sou") à -1 (".", que é o fim da cadeia) Match Descrição: Procura o primeiro casamento de pattern na cadeia de caracteres1. Se encontrar um, o match retornará as capturas do padrão, caso contrário retorna nil. Sintaxe: string.match(string, pattern [, init]) onde string é a cadeia de caracteres, pattern é o 'pedaço' que se que localizar e init é a posição que você deseja iniciar a verificação. Exemplo: >> string.match("Eu sou uma string.", "s.") = so -- O símbolo '.', no pattern, representa qualquer outro caractere >> string.match("Eu sou uma string.", "s.", 7) = st -- Como aqui a verificação é depois do 7° caractere a primeira parte que se encaixou com o pattern foi o 'st' >> string.match("Eu sou uma string.", "s.", 8) = nil -- Depois da posição 8, não foi encontrado subcadeias que se encaixem com o pattern --Logo colocarei um tutorial de pattern Find Descrição: Procura a posição, começo e fim, de uma subcadeia de caracteres, caso não encontrar retorna nil. Ela é semelhante a Match, só que esta retorna somente a posição. Sintaxe: string.find(string, pattern [, init]) onde string é a cadeia de caracteres, pattern é o 'pedaço' que se que localizar e init é a posição que você deseja iniciar a verificação. Exemplo: >> string.find("Eu sou uma string.", "Eu") = 1, 2 >> string.find("Eu sou uma string.", "eu") = nil -- Pois "Eu" é diferente de "eu" >> string.find("Eu sou uma string.", "sou uma") = 4, 10 Creditos Jovial
  17. Ryzor postou uma resposta no tópico em Tutoriais sobre Scripting
    Ae galera, anônimo da OTbr mais uma vez aqui. Brinks :B Bom galera, hoje falarei sobre o RETURN, que todos acham que é um bicho de sete cabeças mas que na verdade não passa de algo simples e bem útil em alguns casos. Utilização: Exemplo 1: function getPlayerSet(cid) local items = {} for i = 1,10 do local item = getPlayerSlotItem(cid, i) if item.uid > 0 then table.insert(item, items) end end return items end Como podem ver nessa função, eu criei uma função que cria um loop e verifica todos os items do corpo do player e ela usa o return para retornar essa tabela com os items. Com isso se eu precisar pegar todos os items do player é só usar essa função que ela retornara uma com os items do player. (Função não testada) Exemplo 2: function isTroll (cid) if string.lower(getCreatureName(cid)) == "troll" then return true else return false end end Essa é uma função que irá verificar se o cid vai ter o nome de "Troll" e se for ela vai retornar true e se não for vai retornar false. Return true e false em callbacks Exemplo 3: local config = { daily = "no", -- allow only one enter per day? (like in global Tibia) level = 100, storage = 30015 entry = { {x = 247, y = 659, z = 13}, {x = 247, y = 660, z = 13}, {x = 247, y = 661, z = 13}, {x = 247, y = 662, z = 13} }, destination = { {x = 189, y = 650, z = 13}, {x = 189, y = 651, z = 13}, {x = 189, y = 652, z = 13}, {x = 189, y = 653, z = 13} } } config.daily = getBooleanFromString(config.daily) function onUse(cid, item, fromPosition, itemEx, toPosition) if(item.itemid == 1946) then if(config.daily) then doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) else doTransformItem(item.uid, item.itemid - 1) end return true end if(item.itemid ~= 1945) then return true end local players = {} for _, position in ipairs(config.entry) do local pid = getTopCreature(position).uid if(pid == 0 or not isPlayer(pid) or getCreatureStorage(pid, config.storage) > 0 or getPlayerLevel(pid) < config.level) then doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) return true end table.insert(players, pid) end for i, pid in ipairs(players) do doSendMagicEffect(config.entry[i], CONST_ME_POFF) doTeleportThing(pid, config.destination[i], false) doSendMagicEffect(config.destination[i], CONST_ME_ENERGYAREA) end doTransformItem(item.uid, item.itemid + 1) return true end Dá para ver claramente que existem umas verificações checam valores e se eles forem verdadeiros então vai dar um return true que vai parar o script ali, assim evitando que ele execute o resto do script. Curiosidade: Bom galera eu sempre vejo scripts de alavanca usando verificação para ver o id da alavanca e para transformar a alavanca. Porém se vocês não colocarem essa verificação, a função de transformar o item e colocar um return false no final a alavanca irá se transformar da maneira padrão :] Creditos : IuniX
  18. Ryzor postou uma resposta no tópico em Tutoriais sobre Scripting
    Scripting Dictionary Antes de tudo Olá comunidade Tibia King. Venho através desse tutorial facilitar a vida de muitos scripters. Trago a vocês o Scripting Dictionary. Uma forma mais simples de entender aquelas siglas ou palavrinhas chatas encontradas em todos os scripts e que poucas pessoas sabem o significado ou o motivo de estar ali. Vocês também podem ajudar a aumentar o conteúdo desse dicionário enviando-me as palavras que vocês gostariam de serem adicionadas. Para isso, poste nesse mesmo tópico. Estou disposto a atualizar sempre que for preciso o tópico, mas, caso algum imprevisto aconteça, a moderação está liberada para editar, adicionando dicas e palavras, sempre seguindo o mesmo padrão de postagem, enfatizando as palavras. Assim teremos uma melhor organização. Por fim, gostaria que todos os scripters, experientes ou não, e principalmente os que estão iniciando sua possível carreira na área, dentro da comunidade TK, lessem e corrigissem, se necessário. Começando array Array é uma variável onde há dois ou mais valores. É conhecido como vetor ou lista. Dependendo do caso, também pode ser conhecida como matriz. Cada valor dentro da array tem sua posição que é dada por um índice e que, geralmente, segue uma sequência de números inteiros. Pode ser local ou global. Exemplo: local arr = {1, 2, "valor 3", 503, variavelTeste} cid Normalmente uma variável onde é atribuida a identificação da criatura que, em muitos casos, está executando o script. A sigla cid vem do inglês Creature Identification. Exemplo: if isPlayer(cid) == TRUE then concatenação Éo ato de juntar uma ou mais strings. Em Lua, a concatenação é feita com o simbolo Ponto-Ponto (..) Exemplo: print("Skyen".."_".."Hasus") A saída gerada por esse comando seria: Skyen_Hasus. do 1. Normalmente usada no começo de funções que exercem alguma ação. Pode ser usada separada (sozinha) ou em alguma condição (ex. if). Tem sua tradução mais próxima da palavra fazer. 2. É utilizado em conjunto com o FOR, tendo de estar, obrigatoriamente, no final da linha em que há o loop for. Exemplo: doSendMagicEffect(pos, effect) Exemplo: for i =1, 10 do else É utilizado em condições. Caso todas as outras não sejam verdadeiras, o else será executado. É sempre usado sozinho e pode ser entendido como "Se não:". É utilizado em conjunto do if. Exemplo: if 1 > 2 then else -- script end[/code] [b]elseif[/b] Assim como o else, é utilizado em conjunto do if e serve para verificar se há outra possível condição. Pode ser entendido como "Ou se:". Exemplo: [code=lua] if 1 > 2 then elseif 1 < 2 then --script end end End é utilizado para fechar todas as condições, inclusive o loop for. Significa FIM. Tudo o que abre (if e for) deve ser fechado com um end. Exemplo: if 1 > 2 then else -- script end[/code] [b]get[/b] É muito encontrada em funções, onde sempre é retornado um valor, nulo ou não. Get, em inglês, no nosso caso, tem a tradução mais próxima de obter. As funções que começam com get, nunca estarão sozinhas, e sim, dando valor a alguma variável ou comparado a algo. Exemplo: local level = getPlayerLevel(cid) [b]if[/b] Obrigatoriamente deve ter em um script. Claro, há excessões, sempre há excessões. Serve para impor uma condição. Essa condição pode ser verdadeira ou falsa. Caso seje verdadeira, a continuação do script continuará até encontrar um END, caso contrário, verificará os elseifs e se não for verdadeiro com nenhum, havendo um else, será executado o código a partir dele. A palavra if é proveniente do inglês e significa SE. Exemplo: if level >= 30 then -- (Se level maior ou igual a 30, então) [b]is[/b] Is, no começo de funções, é para fazer uma verificação. Sempre é usada em alguma condição e tem seu significado mais próximo da palavra é. Exemplo: if isPlayer(cid) == TRUE then [b]loop[/b] Loop é o nome dado a função que é executada várias vezes até que haja a condição para que ele pare. O mais utilizado é o for, mas também, na linguagem LUA temos o while e repeat. Exemplo: for i = 1, 10 do [b]parâmetros[/b] Parâmetros de uma função são todas as variáveis que se encontram entre os parênteses. Exemplo: doRemoveItem(uid) -- uid é o parâmetro da função doRemoveItem [b]syntax sugars[/b] São as facilidades que a linguagem de programação permite ao programador. Exemplo 1: [code=lua] var = "Skyen Hasus" print(string.upper(var)) -- Normal print(var:upper()) -- Syntax Sugar Ambas as saídas geradas seriam: SKYEN HASUS. Exemplo 2: teste = function(s) -- Normal end function teste(s) -- Syntax Sugar end[/code] Apesar de parecerem legais, evite usar Syntax Sugars quando desnecessário, pois podem causar problemas se usadas incorretamente. [b]set[/b] Palavra utilizada no começo de nomes de funções que estabelecem valor de algo. É muito utilizado por iniciantes apenas para quests, mas tem muito mais importância que isso. No português, tem o significado mais próximo de estabelecer. [color=DarkRed](conteúdo a ser ampliado)[/color] Exemplo: setPlayerStorageValue(cid, 3001, 1) [b]string[/b] Corresponde a um texto, as strings sempre são entre aspas. Exemplos: "string" ou 'string' Note que há dois tipos de aspas, as duas são válidas. [b]then[/b] Utilizado em conjunto do if ou do elseif. Pode ser entendido como ENTÃO. Sempre será encontrado no fim da linha em que haja as condições citadas. Exemplo: if getPlayerStorageValue(cid, 3001) > 0 then [b]variáveis[/b] Variáveis são valores reservados na memória ram do computador para serem utilizados durante o script. Pode-se entender por variável, quando é encontrado a palavra var ou variable (em inglês). Variáveis podem ser locais ou globais, nesse último caso, tendo uso em mais de uma função. Exemplo: local level = getPlayerLevel(cid) Exemplo: global estatistica = estatistica + 1 [b]Você também pode ajudar[/b] Perguntando o que você não entendeu é uma forma de ajudar. Poste suas dúvidas aqui, não tenha vergonha. Outro modo de ajudar, é postando mensagem com as palavras que você não sabe o significado ou sabe e não está aqui. Quero deixar claro que eu não sou expert e não saberei tudo. Pesquisarei e tentarei deixar o mais claro possível todo o conteúdo aqui contido. Eu gostaria que esse dicionário funcionasse como a wikipedia, onde todos podem editar e corrigir. Mas como não há a possibilidade de todos editarem, postem. Se você editou algo, ponha seu nome. Se você postar conteúdo a ser adicionado, seu nome irá ser posto aqui. [b]Atualizações[/b] 05.08.2009 - Adicionado as palavras array, loop e set. 06.08.2009 - Adicionado as palavras if, else, elseif, end, string (Nord) e then. 06.08.2009 - Atualizado a palavra do. 09.08.2009 - Adicionado as palavras concatenação e syntax sugars. (Skyen Hasus) 18.08.2009 - Atualizado a palavra end. (marcryzius) Creditos Pivizz
  19. Ryzor postou uma resposta no tópico em Suporte & Pedidos
    Se ajudei n gusta nada 1 rep+
  20. {B}em... muitos vezes vejo nos meus e nos scripts de outras pessoas sendo declarandas variáveis uma embaixo da outra, como por exemplo: local stor1 = getPlayerStorageValue(cid,5551) local stor2 = getPlayerStorageValue(cid,5552) local stor3 = getPlayerStorageValue(cid,5553) local stor4 = getPlayerStorageValue(cid,5554) local stor5 = getPlayerStorageValue(cid,5555) local stor6 = getPlayerStorageValue(cid,5556) {U}ma forma de simplificar isto seria separando as variáveis por vírgula, colocando todas antes de um igual(=) e colocando, depois do igual(=), o valor atribuído a cada variável RESPECTIVAMENTE. Usando o exemplo acima, ficaria assim: local stor1, stor2, stor3, stor4, stor5, stor6 = getPlayerStorageValue(cid,5551), getPlayerStorageValue(cid,5552), getPlayerStorageValue(cid,5553), getPlayerStorageValue(cid,5554), getPlayerStorageValue(cid,5555), getPlayerStorageValue(cid,5556) {S}e você não faz assim não quer dizer que está errado, afinal cada um acha mais fácil uma maneira... meu objetivo é apenas ampliar seu conhecimento, afinal, não é porque você só faz de uma maneira que não precisa saber outras... Creditos Antharaz
  21. Ryzor postou uma resposta no tópico em Suporte & Pedidos
    História Você sabia que a linguagem Lua é brasileira? Sim, ela é brasileira e foi criada na PUC-Rio (Pontifícia Universidade Católica do Rio de Janeiro) em 1993. Em conjunto com a PetroBras. Você sabia que lua é uma das 20 linguagens mais usadas no mundo? Sim, ela é umas da 20 linguagens mais usadas no mundo. Por ser leve, portável e de fácil aprendizado. Exemplos de JOGOS que usam Lua como Linguagem de Scripting: Grim Fandango Escape From Monkey Island Psychonauts FarCry World of Warcraft E vários outros. Sintaxe if variavel == true then É o mesmo que colocar if variavel then Você sabia que Lua é Case Sensitive? Sim, em Lua é diferente "STRING" de "string". Você sabia que não existe TRUE e FALSE em Lua? Exatamente, não existe TRUE e FALSE em Lua, por isso é errado usar eles. O certo seria true e false. Isso é apenas mais um POG adaptação do OpenTibia. Sabia que uma boa indentação é a Alma de um bom código? Exemplos: Errado: function onStatsChange(cid,attacker,type,combat,value) local porcent = 10 -- Porcentagem do dano que o monstro vai tomar if (combat == STATSCHANGE_HEALTHLOSS) then local damage = ((value/100)*porcent) doSendAnimatedText(getThingPos(attacker),damage,143) doCreatureAddHealth(attacker,-damage) doPlayerSendTextMessage(cid,MESSAGE_EVENT_DEFAULT,"You reflect "..damage.." by damage from a " .. getCreatureName(attacker) .. ".") end return true end Certo: function onStatsChange(cid, attacker, type, combat, value) local porcent = 10 -- Porcentagem do dano que o monstro vai tomar if (combat == STATSCHANGE_HEALTHLOSS) then local damage = ((value/100)*porcent) doSendAnimatedText(getThingPos(attacker),damage,143) doCreatureAddHealth(attacker,-damage) doPlayerSendTextMessage(cid,MESSAGE_EVENT_DEFAULT,"You reflect "..damage.." by damage from a " ..getCreatureName(attacker).. ".") end return true end Finalizações Bom galera, ficou bem pequeno porque eu não sabia o que escrever, mas acho que já dá para ver algumas coisas legais e certas. Quem tiver mais ideias de coisas para colocar me avise que eu coloco. Obrigado a todos e tenham um bom dia. Creditos IuniX
  22. Ryzor postou uma resposta no tópico em Tutoriais sobre Scripting
    Cálculos Baseados em Porcentagem Autor: Guiminhah Nível: Fácil -------------------------------------------------------------- Olá galera, tudo bom? Vim aqui compartilhar uma ideia que não vi por enquanto aqui no fórum, e acho que é legal usar de vez em quando no servidor. Cálculos com porcentagem são úteis para balancear, já que utilizam valores relativos, e não absolutos. Para começar o tutorial, fiz um script para exemplificar. •Explicação: Quero criar uma action que quando o player (maior que level 50) clicar em um Life Crystal gaste 20% da sua mana total para adicionar +2 no HP total. ----------Life Crystal Increasing Players' Max Health ~ By Guiminhah, OTNET function onUse(cid,item,frompos,item2,topos) -- Configurando o script, só mexa aqui local lvlneeded = 50 -- Level para usar o Life Crystal local percentage = 0.2 -- Porcentagem que remove de mana (1=100%, 0.5=50%, 0.2=20%, 0.1=10%) local hpgiven = 2 -- A cada Life Crystal que usar, receberá quanto de HP local text = "HP, huh?" -- Texto que o Player mandará ao receber 2HP. -- Altamente recomendável não alterar o script a partir daqui local maxh = getCreatureMaxHealth(cid) local maxm = getCreatureMaxMana(cid) local pos = getCreaturePosition(cid) if getPlayerLevel(cid) >= lvlneeded then if (getCreatureMana(cid)/maxm) >= percentage then doCreatureAddMana(cid,-(maxm*percentage)) setCreatureMaxHealth(cid, maxh+hpgiven) doPlayerSendTextMessage(cid,27,"You have extracted "..hpgiven.."HP of this Life Crystal.") doRemoveItem(item.uid,1) doSendMagicEffect(pos,35) doSendAnimatedText(pos, text, TEXTCOLOR_RED) else doPlayerSendCancel(cid,"Sorry, extracting HP from a Life Crystal takes 20% of your entire mana.") end else doPlayerSendCancel(cid,"You must be level "..lvlneeded.." or higher to use this Life Crystal.") end end Para descobrir a porcentagem de mana que o player possui no momento em que clicou no Life Crystal (só para verificar se o script seria executado), foi necessário apenas dividir a a mana atual pela total. Isso é uma simples regra de três, todo mundo aprende na 7ª série. Se você não chegou lá, terá sérios problemas no tópico :s Para remover os 20% mana do player, só precisei multiplicar a mana total do player pelo equivalente em decimais de 20% do mesmo, que é 0.2. 500 de mana ------- 100% 400 de mana ------- x 500.x = 100.400 x = 100.400/500 = 80% •IMPORTANTE: Toda porcentagem tem sua equivalência em números reais. Como em scripts fica mais fácil trabalhar com decimais, vamos utilizá-los P: Aah Gui, mas como eu descubro esse equivalente em decimais? R: Simplesmente divida a por-cem-tagem por 100 Fazendo isso, você descobrirá, por exemplo, que o equivalente em decimais de 80% é 0.8! NÃO UTILIZE VÍRGULA PARA INDICAR O DECIMAL, PELO AMOR DE DEUS. É PONTO! -------------------------------------------------------------- Bom, é isso! Não é nada muito complexo, mas que pode tornar o RPG de seu servidor bem mais interessante caso você tenha criatividade E para completar... -------------------------------------------------------------- •Suposição: Um player tem 500 de mana. Se ele está com 400 de mana, quanto é seu equivalente em porcentagem? --Aquela velha regra de três da sua professora velha e de raíz branca de cabelo branca, da matemática da 7ª série, ou do seu professor de química japonês do 2º ano do médio.
  23. Math A matemática por traz do script introdução: bem, antes de começar a explicar o math em si, acho melhor explicar que: não é recomendado colocar variáveis como x ou y em uma equação alem do exemplo acima, funções lua ou de otserv, não podem ser declaradas como nome de variáveis "=" é diferente de "==" para facilitar, de uma olhada nessa tabela com os simbulos matemáticos em lua : + ---------------------- adição - ------------------ subtração *---------------- multiplicação / ---------------------- divisão == ------------------ igualdade ~= -------------- desigualdade > ----------------- maior que >= -------- maior ou igual que < ----------------- menor que <= -------- menor ou igual que ^ ----------------- potenciação O math sozinho: O math, sozinho, serve somente para colocar equações e cálculos em geral. ficando assim : local var = getPlayerHealth(cid) local resultado = math((var-(var/2))) no caso, var é a vida do player, e na variavel resultado e math resolve a equação que está em seu parametro. math.random: O math.random, pode pegar um numero aleatorio entre um minimo e um maximo, pegar um numero de uma tabela, ou ate mesmo randomizar frases e etc... randomizando numeros por min/max : observe resultado = math.random(1,3) no caso ali, 1 é o numero minimo a ser sorteado, e 3 é o maximo. randomizando por meio de tabelas novamente com um codigo de base : tabela = {1, "eu sou de...mai...onese!", " tutorial by Eventide =D ", 2, 3, 5} Sorteio = math.random(1, table.getn(tabela)) resultado = tabela[Sorteio] primeiramente, foi feito uma tabela com o que seria sorteado. depois, declarei que ia sortear em uma variavel (sorteio), usando math.random, o primeiro numero de seu parametro, indica em qual valor da tabela ele começara a contar, o numero pode ser considerado ordinal, mas é escrito como cardinal, veja o exemplo: table = { "1° valor (ordinal), é representado por 1 ( cardinal )", "2° valor (ordinal), é representado por 2 (cardinal)" } outro modo: tab = {"sete", "mih", "exemplo" } R = math.random(1,table.maxn(tab)) rand = tab[R] assim, você cria uma tabela, randomiza normalmente pelo metodo min/max, sendo que o max é o numero de valores contidos na tabela, e depois na variavel rand, você pega a tabela randomizada, com esse metodo, da pra inserir novos valores na tabela futuramente, sendo que estes tambem serão randomizados... math.fmod(x, y) Retorna o resto da divisão de x por y, caso necessario o valor é arredondado para baixo. math.fmod(4,2) -- retornara 0 math.sqrt (x) Retorna a raiz quadrada de x. math.sqrt(9) -- retornara 3 math.pow (x, y) Retorna x elevado a y math.pow(x, 2) -- retornara x² math.abs( ) retorna o valor absoluto do valor contido em seu parametro, ou seja, os números negativos são automaticamente transformados em positivos. math.abs(-x) -- retornara x math.floor (x) transorma um numero decimal em inteiro, exemplo, se x for 1,3 depois de passar pelo floor ele se torna 1. math.floor(1,5) -- retornara 1 é sempre bom usar isto após uma divisão creditos: (60%)Eventide (30%)Merdamen (10%) Dark( pelas dicas... ;p) para saber mais, acesse : Creditos : Eventide
  24. Ryzor postou uma resposta no tópico em Playground (Off-topic)
    Fiko ate q dahora
  25. Ryzor postou uma resposta no tópico em Playground (Off-topic)
    1,010 pessoas curtiram Tibia King. Nosso facebook nosso forum ta crescendo cada vez mais

Informação Importante

Confirmação de Termo