Versao 0.1b Tutorial Voce nao Sabe nada sobre scripts e nem mesmo como funcionao e quer criar uma magia Voce pode ir no classico copy/paste: Primeiro Passo: Copie uma tag no spells.xml Exemplo:
E cole logo a baixo uma identica. Agora edite certos campos:
Vermelho Palavras a serem ditas para a magia sair Verde Level para Usar a magia Amarelo Mana pra Usar a magia
Negrito Voce deve mudar para o nome do seu script, no caso usaremos eternal extreme winter
Procure na pasta scripts/attack o bloco de notas chamado eternal winter copieo e cole renomeie-o para eternal extreme winter, abaixo ensino como editar.
Em seguida voce pode editar certas coisas
Azul Minimo Dano -- Leve em base que dakele geito que esta 2.7 ira dar 500 de dano se voce multiplicar por 2 o 2.7 ira ficar 5.4 e ira dar 1000 de dano Rosa Maximo Dano -- mesmo conceito de cima
Laranja se voce nao conhece o comando pode ser !z 1,2,3...66 ou /z 1,2,3...66 useo no seu ot e veja um bem legal e apague toda a parte laranja e bote o efeito que voce quer no meu caso irei botar 61
Conclusao a magia ira ficar com a forma do exevo gran mas frigo com otro dano e com otro efeito
___________ Update 0.2a
Usando tambem o comando !x ou /x 1,2,3...41
Na linha da sua magia vai estar assim:
Para usar os efeitos do /x ou !x voce deve botar antes do EFFECT a palavra DISTANCE e ficara assim:
Negrito Como devera ficar para utilizar o comando !x ou /x
Listinha de efeitos e seus devidos nomes:
___________________ Update 0.2b
Mudando a area da sua spell:
Repare a linha da nossa primeira spell la em cima
Neste local voce edita a area da sua magia vamos começar:
Apague toda akela linha acima em negrito e bote isto:
Legenda dos numeros: 0 = nao vai acertar a magia 1 = aonde a magia vai acertar 2 = centro que eh o player (nao acertara tambem)
Agora voce pode fazer uma area que voce queira de qualquer forma ___________________ Update 0.3a
Como Trocar o Dano da sua Magia:
Para trocar o tipo de dano repare a linha da magia:
Vermelho Eh o tipo de dano que ira dar eh so mudalo para outro tipo
Listinha de Danos:
COMBAT_PHYSICALDAMAGE - 1COMBAT_ENERGYDAMAGE - 2COMBAT_EARTHDAMAGE - 4COMBAT_POISONDAMAGE - 4COMBAT_FIREDAMAGE - 8COMBAT_UNDEFINEDDAMAGE - 16COMBAT_LIFEDRAIN - 32COMBAT_MANADRAIN - 64COMBAT_HEALING - 128COMBAT_DROWNDAMAGE - 256COMBAT_ICEDAMAGE - 512COMBAT_HOLYDAMAGE - 1024COMBAT_DEATHDAMAGE - 2048PS:Voce pode usar os numeros no lugar das palavras
___________________ Update 0.3b Botando em pratica tudo que aprendemos!
Neste update nos iremos usar todo o conteudo do tutorial para fazer uma magia com varios efeitos,danos e areas diferentes
Aqui esta o script que criei para trabalharmos em cima dele:
Legenda: Azul Dano de cada wave (onda) da sua magia Negrito Area das magias (arr) Vermelho Pausa de uma wave para outra, se quizer aumente bote 100,300,500...
Pronto agora se voce viu os outros updates sabera mudar dano efeito e fazer uma otima magia bem louca
Video de Demonstraçao:
__________ Fim dos Updates (Se voce tiver alguma opniao de update MP para mim que eu faço mais updates)
Ao editar o arquivo. LUA /. Xml o melhor editor de usar é simples bloco de notas. Você também pode utilizar outros editores como o Word. Mas funciona melhor bloco de notas comigo.
--- 1,1 Armazenar dados
Quando o script em ação ot arquivos que você vai ter que entender o que significa alguma coisa. Uma das coisas importantes são itens nos quais você pode armazenar dados. Aqui vou dar um exemplo:
Código:
= número 1now o item de armazenamento "número" contém "1". Assim, cada vez vamos chamar o valor de armazenamento "item", teremos a resposta "1".
Quando você gostaria de realizar cálculos matemáticos que você pode fazer assim:
Código:
= número + número 1Now não será adicionado um valor ao número de armazenamento. Você pode substituir com + -, / e alguns sinais mais matemática (havn't tentei todos eles).
Se quiser peça para ser um número aleatório, seria assim:
Código:
math.random número = (1,10) 1,10 é o min / max número aleatório que o init deve receber.
Também é possível armazenar texto dentro desses itens Starage. Um exemplo:
Código:
name = "oi, meu nome é Mindstorm" Agora, o armazenamento de itens "nome" conterá o texto "oi, meu nome é Mindstorm".
Nestes dois exemplos que usei o armazenamento de itens "número" e "nome". No entanto, você pode alterá-los para o que quiser!
--- 1.2 Se afirmações:
E se comunicado diz apenas que um pedaço de código entre o "se" eo "fim" só será realizada quando as linhas de código entre o "se" eo "depois" está correto.
Você sempre precisa para fechar um "if" e com "final".
Exemplo:
Código:
Se a Apple == 1 então
"Pedaço de código"
Código endThis vai realizar o "pedaço de código" somente se o valor de armazenamento "maçã" é 1. Olhe para o "==" parte. Ao usar uma instrução if e você quiser comparar dois fatores que você deve usar o "=" signe duas vezes em vez de uma só vez!
Se você deseja que o "if" para comparar múltiplos fatores, em um comunicado que será parecido com este:
Código:
Se maçã e pêra == 1 == 2 então
"Pedaço de código"
endNow o "pedaço de código" só será efectuada quando o armazenamento do valor da "maçã" é 1 e "pera" é 2. Claro que você pode colocar como muitos fatores em um if, contanto que você separe-os com um "e".
Se você gostaria de realizar "pedaço de código", quando o armazenamento do valor da "maçã" é 1 ou quando o armazenamento do valor "pêra" é simplesmente substituir os dois "e" por um "ou".
Digamos que você quer executar "pedaço de code1" quando o armazenamento do valor da "maçã" é 1 e "pedaço de code2" quando o valor de armazenamento "maçã" não é 1. Ela terá
para olhar como este:
Código:
Se a Apple == 1 então
"Pedaço de código"
mais
"Pedaço de code2"
endYou simplesmente colocar um "else" entre o "se ... então" e "fim" do. Tudo que está entre o "se .. então" eo "outro" será realizada se o valor de armazenamento de maçãs é 1, tudo que está entre o "outro" e "final" será feita quando e maçã valor de loja é NOT 1
Agora, o que se quiser "pedaço de code1" a ser realizado quando o armazenamento do valor da "maçã" é 1 e "pedaço de code2" quando o armazenamento do valor da "maçã" é 2. Quando a Apple não é nem 1 nem 2 "pedaço de Code3" será realizado.
Código:
Se a Apple == 1 então
"Pedaço de code1"
maçã elseif == 2 então
"Pedaço de code2"
mais
"Pedaço de Code3"
endNow se o valor de armazenamento "maçã" é um "pedaço de code1" será realizada, mas se o valor de armazenamento "maçã" é de 2 ONLY "pedaço de code2" será realizado!
Quando a maçã não é nem vermelho, nem verde "pedaço de código 3" será realizado.
Você pode colocar quantas "elseif ... então" 's entre o "se ... então" e do "outro" como você quiser.
Se você quiser que nada aconteça quando a maçã não é nem 1 ou 2 simples remover o
mais
"Pedaço de Code3"
Quando você estiver usando "==" entre a Apple e 1 (se a maçã == 1, então) que você está comparando. Então você diz, se o valor de armazenamento de "maçã é um" então ....
Quando você usa o "==" o sinal, a parte em frente ao "==" (maçã) na maioria das vezes representa um item de armazenamento.
Mas seria bom se pudéssemos fazer outras coisas, em seguida, comparar os fatores! Portanto, podemos colocar algumas coisas diferentes entre o valor de armazenamento e, em seguida, coisa que você quer comparar (ou qualquer outra coisa) que ele.
Exemplos:
- Se a Apple> 1, então (só será realizado se o valor de armazenamento "maçã" é maior que 1)
- Se a Apple <1 então (só será realizado se o valor de armazenamento "maçã" é menor que 1)
- Se a Apple ~ = 1 então (só será realizado se o valor de armazenamento "maçã" não é 1)
- Se> Apple = então (só será realizado se o valor de armazenamento "maçã" é 1, ou maior, então 1)
- Se <= maçã então (só será realizado se o valor de armazenamento "maçã" é 1 ou menor que 1)
--- 1.3 Para declarações
Para afirmações são completamente diferentes, em seguida, se as declarações. Aqui está um exemplo:
Código:
1,10 para a Apple fazer
doPlayerSendTextMessage (cid, 18, maçã)
"DoPlayerSendTextMessage (cid, 18, maçã)" final é uma função (mais sobre isso depois), que irá enviar uma mensagem para o jogador com um texto. Agora, o texto que será enviado é o contém da "maçã" de armazenamento de item. Neste código para declaração vai criar um loop. Ele irá repetir "doPlayerSendTextMessage (cid, 18, maçã)" até que a maçã valor de armazenamento é de 10.
[/ I] para a maçã nr1, nr2 fazer [/ i]. Aqui nr1 é o número inicial, NR2 é o número de acabamento. O laço for vai automaticamente aumentar o valor do depósito item "maçã" cada vez que repete o ciclo.
--- 1,4 demonstrações Repetir
Repetir declarações vai repetir um trecho de código até que alguma coisa atinge um valor. Exemplo:
Código:
Repita
"Pedaço de código"
Até NumberOfApples> NumberOfPearsNow o "pedaço de código" wil ser repetido unstill o valor de armazenamento NumberOfApples é maior que o valor NumberOfPears armazenamento. Claro que você pode mudar NumberOfPears em um número.
---- 2 Comandos
Quando a ação de script arquivos existem alguns comandos que são úteis para saber. Aqui vou explicar uma vez que você irá usar mais.
Isso é o que cada script de ação começa com. O onUse function () apenas significa que você está usando alguma coisa (um item ou outro qualquer). Existem alguns valores de armazenamento que são dadas no Action Script, que você não tem que configurar! Estes valores de armazenamento são:
-Cid: A pessoa que usa o item (informação sobre a pessoa que estiver usando).
-Item: Informações sobre o item que ele está usando. (Isso se você ctrl-clique sobre uma baga informações arbusto azul muito al sobre esse arbusto azul é armazenado dentro do valor de armazenamento de item).
-Frompos: De que posição ele vai usar o item.
-Item2: se ele está usando o item em alguma coisa, item2 contém dados desse item.
-Topos: a posição que ele está usando para o item.
Tenha em mente que onUse fuction () sempre termina com um "fim"
- Não funciona
"DoPlayerSay (cid," oi ", 2)":
Este tipo de função vai um recado para o jogador. Agora, o jogador seria automaticamente dizer oi.
"DoPlayerSendTextMessage (cid, 22," Hi .")":
Se você digitar isso no seu script de ação que irá enviar a mensagem para Oi Cid. Cid é o jogador que está usando um objeto. 22 é a cor que a mensagem deve ser mostrada dentro (1-22 de trabalho, com certeza, maior que aqueles que eu não sei). numberFor exemplo, se um jogador usa uma alavanca esse script ação será enviar.
Código:
onUse Função (cid, item, frompos, item2, topos)
doPlayerSendTextMessage (cid, 22, "oi")
EndNow cada vez que um jogador usa uma alavanca que ele vai receber uma mensagem dizendo "oi" dentro de sua barra de chat.
"DoPlayerSendCancel (cid," oi ")":
Esta função se parece muito com o doPlayerSendTextMessage () função. A diferença é que você não pode usar as cores ea mensagem não será mostrado dentro do chat bar, mas na parte inferior da tela. (Normalmente, o texto "está esgotado" ou "você não tem mana suficiente" aparecem lá).
"DoCreateItem (id, número, topos)":
Esta função irá criar um item sobre o título que você usa. Id é o ID do item que deve ser criado, o número é a quantidade do mesmo, topos é a posição onde deve ser criado. Lembra quando você usar um topos item já é o coords
"DoDecayItem (item.uid)":
Esta função irá decair um item. Isso significa que ele irá retornar ao seu original item.id. (Por exemplo buracos pá voltar a montes de pedra).
"DoPlayerAddHealth (cid, 100)":
Isso vai acrescentar 100 para a saúde do jogador (CID). Você pode substituir 100 ofcourse por qualquer número que você gostaria! Você também pode fazer o 100 um número negativo, este número será removido da saúde dos jogadores.
"DoPlayerAddMana (cid, 100)":
Isso vai acrescentar 100 mana para o jogador (CID). (Também pode ser números negativos).
"DoPlayerAddSkillTry (cid, 6,1)":
Esta função irá adicionar uma habilidade. 6 significa que o tipo de habilidade 1 significa que a quantidade de habilidade para ser adicionado (em% não, ou como um nível, apenas como um número de tentativas).
"DoPlayerSetMasterPos (cid, newpos)":
Esta função irá definir a posição do novo mestre do jogador. A posição do mestre é a posição onde o jogador irá se ele morrer.
"DoPlayerSetVocation (cid, COV)":
Esta função irá definir a vocação jogadores. Voc é a vocação como um dígito (0-4).
"DoPlayerRemoveMoney (cid, 100)":
Esta função irá recolher uma quantidade de dinheiro a partir de mochila do jogador. (Você pode mudar 100 para o que você quiser).
"DoPlayerAddItem (cid, quantidade, itemid)":
Esta função irá adicionar um item na mochila jogadores. 2400 é o número do item (você pode encontrar os números dos itens no item.xml. 1 representa a quantidade desses itens deve ser dado. Quando 2400 seria um item que você pode entrar em quantidade (moedas de ouro, platina, moedas, runas) será o montante do mesmo. Portanto, se você mandaria (cid, 2152,100), é necessário adicionar 100 moedas de ouro dentro da mochila jogadores. Ao dizer (cid, runeid, 100) você gostaria de acrescentar uma runa do tipo runeid com 100 cargas dentro da mochila jogadores.
Quando o ID do item que deseja enviar uma garrafa / caneca caneca de cerveja ou algo igualmente o número vai significar o contém da garrafa / mub / caneca de cerveja. (Para o que está dentro). Por exemplo: doPlayerAddItem (cid, bottleid, 0) daria uma garrafa com sangue no seu interior.
"DoPlayerRemoveItem (cid, quantidade, itemid)":
Esta função irá remover um item do inventário dos jogadores.
"DoRemoveItem (item.uid, item.type)":
Esta função seria remover o item que você está usando.
"DoSetItemActionId (item.uid, newactionid)":
Esta função irá alterar o itemid de um item em uma nova itemid.
"DoSetItemText (item.uid," Oi ")":
Esta função irá definir o texto de uma leitura (livros, cartas ...). Item.uid é a identificação do item original. "Oi" é o texto que você quer ser no interior do legível. (Vou dar mais explicações sobre isso no "4 - Fazer quests" parte).
"DoShowTextWindow (item.uid, 0,0)":
Esta função irá mostrar a caixa de texto na tela a partir de uma leitura (livros, cartas ....). Ele não pode colocar no texto que você vai ler! Item.uid é o item que deve ser mostrado pequena em cima. 0,0 é algumas coisas em geral (Você não deve usar essa função para tanto, a maioria dos itens lidos já estão definidos.
"DoSendAnimatedText (posição," texto ", 180)":
Esta função irá enviar um texto animado para a posição (dano, monstros gritando). A posição é a posição. "Texto" é o texto a ser mostrado (também pode ser um dígito). 180 é a cor. (180 é o vermelho, outros você terá que experimentar).
"DoTeleportThing (cid, posição)":
Esta função seria teleportar o jogador para uma nova posição. Exemplo
Código:
onUse Função (cid, item, frompos, item2, topos)
posição = {x = 273, y = 433, z = 9}
doTeleportThing (cid, posição) ":
EndThe valor de armazenamento posição tem multiplicar itens armazenados. Depois de ter definido uma posição de, por exemplo, "posição = {x = 273, y = 433, z = 9}" você sempre pode mudar apenas as coordenadas X assim:
Position.x 272 =
"DoSendMagicEffect (posição 2)":
Esta função simplesmente envia um efeito mágico para uma posição. Os valores de posição podem ser armazenados da mesma forma como no doTeleportThing () função. 2 significa que o efeito mágico. Eu acho que estes podem variar de 1-15 ou algo parecido. Eu não sei o que todos estes efeitos mágicos fazer (2 puf = 12 é bolha teletransporte).
"DoTransformItem (item.uid, 1945)":
Com esta função você pode alterar um item existente em um outro item. Ao utilizar esta função, o item que você clicou irá mudar para o 1945 itemid (a oeste da alavanca apontando, neste caso).
"DoSummonCreature (" guerreiro orc ", a posição)"
Esta função irá invocar uma criatura em uma posição que você definiu. (A posição é um valor de armazenamento).
"DoPlayerFeed (cid, alimentos)";
Esta função irá alimentar o jogador uma quantidade de alimentos. Eu não sei a quantidade comum para qualquer tipo de alimento embora. Você terá que experimentar com ela.
- Obter funções
"GetPlayerAcces (cid)":
Essa função vai ter o acesso do leitor. Por exemplo:
= Acesso getPlayerAcces (CID)
O valor de armazenamento de acesso passará a conter o número de acesso do leitor.
"GetPlayerGuildId (cid)":
Esta função irá fazer os jogadores da guilda id.
"GetPlayerHealth (cid)":
Essa função vai ficar a saúde dos jogadores.
"GetPlayerLevel (cid)":
Esta função terá a jogadores do nível atual.
"GetPlayerMagLevel (cid)":
Esta função irá fazer os jogadores magic level atual.
"GetPlayerMana (cid)":
Esta função terá a mana jogadores.
"GetPlayerMasterPos (cid)":
Esta função terá a posição de mestre jogadores (na maioria das vezes o templo spawn posição).
"GetPlayerName (cid)":
Esta função irá obter o nome dos jogadores.
"GetPlayerPosition (cid)":
Essa função vai ficar a situação jogadores.
"GetPlayerSkill (cid, 6)"
Esta função irá obter o nível de perícia dos jogadores. 6 significa que o tipo de habilidade (0 = magia, uma espada = 2 = clube, 3 = ax, 4 = distância, 5 = blindagem, 6 = pesca. Pelo menos se não me engano).
Este é o nível da habilidade, e não o número!
"GetTilePzInfo (posição)":
Essa função vai verificar se o título é uma zona de protecção ou não. Se o resultado for 0, o título vai ser uma zona de protecção.
"GetPlayerFood (cid)":
Essa função obtém a quantidade de comida que o jogador tem actualmente comido. (Diminui a cada segundo, ele está online ou na cama). A quantidade normal para um jogador estar "cheio" é de 1200.
"GetThingfromPos (posição)":
Essa função vai ficar tudo em uma posição. Por exemplo:
Código:
onUse Função (cid, item, frompos, item2, topos)
posição = {x = 273, y = 433, z = 9, stackpos = 0}
positioninfo = getThingfromPos (posição)
EndPositioninfo agora contém informações sobre o título que a posição é. (Porque é stackpos 0)
Positioninfo.itemid seria o item.id do título a partir da posição {x = 273, y = 433, z = 9}. Mais informações sobre o stackpos em "4 - Fazer Quests".
"GetPlayerStorageValue (cid, o número de armazenamento)":
Esta função seria obter um valor de conservação a partir da playersname.xml. Os valores de armazenamento são uma maneira de olhar se o jogador, por exemplo, já fez uma busca. Então, se você gostaria de obter um valor de armazenamento, provavelmente parecido com isto:
queststatus = getPlayerStorageValue (cid, 2000)
Queststatus que agora contêm um número (na maioria das vezes esse número é -1 se ele não fez a quest, e se ele tiver um).
Com esta função você deve definir um valor de armazenamento. Por exemplo:
setPlayerStorageValue (cid, 20001)
"Print (" oi ", item)":
Uma função muito simples de imprimir um texto com um valor dentro da caixa de armazenamento do servidor. Portanto, este será impresso oi 5 (ou qualquer valor item contém).
---- Fazendo utilizáveis
A primeira coisa que você teria que fazer é editar o actions.xml. Você pode encontrar esse arquivo dentro do dados / ações / pasta.
Este arquivo contém uma grande quantidade de informações. A maioria das linhas se parecem muito com isso:
Existem dois tipos diferentes de coisas que você pode adicionar a este arquivo.
Quando você insere um itemid =. O script.lua será realizada quando você usa todos os itens com este ID! Ao utilizar o script.lua o uniqueid só será efectuada quando o item que você usa tem uma ID exclusiva "1000" (ou um outro tipo de identificação).
Script.lua é o script que será realizada ao usar o item. "Script" pode ser o que quiser. O local de onde o script deve ser-se de dados / ações / ações /.
Agora vamos dizer que queremos fazer um arbusto de mirtilo, que você pode realmente usar!
Primeiro teríamos que inserir uma linha dentro do actions.xml. Esta linha ficaria assim:
Não importa onde essa linha fica contanto que fica entre a ...
O roteiro, estamos nos referindo é bush.lua. Então vá para os dados / ações / pasta de ações e criar um novo arquivo chamado bush.lua (quando usando o notepad ser cuidado você não criar um bush.txt).
O bush.lua teria que ficar assim:
Código:
onUse function (cid, item, frompos, item2, topos)
se item.itemid == 2785, em seguida,
doPlayerFeed (cid, 5)
doCreateItem (2677,3, topos)
doTransformItem (item.uid, 2786)
doDecayItem (item.uid)
final
endThe if .. olha se o final item.id é igual ao item de id de um arbusto azul. (Na verdade, não necessariamente porque bush.lua só tem de realizar quando se utiliza um arbusto azul.
doPlayerFeed (cid, 5) alimentam o leitor
doCreateItem (2677,3, topos) cria três bagas azul em cima da bucha.
doTransformItem (item.uid, 2786) irá alterar o mato para um arbusto sem bagas azul.
Agora salve o arquivo novamente. Quando iniciar o seu servidor e usar um arbusto azul que você vai comer, e 3 bagas azul vai estar em cima da bucha!
Eu não descobri como deixar a decadência de Bush para que ele retorne a um arbusto com bagas novamente após algum tempo.
Este foi apenas um item simples utilizável. Agora vamos dizer que queremos criar uma alavanca que abriria um "natal" novo para a posição. Esta é uma ação legal quando você tem mais cidades.
Você vai para fora do curso precisa adicionar uma linha no actions.xml.
A primeira coisa que você tem a fazer é definir a ação id da alavanca que vai usar no editor. Isto é como eu fiz isso:
Esta imagem foi redimensionada. Clique nesta barra para ver a imagem completa. A imagem original é 1280x768 261KB de tamanho e pesos.
Agora a alavanca no templo tem a ação ID 2000. Teremos de colocar uma linha no actions.xml que dizer que cada vez que alguém usa o item com o ID de um roteiro original 2000 será realizada. Eu adicionei essa linha
Agora precisamos fazer uma changehometown.lua que será realizado quando alguém usa a alavanca com a Unique ID 2000. Eu fiz assim:
Código:
onUse function (cid, item, frompos, item2, topos)
se item.itemid == 1945, em seguida,
doTransformItem (item.uid, 1946)
newpos = {x = 100, y = 100, z = 7}
doPlayerSetMasterPos (cid, newpos)
mais
doTransformItem (item.uid, 1945)
final
endThe if ... else ... end vai verificar se a alavanca enfrenta o oeste ou leste. Quando caing oeste do id alavanca será 1945. Quando um jogador puxa a alavanca a sua posição de mestre será mudado para uma posição de novo mestre pus no valor de armazenamento newpos. Quando o ID de item não é 1945, a alavanca está voltada para o leste, e em seguida a alavanca só será mudado a face oeste.
Estes dois exemplos onde a calma scripts de ação mais fácil. Mas lembre-se que você pode fazer a maneira mais avançado ou maior uma vez e depois estes!
---- 4 Fazendo quests
Aqui vou dar uma aula rápida de como você pode fazer buscas avançadas agradável.
Na busca primeiro vou explicar algumas coisas em geral.
Primeiro: Elevadores (trabalhar com valores de armazenamento e teleports).
Isto é como olha no meu mapa:
Esta imagem foi redimensionada. Clique nesta barra para ver a imagem completa. A imagem original é 1280x768 184KB de tamanho e pesos.
Este é o 3 º andar. Com um elevador e de manutenção. Quando um jogador quer usar o elevador, mas ele ainda não usou qualquer uma das alavancas que não vai funcionar. Assim, ele terá que usar uma das alavancas, antes que ele será enviado para cima ou para baixo.
Esta imagem foi redimensionada. Clique nesta barra para ver a imagem completa. A imagem original é 1280x768 182kb de tamanho e pesos.
Este é o 2 º andar. Quando você usa a alavanca no 3 º andar será provável teleportado para o 2 º andar.
Esta imagem foi redimensionada. Clique nesta barra para ver a imagem completa. A imagem original é 1280x768 178kb de tamanho e pesos.
Este é o 1 º andar. Repare que isso parece um pouco mais "assustador" e depois os outros dois. Isso é porque ele é um chão onde você só será teleportado para se você tiver todas as 4 alavancas de manutenção (primeira imagem) em uma posição correta.
Aqui está o lever.lua que usei para este script. Os comentários serão iniciar a codificação com um "--comentário"
Código:
onUse function (cid, item, frompos, item2, topos)
Se a alavanca == 2000 then-Elevador item.uid (screen1)
queststatus = getPlayerStorageValue (cid, 2000) - - se ele já usou uma das alavancas na manutenção
se queststatus == -1 then - - se ele não tem usado
== 1945 se item.itemid texto então alguns simples e movimento da alavanca
doTransformItem (item.uid, 1946)
doPlayerSendCancel (cid, "happends Nada").
mais
doTransformItem (item.uid, 1945)
doPlayerSendCancel (cid, "A plataforma que está em pé sobre shakes por um segundo.")
final
outro - - se ele usou uma das alavancas
se item.itemid == 1945 then - - se a alavanca é puxada leste
doTransformItem (item.uid, 1946)
doPlayerSendCancel (cid, "Você ouve algo se mover ...")
outro - - se a alavanca é puxada oeste (happends algo)
doTransformItem (item.uid, 1945)
queststatus1 = getPlayerStorageValue (cid, 2005) - - valor de armazenamento das 4 alavancas na sala de manutenção. Eu não queria olhar para a posição da alavanca, porque senti que todos tinham de dar a tacada a alavanca na posição correta.
queststatus2 = getPlayerStorageValue (cid, 2006)
queststatus3 = getPlayerStorageValue (cid, 2007)
queststatus4 = getPlayerStorageValue (cid, 2008)
se queststatus1 == -1 e queststatus2 == -1 e queststatus3 == 1 e queststatus4 == -1 then - - se a posição das alavancas é assim que você será teleportado para o 1 º andar
nplayer1pos = {x = 273, y = 433, z = 11}
doSendMagicEffect (cid, 2)
doTeleportThing (cid, nplayer1pos)
outro - - Não se você será teleportado para o 2 º andar
nplayer1pos = {x = 273, y = 433, z = 10}
doSendMagicEffect (cid, 2)
doTeleportThing (cid, nplayer1pos)
final
final
final
elseif item.uid == == item.uid 2001 ou 2002, em seguida, - - o elevador para voltar ao terceiro andar
se item.itemid == 1945, em seguida,
doTransformItem (item.uid, 1946)
mais
doTransformItem (item.uid, 1945)
nplayer1pos = {x = 273, y = 433, z = 9}
doSendMagicEffect (nplayer1pos, 2)
doTeleportThing (cid, nplayer1pos)
final
elseif item.uid> 2004 e item.uid <2.009 então - chaves para o elevador na sala de manutenção
se item.uid == 2005, então
se item.itemid == 1945, em seguida,
doTransformItem (item.uid, 1946)
setPlayerStorageValue (cid, 2005,1)
setPlayerStorageValue (cid, 20001)
doPlayerSendCancel (cid, "Você trigered algo.")
mais
doTransformItem (item.uid, 1945)
setPlayerStorageValue (cid, 2005, -1)
final
elseif item.uid == 2006, em seguida,
se item.itemid == 1945, em seguida,
doTransformItem (item.uid, 1946)
setPlayerStorageValue (cid, 2006,1)
setPlayerStorageValue (cid, 20001)
doPlayerSendCancel (cid, "Você trigered algo.")
mais
doTransformItem (item.uid, 1945)
setPlayerStorageValue (cid, 2006, -1)
final
elseif item.uid == 2007, em seguida,
se item.itemid == 1945, em seguida,
doTransformItem (item.uid, 1946)
setPlayerStorageValue (cid, 2007,1)
setPlayerStorageValue (cid, 20001)
doPlayerSendCancel (cid, "Você trigered algo.")
mais
doTransformItem (item.uid, 1945)
setPlayerStorageValue (cid, 2007, -1)
final
mais
se item.itemid == 1945, em seguida,
doTransformItem (item.uid, 1946)
setPlayerStorageValue (cid, 2008,1)
setPlayerStorageValue (cid, 20001)
doPlayerSendCancel (cid, "Você trigered algo.")
mais
doTransformItem (item.uid, 1945)
setPlayerStorageValue (cid, 2008, -1)
final
final
retorno 1
endSo com este código que você fez um script elevador tranquila avançado que pode ser parte de uma missão. Agora, para um script segunda busca. Criando buracos escolher!
Se uma pessoa usa uma pick que eu fiz o servidor executar o script pick.lua. Este é o script pick.lua.
Código:
onUse function (cid, item, frompos, item2, topos)
se topos.y topos.x == == 209 e 456 e, em seguida, topos.z == 12 - - coordenadas
return 0 - - retorno 0 significa que você começa a mensagem. Isso não é possível. (Ou algo do mesmo modo)
final
return 1 - - retornar 1 significa que ele tem trabalhado
endThis é um código muito simples de usar buracos escolher! E se você quiser ter mais furos escolher simplesmente um anúncio topos.x elseif == ... e assim por diante.
No entanto, eu não descobri como fazer a decadência buraco, por isso vai voltar ao normal após um período de tempo.
Alguém me perguntou se é possível fazer legíveis. Sim, é. Eu trabalhei isso uma vez, mas perdi os dados de como. No entanto eu posso dar um bom palpite sobre como vai funcionar.
doSetItemText (uid, "texto")
Com esta função você pode definir o conteúdo de um livro, por exemplo, letras legíveis rola ou outro. uid é o ID único de um item do qual deseja alterar o texto. O texto é claro é o texto que você deseja colocar dentro Mas eu notei que algumas vezes você só pode colocar em cerca de 255 caracteres e não mais. Não sei se todos os servidores tem como aquele. Também acredito que se você colocar em "\ n" isso seria o mesmo que um Enter (linha seguinte).
Gostou +Rep
Creditos:Darker(Ediçao),(Traduçao),(e levar ao xtibia.com)
Mindstorm(Criador)
- Resets agora armazenados diretamente na 'DataBase', acabando com o sistema de Storages, e com o problema dos resets atrasados no look;
- Opções para Abilitar e Desabilitar Condições como por exemplo: 'look = true' , [true,false] configurando como achar melhor;
- E agora '[sTAGES]', para 'premmy' (Premium Account) e 'free' (Free Account);
- Instala o System e cria a Tabela de Resets com o comando "/installreset";
OBS: Sistema testado em 'Mysql' não tenho certeza si funciona em 'sql';
e Testando em: 8.50 (TFS 0.3.6) e 8.6 (TFS 0.4.0)
__________________________________________________________________________________________________________________________________
Vá em data/Talkactions, e crie um arquivo .lua e nomeie para
advancedResetSystem.lua e Adicione Isso:
--[[ <(Advanced Reset System 2.0)>
Autor: MarcelloMkez. Contato: (marcello_dirt@hotmail.com)
Versão: 2.0
Testado em: 8.50 e 8.60
TFS: 0.3.6 and 0.4.0
Fórum: http://www.xtibia.com/forum/topic/142463-advanced-reset-system-20/
-=[Características]=-
~( Versão 2.0 )~
- Resets agora Armazenados na DataBase; (Sem Valor de Storage)
- Instala o System e cria a Tabela de Resets com o comando "/installreset";
- Resets no Look do jogador ex: 22:10 You see Marcello [Reset 2] (Level 8). He is an elder druid.;
- [sTAGES] para "Premium Account" e "Free Account"; ]]
--=[Functions]=--
-- installReset()' [instala o Sistema.]
-- tableResetInstall()' [Verifica Se o Sistema ja foi instaladao.]
-- nowReseting()' [Verifica, retorna o erro ou reseta.]
-- getPlayerReset(cid)' [Pega numero de resets do player.]
-- checLevelStageReset(cid)' [Verifica o Level para Resetar.]
-- newReset(cid)' [Verifica todas as Condições de Reset.]
-- addValue(value)' [Adiciona numero de resets.]
--=[Comandos de Jogadores]=--
-- "/installreset" -- Só será usado uma vez, para instalar o sistema.
-- "!resetar" -- Para Resetar.
function onSay(cid, words, param)
if words =="!resetar" then
--[ Condições de Reset ] --
local coNdConf = {
needPz = true, -- Precisa estar em Pz pra resetar? [true, false]
needPa = false, -- Precisa ser Premium Account Pra resetar? [true, false]
withe = false, -- Players com Pk Withe podem resetar? [true, false]
red = false, -- Players com Pk Red pode resetar? [true, false]
battle = false, -- Players precisão estar sem battle pra resetar? [true, false]
teleport = true, -- Teleportar Player para o templo após resetar? [true, false]
look = false, -- Aparecer Resets no Look do Player? [true, false]
pid = getPlayerGUID(cid), -- Não Mexer.
--[ Configurações do Reset ] --
resetConf = {
Level = 350, -- Level Necessário para Resetar. [Valor]
backLvl = 8, -- Level que voltará após o Reset. [Valor]
time = 5, -- Tempo para o Player deslogar ao resetar, em segundos. [Valor]
},
}
--[[>> STAGES <<]]--
x=true;X=true -- Não Mexer.
local stage = {Abilitar = {x}, Desabilitar = {}, --<< Abilitar Stages?? >>-- [{x};{}]
-- [RESETS] | [PREMMY] | [FREE]
stage1= {resets= 4, premmy= 330, free= 350},
stage2= {resets= 9, premmy= 340, free= 355}, -- EXPLICANDO e Configurando stages. (Se estiver Abilitado [Abilitar = {x}])
stage3= {resets= 14, premmy= 355, free= 360}, -- resets = Número de resets para o Stage;
stage4= {resets= 19, premmy= 360, free= 365}, -- premmy = Level necessário para Premium Accounts;
stage5= {resets= 24, premmy= 370, free= 380}, -- free = Level necessário para Free Accounts;
stage6= {resets= 29, premmy= 380, free= 390}, -- Coloque em Ordem...
stage7= {resets= 35, premmy= 400, free= 410}, -- [OBS: MARQUE UM "X" PARA ABILITAR OU DESABILITAR OS STAGES]
stage8= {resets= 40, premmy= 410, free= 440}, -- EX: para desabilitar mude: Abilitar = {}, Desabilitar = {x}
stage9= {resets= 45, premmy= 450, free= 450},
stage10={resets= 50, premmy= 465, free= 465},
}
--[[>> FIM STAGES <<]]--
--=[Pega Valor de Resets]=--
function getPlayerReset(cid)
local qr = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";")
rss = qr:getDataInt("reset", coNdConf.pid)
if rss < 0 then
rss = 0
end
return rss
end
local success = " ~~ Sucesso! ~~ \nVocê tem agora "..(getPlayerReset(cid)+1).." resets. \nVocê será deslogado em "..coNdConf.resetConf.time.." segundos." ;err = doPlayerSendTextMessage
local qrt = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";");rss_db = qrt:getDataInt("reset", coNdConf.pid)
local lvl_query = "UPDATE `players` SET `level` = "..(coNdConf.resetConf.backLvl)..", `experience` = 0 WHERE `id`= " .. coNdConf.pid .. ";"
local reset_query = "UPDATE `players` SET `reset` = "..(getPlayerReset(cid)+(1)).." WHERE `id`= " .. coNdConf.pid .. ";"
local nolook_query = "UPDATE `players` SET `description` = '' WHERE `players`.`id`= " .. coNdConf.pid .. ";"
local look_query = "UPDATE `players` SET `description` = ' [Reset "..(getPlayerReset(cid)+(1)).."]' WHERE `players`.`id`= " .. coNdConf.pid .. ";"
--=[Reseta]=--
function addValue(value)
if coNdConf.look == false then
doRemoveCreature(cid)
db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(nolook_query)
else
doRemoveCreature(cid)
db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(look_query)
return LUA_NO_ERROR
end
end
function nowReseting()
if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -")
return true
end
if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then
doPlayerPopupFYI(cid, success)
addEvent(addValue, coNdConf.resetConf.time*1000, value)
else
doPlayerPopupFYI(cid, success)
addEvent(doTeleportThing, coNdConf.resetConf.time*900, cid, getTownTemplePosition(getPlayerTown(cid)))
addEvent(addValue, coNdConf.resetConf.time*1000, value)
return true
end
end
--[sTAGES Nao mexer em nada.]--
function checkLevelStageReset(cid)
local stages = {
{resets= stage.stage1.resets, premmy= stage.stage1.premmy, free= stage.stage1.free},
{resets= stage.stage2.resets, premmy= stage.stage2.premmy, free= stage.stage2.free},
{resets= stage.stage3.resets, premmy= stage.stage3.premmy, free= stage.stage3.free},
{resets= stage.stage4.resets, premmy= stage.stage4.premmy, free= stage.stage4.free},
{resets= stage.stage5.resets, premmy= stage.stage5.premmy, free= stage.stage5.free},
{resets= stage.stage6.resets, premmy= stage.stage6.premmy, free= stage.stage6.free},
{resets= stage.stage7.resets, premmy= stage.stage7.premmy, free= stage.stage7.free},
{resets= stage.stage8.resets, premmy= stage.stage8.premmy, free= stage.stage8.free},
{resets= stage.stage9.resets, premmy= stage.stage9.premmy, free= stage.stage9.free},
{resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free},
}
local resets = getPlayerReset(cid)
for i, tab in ipairs(stages) do
if resets <= tab.resets then
coNdConf.resetConf.Level = isPremium(cid) and tab.premmy or tab.free
break
end
end
if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then
err(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -")
return TRUE
end
if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then
doPlayerPopupFYI(cid, success)
addEvent(addValue, coNdConf.resetConf.time*1000, value)
else
doPlayerPopupFYI(cid, success)
addEvent(addValue, coNdConf.resetConf.time*1000, value)
addEvent(doTeleportThing, coNdConf.resetConf.time*900, cid, getTownTemplePosition(getPlayerTown(cid)))
return true
end
end
function newReset(cid)
if(coNdConf.needPz == true) and (getTilePzInfo(getCreaturePosition(cid)) == LUA_ERROR) then
err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar em Protection Zone Para Resetar. -") return TRUE end
if(coNdConf.needPa == true) and not isPremium(cid) then
err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa ser Premium Account para Resetar. -") return TRUE end
if(coNdConf.withe == false) and (getCreatureSkullType(cid) == 3) then
err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Withe. -") return TRUE end
if(coNdConf.red == false) and (getCreatureSkullType(cid) == 4) then
err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Red. -") return TRUE end
if(coNdConf.battle == true) and (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then
err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar sem Battle para Resetar. -") return TRUE end
local xy = {true,false}
table.insert(stage.Abilitar, false)
table.insert(stage.Desabilitar, false)
if stage.Abilitar[1] == xy[1] and stage.Desabilitar[1] == xy[2] then
checkLevelStageReset(cid)
elseif stage.Abilitar[1] == xy[2] and stage.Desabilitar[1] == xy[1] then
nowReseting()
else
doPlayerPopupFYI(cid, "LUA_ERROR; Configure corretamente o Sistema de STAGES!")
end
return true
end
function tableResetInstall()
print(not rss_db and LUA_ERROR or "Tabela de Resets: Instalada ... [success] ")
addEvent(newReset, 1000, cid)
return false
end
if tableResetInstall() then
end
end
--=[install System]=--
function installReset()
if db.executeQuery("ALTER TABLE `players` ADD reset INT(11) NOT NULL DEFAULT 0;") then
print("[MarcelloMkez] -= Advanced Reset System 2.0 por DataBase =- Instalado com sucesso!")
return TRUE
end
print('[Advanced Reset System/MarcelloMkez] Não foi possível instalar o Sistema.')
return FALSE
end
local tt = {
"Preparando Instalação...",
"Instalando: TableReset Db...",
"Instalando: getPlayerReset()...",
"Instalando: addValue()...",
"Instalando: checkLevelStageReset()...",
"Instalando: newReset() and nowReseting()...",
"Finalizando Instalação...",
"...",
success = {
"Iniciando...",
"function: TableReset Db... [success]",
"function: getPlayerReset()... [success]",
"function: addValue(value)... [success]",
"function: checkLevelStageReset()... [success]",
"function: newReset() and nowReseting()... [success]",
"Fim da Instalação. ",
"by: ~~ MarcelloMkez ~~ \nContato: marcello_dirt@hotmail.com",
inst = {"MarcelloMkez","Advanced Reset System 2.0 por DataBase"
},
},
}
if words == "/installreset" and getPlayerAccess(cid) >= 3 then
function install()
if installReset() then
print(""..tt.success[7].."")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,""..tt.success[8].."")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "["..tt.success.inst[1].."] -="..tt.success.inst[2].."=- Instalado com sucesso!")
else
print("["..tt.success.inst[1].."] FALHA NA INSTALAÇÃO! [O sistema ja foi instalado].")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "["..tt.success.inst[1].."] FALHA NA INSTALAÇÃO! [O sistema ja foi instalado].")
end
return 1
end
function concl(cid)
local typetx = MESSAGE_STATUS_CONSOLE_BLUE
print(""..tt.success[7].."")
print(""..tt[8].."")
doPlayerSendTextMessage(cid, typetx,""..tt.success[7].."")
doPlayerSendTextMessage(cid, typetx,""..tt[8].."")
addEvent(install, 1000,cid)
end
function finall(cid)
local typetx = MESSAGE_STATUS_CONSOLE_BLUE
print(""..tt.success[6].."")
print(""..tt[7].."")
doPlayerSendTextMessage(cid, typetx,""..tt.success[6].."")
doPlayerSendTextMessage(cid, typetx,""..tt[7].."")
addEvent(concl, 3000,cid)
end
function installDd(cid)
local typetx = MESSAGE_STATUS_CONSOLE_BLUE
print(""..tt.success[5].."")
print(""..tt[6].."")
doPlayerSendTextMessage(cid, typetx,""..tt.success[5].."")
doPlayerSendTextMessage(cid, typetx,""..tt[6].."")
addEvent(finall, 1000,cid)
end
function installCc(cid)
local typetx = MESSAGE_STATUS_CONSOLE_BLUE
print(""..tt.success[4].."")
print(""..tt[5].."")
doPlayerSendTextMessage(cid, typetx,""..tt.success[4].."")
doPlayerSendTextMessage(cid, typetx,""..tt[5].."")
addEvent(installDd, 1000,cid)
end
function installBb(cid)
local typetx = MESSAGE_STATUS_CONSOLE_BLUE
print(""..tt.success[3].."")
print(""..tt[4].."")
doPlayerSendTextMessage(cid, typetx,""..tt.success[3].."")
doPlayerSendTextMessage(cid, typetx,""..tt[4].."")
addEvent(installCc, 1000,cid)
end
function installAa(cid)
local typetx = MESSAGE_STATUS_CONSOLE_BLUE
print(""..tt.success[2].."")
print(""..tt[3].."")
doPlayerSendTextMessage(cid, typetx,""..tt.success[2].."")
doPlayerSendTextMessage(cid, typetx,""..tt[3].."")
addEvent(installBb, 1000,cid)
end
function toInstall()
local typetx = MESSAGE_STATUS_CONSOLE_BLUE
print(""..tt.success[1].."")
print(""..tt[2].."")
doPlayerSendTextMessage(cid, typetx,""..tt.success[1].."")
doPlayerSendTextMessage(cid, typetx,""..tt[2].."")
addEvent(installAa, 1000,cid)
end
function preparation()
local typetx = MESSAGE_STATUS_CONSOLE_BLUE
print(""..tt[1].."")
doPlayerSendTextMessage(cid, typetx,""..tt[1].."")
addEvent(toInstall, 3000,cid)
end
if preparation() then
end
end
return 1
end
--=[by: MarcelloMkez]=--
- Após adicionar o script em TalkActions e em Talkactions.xml
Use o comando "/installreset" em jogo,
OBS: o System so pode ser Instalado pelo GOD!
A a instalação será mostrada no default, e no Distro!
Apos isso, Sistema Instalado!
'Explicando stages:
Stage 1:
stage1= {resets= 4, premmy= 330, free= 350},
resets: ---- Quantidade de Resets para o stage.
premmy: ---- Level que Premmium Accounts podera Resetar. (no caso ate 4 resets)
free: ------ Level que Free Accounts podera Resetar. (no caso ate 4 resets)
--- Bom como vcs pode ver, vai ate o 'Stage 10':
stage10={resets= 50, premmy= 465, free= 465},
--- Intao irei explicar, caso queiram adicionar mais stages...
Use 'Ctrl + G' com o script aberto, e digite 71, e aperte enter,
logo ira direcionar para linha 71 que no caso é esta:
stage10={resets= 50, premmy= 465, free= 465},
- Abaixo dela adicione uma exatamente igual, so modificando o numero do stage ficando assim: