Histórico de Curtidas
-
caionak deu reputação a Tadelho em Alvos específicos em spells de área!Conforme tive uma dúvida outro dia, consegui obter uma solução satisfatória e, sabendo que pode ser a dúvida de mais gente, resolvi compartilhar na forma deste pequeno tutorial.
A ideia é muito simples: fazer com que uma spell de área atinga apenas alguns alvos conforme uma característica específica. Isso pode ser bastante útil para diversas ideias, além do script base servir para tantos outros efeitos interessantes.
Atenção, fiz os scripts para: TFS 0.4.0
Teremos como base para esse exemplo a magia "divine caldera", o famoso "exevo mas san".
Nela teremos o seguinte script:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 4, 6) local area = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end
Desta forma, a magia atingirá todos os alvos em sua área de alcance. Mas queremos mudar isso, queremos que ela atinja alvos específicos, e aqui entram algumas ideias, por exemplo: podemos fazer com que ela acerte apenas players de um determinado level, players de uma determinada vocação, players com um determinado access, ou mesmo uma storage, ou ainda, como no exemplo que darei a seguir, fazer com que a magia acerte apenas alvos com um determinado nome (no caso, serão criaturas e não players).
Para isso, utilizaremos uma função, "onTargetCreature(cid, target)" e depois a chamaremos como parâmetro de um "setCombatCallback(combat, key, function_name)".
Na função onTargetCreature nós faremos a verificação desejada. Por exemplo, no código a seguir eu quero que a minha spell atinja apenas criaturas com o nome de "rat" ou "cave rat", então ficaria assim:
function onTargetCreature(cid, target) local creatures = {"rat", "cave rat"} if isMonster(target) and isInArray(creatures, getCreatureName(target)) then doTargetCombatHealth(cid, target, type, min, max, effect) end end Traduzindo: eu criei uma tabela local com os nomes desejados, verifiquei se o alvo era um monstro e se o nome do monstro constava na minha tabela recém criada. Sendo verdadeiro, acionei a função doTargetCombatHealth(cid, target, type, min, max, effect). -- Lembrando que conforme o tipo da sua magia você vai alterar os parâmetros dessa função para que ela tenha as animações e o dano compatíveis com o seu gosto/objetivo.
Outro detalhe é que nesse trecho de código acima é que é feita a verificação que eu desejo. Eu poderia ao invés disso verificar se é um jogador e se a vocação dele tem o id 1 ou 2, por exemplo. Ficaria:
function onTargetCreature(cid, target) local vocations = {1, 2} if isPlayer(target) and isInArray(vocations, getPlayerVocation(target)) then doTargetCombatHealth(cid, target, type, min, max, effect) end end Ou verificar um level, para que a magia só funcione em alvos acima do level X, etc. Exemplo:
function onTargetCreature(cid, target) local level = 80 if isPlayer(target) and getPlayerLevel(target) >= 80 then doTargetCombatHealth(cid, target, type, min, max, effect) end end
Feita a função, faremos aquilo que mencionei: a chamaremos como parâmetro da função "setCombatCallback" para o nosso "combat". Fica assim:
setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
Feito isso, pronto! Basta chamarmos a spell normalmente.
Exemplo de tudo pronto para uma magia "exevo mas san" que só acerte os ratos e tira de 10 a 20 de vida:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA) local area = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat, area) function onTargetCreature(cid, target) local creatures = {"rat", "cave rat"} if isMonster(target) and isInArray(creatures, getCreatureName(target)) then doTargetCombatHealth(cid, target, COMBAT_HOLYDAMAGE, -10, -20, CONST_ME_HOLYAREA) end end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Agora é com a criatividade de vocês!
Até a próxima!
-
caionak deu reputação a Darcio Antonio em Criando um Botão OT CLIENTgame_topslot.zi
Bom o scan do arquivo está ai.
https://www.virustotal.com/#/file/5a0b17722b93fd4c9117086b80ad24442c305a05723680cad34ec50138ef30bc/detection
-
caionak deu reputação a xWhiteWolf em Magnus ChallengerFala galera, hoje vim trazer o projeto pronto do Magnus Challenger pra vocês instalarem no servidor de vocês!
Pra quem não conhece é um sistema de Tasks baseado no Zezenia onde você pode escolher entre tasks de matar monstros ou de coletar certos items para o npc Magnus, um guerreiro famoso da cidade que está atolado de tarefas e precisa da sua ajuda!
Peguei os aspectos que eu julguei serem os principais do modelo do Zezenia e editei com algumas coisas que eu achei que ficariam melhores.
Quem quiser pode ver um vídeo comentado de como o sistema funciona:
Dito isso vou ensinar vocês como instalar isso no server:
Pra começar vá em data\creaturescripts\scripts e procure login.lua, agora vá até o final do arquivo e antes do último return true coloque essas linhas abaixo
ainda em creaturescripts procure creaturescripts.xml e adicione essa linha junto com as outras que já estão lá (seguindo o padrão)
<!-- TASK SYSTEM --> <event type="kill" name="tasksystem" script="tasksystem.lua"/> Agora crie um arquivo em creaturescripts\scripts com o nome de tasksystem.lua e adicione o seguinte à ele:
Terminada a parte da contagem de kill vamos ao NPC em si.
Crie um arquivo chamado Magnus.xml em data\npc e coloque isso dentro dele:
Agora em data\npc\scripts crie um arquivo chamado zezeniaa.lua e adicione esse conteúdo dentro do arquivo:
~~~~~~~~~~~~~~~~ FEITO ISSO ESTÁ TERMINADO ~~~~~~~~~~~~~~~~~~
Agora aprendendo a configurar:
No tasksystem vc pode editar isso daqui:
Eu fiz um sistema onde se vc estiver em party com alguém e a pessoa matar os bixos conta como se você tivesse matado; Assim incentiva o pessoal a ir numa cave de Dragon e ao invés de matar quem está lá pra ficar sozinho na cave, eles vão chamar party pra fazerem a task juntos.. assim fazer amigos fica mais fácil e com maiores laços é maior a chance do povo não abandonar o seu server.
Apenas digite "true" ou "false" pra ativar/desativar esse sistema e em baixo temos a distancia máxima pro monstro estar do cara que está fazendo a task pra contar o kill. Se a distancia entre o monstro e a pessoa for maior que 7 não vai contar pra ele a kill.
No zezeniaa.lua as coisas que dão pra configurar são maiores mas são igualmente simples:
Toda vez que vc pedir uma task short (curta) vc vai ter de 100 a 400 monstros pra matar, ele gera um número de 0 a 6 e multiplica por 5 e soma com os 100 iniciais.. o mesmo vale pra todos os outros valores.
levelcollect é o level mínimo pra fazer tasks do tipo collect.
time é o tempo em segundos que você vai ficar sem poder falar com o npc caso desista de alguma task, o padrão é 8 * 60 * 60 (8 horas)
bonus é por quanto vai multiplicar caso vc permita que o npc escolha aleatoriamente entre todas as opções.. o padrão é 20% de bonus (1.2)
multiplicador é uma coisa que eu adicionei pra ficar mais fácil mexer na fórmula sem cometer cagadas, se vc tá ganhando 10% de exp e quer ganhar 80% é só colocar 8 no multiplicador.
Isso daqui é o banco de dados principal do sistema de kill, toda vez que vc escolher uma task do tipo fácil, médio, dificil ele vai acessar essas tabelas contendo o nome das criaturas.. vc pode facilmente adicionar novos nomes, o npc já está programado pra lidar com isso, apenas siga o padrão e mantenha sempre o último sem vírgula!
Ex: adicionando Morgaroth na tabela de hard
local hard = { [1] = "Giant Spider", [2] = "Dragon Lord", [3] = "Grim Reaper", [4] = "Demon", [5] = "Crystal Spider", [6] = "Demon Skeleton", [7] = "Juggernaut", [8] = "Destroyer", [9] = "Hand of Cursed Fate", [10] = "Morgaroth" } atente-se também pra não repetir o número no index.. se o anterior era [9] use [10].
O restante das tabelas são separadas para o banco de dados das tasks de collect:
segue a mesma lógica da de kill só que aqui você tem o id dos itens que serão usados... aquela count não tem nada a ver com o item pois ele vai gerar tanto o item aleatoriamente quanto à count;
Ex:
[1] = {id = 5880, count = 20}, -- iron ore isso não significa que se cair iron ore (id 5880) irá cair sempre 20.. até porque eu poderia escolher uma task long e easy e pegar a task de trazer até 50 iron ores, apenas tente manter os padrões que são os intervalos definidos.
No easy ele varia de 10 a 20, no medium ele varia de 20 a 35 e no hard de 40 a 50.
Espero que vocês tenham curtido, é um sistema grande mas bem simples de se mexer... se tiverem quaisquer problemas podem comentar aqui. Deu trabalho fazer isso então se você gostou deixe o seu comentário aí e o seu "Gostei" que vai me incentivar a trazer mais coisas desse tipo pra cá. Abraços do lobo.
PS: Pra sumonar o npc digite com o GOD: /n Magnus ou coloque ele pelo map editor.
-
caionak deu reputação a Storm em [RESOLVIDO] New Client Tibia
-
caionak deu reputação a Garou em Perfect Upgrade SystemSistema atualizado, mais limpo e com novas funções.
-
caionak recebeu reputação de Pedriinz em [Error Syntax] RME ExtendedSabe aquele "error syntax" que pede o client.xml?
É esse error que ensinarei a resolver blz?!
Vamos Ao Tutorial
1- Você precisa ter o RME (Remere's Map Editor) Extended.
2- Agora abra a pasta "Remere's Map Editor" localizada no:
[ Disco Local -> Program Files -> Remere's Map Editor ]
3- Procure por "Client" dentro da Pasta.
4- Mude o nome do "Client" para "Client.xml".
5- Salve e feche a pasta.
6- Agora você poderá abrir o RME Normalmente !
Link do download e tutorial do RME Extended do Vudi:
[ AJUDEI ? REP+ ]
-
caionak deu reputação a marcosap em [8.54] PokeCyan [ Editado By Senhor] Atualizado 3.0 2016data/talkactions/scripts/move1 e procura por clan Ja era
-
caionak deu reputação a vudi em [8.54] PokeCyan [ Editado By Senhor] Atualizado 3.0 2016Boa Noite , Boa Tarde ou Bom Dia TK's não sei a hora que vocês vão ver o Tópico
Estava com meu Projeto do "Pokemon H" Fiz várias Ediçoes no Servidor Que Baixei aqui no Tibia King Mesmo e vim disponibilizá-los para vocês.
Então bora ao que interessa né?
• Menu:
├ Informações;
├ Edições;
├ Erros;
├ Prints;
├ Mapa
├ Download;
├ Atualização;
├ Utilitários;
└ Créditos.
• Informações Básicas •
• Edições / Ajustes •
• Erros do Servidor •
• Prints•
• MAPA •
• Downloads •
Cliente * MediaFire e Scan
Servidor * MediaFire e Scan
• Download Atualização 2.0 •
Download: https://www.mediafire.com/?ik211gku2hdqz2t
Scan :
• Download Atualização 3.0 • 2016
OBS: NÃO TERÁ MAIS EDIÇÕES.
• Utilitários •
Remeres que usei pra editar: AQUI
• Créditos •
Brun Por Criar o Servidor
Slicer Por Editar o Servidor
Mulurka (pelas out)
Stylo pelo tuto do ícone system
noninhu por ajudar em alguns spells
tem 2 caras tbm eu eskeci o nome deles agora que ajudaram 1 com as insignias na barra de skill e o outrio pelas scripts da liga pokemon
dandanrvb pelas scripts do icone system
erondino por algumas caves
ih é só bjundão a all
Vudi (Eu) Por editar o resto do servidor e trazer as novidades
Tioj Pelas edições e Por fazer eu copiar a organização do tópico dele kk obg
Kuuhaku pela cave dos geot .
Held Itens By Gabriel Sales
Gabriel Sales AnnaFeeh pelo script do ditto system pxg
Obs: Se Está faltando algum crédito me avise pra mim colocar ( Não sei se está faltando algum)
Obs: Qualquer Outra Duvida Estarei de Suporte no Tópico
Obs: SENHA GOD/GOD
OBS : Se Pegar o Servidor e Postar em Outro Fórum sem as minhas permissão vou pedir para o dono do forum ou site retirar o conteúdo . (Esse Conteúdo é exclusivo do TibiaKing obrigado)
Se ajudei Já sabe né
-
caionak deu reputação a Anjo Celestial em [8.54] PokéXRed 1.0 (PDA)• Menu:
├ Informações;
├ Edições;
├ Erros;
├ Prints;
├ Mapa
├ Download;
├ Atualização;
├ Utilitários;
└ Créditos.
• Informações Basicas •
(+)1 a 3 Gen (Completa)
(+)Bike System
(+)Tournament System
(+)Clã System
(+)Boost Stone
(+)Shiny Stone
(+)VIP System 100% Fucional
(+)Moto System
Entre outras coisas...
• Edições / Ajustes •
(+)Retirados alguns Bugs do server
(+)Implantado remakes da 1 a 4 Gen.
(+)Adicionados alguns comandos e system.
(+)Nova raça de pokémons FAIRY
(+)Adicionado Level System com balanceamento
(+)Foi balanceado mais de 123 pokémons
(+)Megas Pokémon no client,não deu tempo de serem add
(+)Alguns Pokémon da 5 Gen.
• Erros Do Servidor •
Nenhum que eu saiba XD
• PrintScreen •
Em breve posto mais prints!!
• Download's •
Client e Server:https://www.sendspace.com/filegroup/2JkNESDqZBTn2xsIGFMPzg
• Creditos •
Eu
Gabrieltxu
Kalvin
Zeref Shirou
• Scan •
Server: https://www.virustotal.com/pt/file/58dcb515a65fed349f13172c81de8208d66e674d372824baaa5c2c8754106816/analysis/1431740265/
Client: https://www.virustotal.com/pt/file/162a9ec7ff56ef1af0450b7f83af402f8b112be560df7cc3a2a827aafd2f8237/analysis/
-
caionak deu reputação a PriisioneR em (Resolvido)[Action] itens por Alavancalocal config = { removeItem = {id = 2671, count = 1}, addItem = {id = 2401, count = 1}, } function onUse(cid, item) if not(doPlayerRemoveItem(cid, config.removeItem.id, config.removeItem.count)) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You dont have "..config.removeItem.count.." "..getItemNameById(config.removeItem.id)..".") end doPlayerAddItem(cid, config.addItem.id, config.addItem.count) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You gained "..config.addItem.count.." "..getItemNameById(config.addItem.id)..".") end Esse script ele troca um item por outro
removeItem = {id = 2671, count = 1},
addItem = {id = 2401, count = 1},
item que o player precisa para usar
item que ele vai ganhar após usar