Histórico de Curtidas
-
lucasvtr1 recebeu reputação de BangxD em (Resolvido)Modificaçao no scriptSubstitui o sue por esse e se der certo me avisa!
local poison = createConditionObject(CONDITION_POISON) setConditionParam(poison, CONDITION_PARAM_DELAYED, 1) local damageTable1 = { {3, -600}, --- 3 é a quantidate de danos, e 600 é o dano, voce pode mudar ai como quiser. {3, -600}, --- mesma coisa em baixo {4, -600}, --- a soma tem q dar 10 porque 10 *1000 é 10000 o tempo que cria o item denovo } for i = 1, #damageTable1 do local t = damageTable1[i] addDamageCondition(poison, t[1], 1000, t[2]) -- 1000 é o tempo entre os damages end function onUse(cid, item, frompos, item2, topos) local1 = {x=1349, y=876, z=14, stackpos=2} item1 = {x=1330, y=878, z=14, stackpos=1} item2 = {x=1330, y=879, z=14, stackpos=1} getitem1 = getThingfromPos(item1) getitem2 = getThingfromPos(item2) getlocal1 = getThingfromPos(local1) if item.uid == 7213 and item.itemid == 5058 then doTransformItem(item.uid,item.itemid-1) end getlocal1 = getThingfromPos(local1) if(getlocal1.itemid == 5057 and getitem1.itemid == 1304) then doRemoveItem(getitem1.uid,1) doRemoveItem(getitem2.uid,1) doAddCondition(cid, poison) --- aqui é a condiçao no script. addEvent(function() if(getlocal1.itemid == 5057) then doCreateItem(1304,1,item1) doCreateItem(1304,1,item2) doTransformItem(getlocal1.uid,5058) end end, 10000) end return true end Ok?
-
lucasvtr1 recebeu reputação de kinglekke em Tempo em ScriptNão achei uma função especifica na lib.
mais tenta trocar por esse script:
function onUse(cid, item, frompos, item2, topos) local pausa = 120*60*120000 -- (1000 = 1 segundos) Tempo que o script durará local texto = "Você dobrou sua Experiencia por 2 Horas" -- Texto que irá receber ao usar a potion. textofinal = "Acabou o potion de Experiencia." -- Texto que irá receber quando o efeito da potion acabar. local exp = 3 -- O quanto que você quer que dobre sua experiencia, por exemplo 2 é 2x as rates do seu server. local expfinal = 1 --Não mude, isso é para a experiencia voltar ao normal. remoitem = true --irá remover o item. local rates = getPlayerRates(cid) local limitedeuso = 49015 local tempo = 120*60*1000 -- 1000 = 1s então 1000 vezes 60 vezes 30 = 30 minutos local textofinal1 = "Você já esta sob efeito da pot de experiência espere o efeito acabar." local seuitem = 7440 -- seu item que dará double exp local efeito1 = 13 -- efeito que ficara com o char por meia hora local efeito2 = 35 -- efeito que acontecera no momento que usar a pot local hours = 2 function effect() if isPlayer(cid) then local pos = getCreaturePosition(cid) doSendMagicEffect(pos, efeito1) end end if item.itemid == seuitem and (getPlayerStorageValue(cid, limitedeuso) - os.time() <= 0) then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]*exp) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + hours*3600) doPlayerSendTextMessage(cid,22,texto) addEvent(potion, pausa, cid) a = 1 while a ~= timeEffect do addEvent(effect, a * 1000) a = a + 1 end elseif item.itemid == seuitem and (getPlayerStorageValue(cid, limitedeuso) - os.time() > 0) then doPlayerSendTextMessage(cid,22,textofinal1) end return true end function potion(cid) doPlayerSetExperienceRate(cid,rates[SKILL__LEVEL]) doPlayerSendTextMessage(cid,22,textofinal) end Axo que ainda vai dar errado. mas se o erro mudar pelo menos ja é alguma coisa. posta as diferenças.
Valeu. Eu pus esse script no meu otserver ele é 9.83 e não funcionou. Ele é um OTX. 2.52.
-
lucasvtr1 deu reputação a Avuenja em OTClient 0.6.7 | 10.71Olá galera, como muitos estavam reclamando dos links off, e de atualizações do OTC. Ai esta a versão mais recente dele.
Informação:
Versão OTC: 0.6.7 Versões suportadas pelo client: 7.4 há 10.71 Compilada por: Avuenja Compilada em 16/01/2015 Imagem:
Download:
For Windows
Abraços pessoal, as sources estão juntas. :3
-
lucasvtr1 recebeu reputação de Wase Wiss em Player Fica mais forte de acordo a qual transformação ele usarAi são os valores que os scripts tomam referencia para atribuir os valores de dano, cura, defesa etc. em cada vocação(transformação) há atribuições diferentes. se você criar uma nova vocação e botar tipo magdefense="2.0" essa vocação vai ter o dobro de defesa nas magias que uma vocação de magdefense="1.0". Ai vc vai editando os outros como malledamage que são os danos físicos ou o magdamage que sao os mágicos tem a defense que é a defesa atribuída aos escudos e o wanddamage que é relativo dano das wands e rods e o maghealingdamage que define o potencial de cura da vocação. Não esquecendo, sempre faça backup desse arquivo pois qualquer mudança nele muda muita coisa no server e é bom ter um ponto de backup limpo.
-
lucasvtr1 deu reputação a Marco Oliveira em Servidor 10.90 | Windows 32/64 Bits | Versão FinalDepois de muitos pedidos e muita procura acabei compilando o TFS da versão 10.90, está estável.
As sources são originais, não houve modificações nelas, apenas os sistemas foram adicionados...
Clique Aqui para fazer o download da versão 32 bits.
Clique Aqui para fazer o download da versão 64 bits.
Clique Aqui para fazer o download das sources.
Clique Aqui para o scan de 32 bits.
Clique Aqui para o scan de 64 bits.
Clique Aqui para o scan das sources.
Para usar o Reward Chest adicione a seguinte flag no monstro.
<flag rewardchest="1" /
Você também pode definir o drop para ser único, dessa forma só a pessoa que fez o maior dano irá obter este item. exemplo:
<item id="5903" chance="100000" uniquedrop="1" /><!-- ferumbras' hat --> Na versão final foram corrigidos os bugs das mensagens do Server Log como as de potion e loot. Seguem as screen shots..
Ps: Eu ainda não tinha disponibilizado o download para outros fóruns.. até pq era exclusivo de um outro fórum do mesmo conteúdo....
Se algum ADM tiver alguma duvida sobre os tópicos não autorizados por favor me mandar msg inbox.
-
lucasvtr1 deu reputação a hpjp em [10.93] Projeto Capernia, RL MAPParabéns pelo seu trabalho manolo! A tempos que não vejo uma pessoa preocupada em entregar algo de graça por aqui.. Se precisar de ajuda com alguma coisa.. só dar um toque!!
Mais uma vez Parabéns....
OFF: Ano passado fiz uma vídeo aula ensinando a colocar ot online e o @Azhaurn postou.. é um vídeo bem completo que ensina 100% a colocar ot online se quiser colocar o link para ajudar a galera que está começando agora.. Lembrando que eu mantenho o tópico ativo, e sempre respondo todas as dúvidas..
Link \/
-
lucasvtr1 deu reputação a Pedriinz em Configurar Save serverUse este código:
local config = { broadcast = {120, 30}, flags = 13, delay = 120, events = 30 } local function executeSave(seconds) if(isInArray(config.broadcast, seconds)) then doBroadcastMessage("[Server]: Server save within " .. seconds .. " seconds, please mind it may freeze!", MESSAGE_STATUS_CONSOLE_BLUE) end if(seconds > 0) then addEvent(executeSave, config.events * 1000, seconds - config.events) else doSaveServer(config.flags) doBroadcastMessage("[Server]: Server save completed.", MESSAGE_STATUS_CONSOLE_BLUE) end end function onThink(interval) if(table.maxn(config.broadcast) == 0) then doSaveServer(config.flags) else executeSave(config.delay) end return true end
-
lucasvtr1 deu reputação a Ed.Specter em (Resolvido)Trocar premium points no tradeadiciona a função que citei.
e vê se funciona esse aqui:
talkactions
function onSay(cid, words, param, param2, channel) local t = string.explode(param, ",") local target = getCreatureByName(t[1]) local points = tonumber(t[2]) local item = 2233 local storage = 21223 if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") end if (target ~= nil) and isPlayer(target) and not isPlayerGhost(target) then if (points ~= nil) and (type(points) == 'number') and (points>0) then if getPlayerVipPoints(cid) > points then local addItem = doPlayerAddItem(cid, item, 1) doStartTrade(cid, target, addItem) doItemSetAttribute(addItem, "description", "Transferência de "..points.." premium points.") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você deu trade no jogador "..getPlayerName(target)..", com a intenção de trocar "..points.." premium points.") doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "O Jogador "..getPlayerName(cid).." deu trade em você, e está disposto a trocar "..points.." premium points.") setPlayerStorageValue(cid, storage, points) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem essa quantidade de premium points.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end return true end
creaturescripts:
function onTradeAccept(cid, target, item) local storage = 21223 local sto = getPlayerStorageValue(cid, storage) if sto > 0 then doPlayerRemoveVipPoints(cid, sto) doPlayerAddVipPoints(target, sto) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você trocou "..sto.." premium points, Parabéns.") doPlayerSendTextMessage(target, MESSAGE_STATUS_CONSOLE_BLUE, "Você realizou uma troca e adquiriu "..sto.." premium points, Parabéns.") setPlayerStorageValue(cid, storage, 0) end return true end
nesse caso você vai usar !trade NomeDoOutroPlayer, Quantidade de points. Exemplo: !trade Eduardo, 3
acho que deu pra ter uma boa base de como funciona..
não entendi direito esse do npc
-
lucasvtr1 deu reputação a Digoshow em (Resolvido)Editando Talkaction para Adiconar/Remover Storage na Conta.Bom galera, recentemente eu criei um Topico para que alguem que tenha conhecimento adicionar uma Storage no Player pelo Script, quando o comando for usado, segue o topico:
O Topico era para adicionar Storage, então dei como Resovido, pois está adicionando agora graças ao Alexy Brocanello, então não tem razão para fugir do tema do Topico fazendo outras perguntas.
Porem agora me deparei com 2 problemas, e quais são?
Primeiro problema é que, quando eu uso o comando "/pa add, Nome do Player, Quantidade" a quantidade de premium é adicionada na conta do player, porem a Storage é adicionada apenas no "Player" que foi colocada ali em cima no comando, teria algum jeito de fazer a Storage ser adicionada na conta toda?
O segundo problema é que quando eu uso o comando "/pa remover, Nome do Player, Quanidade" ele continua com a Storage!
O que eu realmente desejo que o script faça?
Gostaria que o Script funciona-se do seguinte modo:
Ele checka se o Player tem Dias Premium Account na Conta, caso não tenha, a Storage é removida da Conta toda!
E enquanto tiver Premium Account, todos os Chars da conta vai ter a Storage!
Segue o Script:
Bom é isso acho que está bem explicativo, se alguem poder editar o Script pra mim para que funcione assim ficarei muito grato, Obrigado!
-
lucasvtr1 recebeu reputação de Digoshow em (Resolvido)Editando Talkaction para Adiconar/Remover Storage na Conta.Olha tenho um Script de Storage aqui, Quem sabe com ele você possa remover dos Players:
Add isso em data/Talkactions com nome storage.lua
---Storage Code without Credidts....------ function onSay(cid, words, param) local t = string.explode(param, ",") if(not t[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") return true end local tid = getPlayerByNameWildcard(t[1]) if(not tid or (isPlayerGhost(tid) and getPlayerGhostAccess(tid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[1] .. " not found.") return true end if(not t[3]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, " [" .. t[1] .. " - " .. t[2] .. "] = " .. getPlayerStorageValue(tid, t[2])) else setPlayerStorageValue(tid, t[2], t[3]) end return true end e em Talk actions XML adiciona:
<talkaction log="yes" words="/storage" access="4" event="script" value="storage.lua"/> Para utilizar é so Dizer:
se quiser só ver o storage do player exemplo: 5454
/storage (player name), 5454
se quiser adicionar:
/storage (player name),5454,1
se quiser remover
/storage (player name,5454,-1
Abraços espero ter ajudado
-
lucasvtr1 deu reputação a MaXwEllDeN em Soul System#Introdução
O Sistema é basicamente isso:
Você usa uma pedra de alma em um monstro morto a pouco tempo você aprisiona a alma dele na pedra, e ela pode ser usada para:
Trazer o monstro a vida novamente;
Encantar armas com a alma dos monstros para que elas dêem ataque extra à sua arma;
Usar uma aura que te protege atacando criaturas que te causam perigo!
#Instalação
Primeiro faça o download do sistema e cole na pasta do seu executável.
Pronto, tá instalado.
#Configurações
#1 Aura System
#1.1 Adicionando Nova Soul
souls = { ["dark"] = {effects = {distance = 31, eff = 17}, combat = COMBAT_DEATHDAMAGE}, ["flame"] = {effects = {distance = 3, eff = 15}, combat = COMBAT_FIREDAMAGE}, ["frozen"] = {effects = {distance = 36, eff = 43}, combat = COMBAT_ICEDAMAGE}, ["holy"] = {effects = {distance = 37, eff = 39}, combat = COMBAT_HOLYDAMAGE}, ["electric"] = {effects = {distance = 35, eff = 11}, combat = COMBAT_ENERGYDAMAGE}, }, #1.2 Adicionando Nova Aura souls = { L_Soul.auras = { ["dark"] = {stones_n = 7, damage = {25, 250}, interval = 1200, duration = 120, raio = 4, speed = 150}, ["flame"] = {stones_n = 5, damage = {250, 650}, interval = 500, duration = 60, raio = 7, speed = 75}, ["frozen"] = {stones_n = 2, damage = {150, 350}, interval = 750, duration = 60, raio = 2, speed = 150}, ["electric"] = {stones_n = 5, damage = {150, 350}, interval = 750, duration = 60, raio = 2, speed = 150}, ["holy"] = {stones_n = 0, damage = {150, 350}, interval = 750, duration = 60, raio = 7, speed = 150}, } #2 Reborn System #2.1 Adicionando nova criatura ["Necromancer"] = {chance = 50, type = "dark", summ = { hp = {hpb = 50, maxb = 700}, needSoulPoints = 50, needMana = 0, needHealth = 20, minP = 50, }, enchant = {charges = 100, min = 10, max = 60, attack_speed = 250}, },
#3 Enchanting System
#3.1 Adicionando novo item para encantar
#Vídeo de demonstração do sistema de aura
Aos poucos vou adicionando mais informações sobre como se faz para configurar
-
lucasvtr1 deu reputação a xWhiteWolf em Volatile SpiderlingFala galera do TK, hoje eu venho mais uma vez trazer uma das magias mais incríveis que eu já vi até hoje (sério). A magia original foi feita em outro fórum mas para a versão 10.1... como eu vi que ninguém conseguiu adaptar pra versões inferiores eu decidi criar a minha própria volatile spiderling.
Confesso que no começo eu tive muita dificuldade em achar as funções certas mas depois de tentar ajudar o membro @234567890z no suporte eu tive uma epifania. Sem mais delongas eu vou explicar oque o script faz e em seguida ensinar a colocá-lo no seu server.
• Explicação: A magia foi feita baseada na personagem Elise do jogo League of Legends: você faz uma cria que anda até os oponentes e se explodem causando dano em area e deixando eles envenenados. Aqui tem um gif da magia funcionando
obs: note que esse gif não fui eu que fiz mas ele demonstra exatamente como a magia funciona.
• Instalação: Pra instalá-lo no seu servidor vai ser um pouco complicado pois ele requer diversas modificações... antes de mais nada, coloque essas linhas no seu spells.xml:
<instant name="Volatile Spiderling" words="utevo res tera" lvl="40" mana="20" prem="1" selftarget="1" exhaustion="2000" groups="1,2000" icon="88" needlearn="0" event="script" value="especiais/spiderling.lua"> <vocation id="3"/> <vocation id="7"/> </instant> <instant name="poison explosion" words="poison explosion" lvl="0" mana="0" prem="0" aggressive="1" exhaustion="3000" needlearn="1" event="script" value="especiais/newspider.lua"> </instant> Agora você vai ter que criar os dois arquivos na pasta spells\scripts\especiais.
Em newspider.lua coloque o seguinte:
agora em spiderling.lua coloque o seguinte: Agora feito isso vc vai precisar criar o monstro que usará essa spell.. vá em monster\monsters.xml e adicione a seguinte linha: <monster name="Clone Spider" file="arachnids/newspider.xml"/> agora crie o arquivo data\monsters\arachnids\newspider.xml e adicione o seguinte nele:
Agora eu vou ensinar vocês a editarem... não tem muito oque mudar, apenas se vc quiser alterar os danos da spell vá em newspider.lua e será possível editar os danos do poison e da explosão:
local damageTable = { {4, -3}, {9, -2}, {20, -1} } aqui você muda quantos danos serão e quanto cada um tirará.. no caso serão 4 hits de -3, depois 9 hits de -2 e por fim 20 hits de -1 até o poison parar. Lembrando que esses danos saem de 4 em 4 segundos. Se você quiser que eles sejam mais rápidos é só editar aqui:
addDamageCondition(poisonpowder, t[1], 4000, t[2]) (4000 significa 4 segundos).
Feito isso será possível editar também a area e o dano da explosão respectivamente em: Area:
Dano:
doAreaCombatHealth(cid, 1, getThingPos(cid), area, -1, -30, 20)
Em vermelho temos o dano mínimo, analogamente, em azul, temos o dano máximo.
Em verde é possível editar o efeito da explosão
Só lembrando que as edições que forem feitas no newspider.lua devem ser feitas no spider.lua para que a magia tenha graça.. se não o dano da explosão/poison ao explodir será diferente caso ela morrer antes. Em spiderling.lua vc pode editar a quantidade máxima de crias que um player pode ter... o normal está setado para 2 mas vc pode sentir-se livre pra colocar quantas queira.
local maxsummon = 2 (Só lembre-se que ao explodir uma aranha pode acertar outra então não é muito bom deixar um numero maior que 3);
Se você for daqueles bem chatinhos com a magia você ainda pode editar algumas coisas importantes tais como:
O efeito que sai quando ela explode por morte ou pela spell:
doSendMagicEffect(getThingPos(cid), 16) O tempo em que ela executa a spell, a chance da spell sair naquele tempo e quantos sqm de distancia a criatura alvo deve estar pra aranha se explodir:
<attack name="poison explosion" interval="1000" range="1" chance="50"/> interval = de quantos em quantos segundos ela executa a spell
range = distancia em sqm que o alvo deve estar pra que ela execute a spell
chance = chance de executar a spell a cada interval (nesse caso a cada 1 segundo tem 50% de chance dela soltar a magia)
Você ainda pode editar aqui em vermelho:
o tempo que leva pra criatura executar a magia.. Por padrão eu deixei 2 segundos, ou seja... eu sumono a aranha, ela vai até o alvo e a cada segundo q ela passa grudada no alvo (1 sqm de distancia) ela tem 50% de chance de ativar a spell e ficar parada no lugar durante 2 segundos até explodir. Se você quiser que ela leve menos tempo pra explodir é só baixar o 2000 (em milisegundos).. Se você quiser aumentar o dano e deixar ela parada por mais tempo até explodir pode editar a vontade aumentando os 2000.
• Bom, isso é tudo que dava pra eu explicar... é óbvio que dá pra editar muito mais coisa mas se você não é scripter e não tem muita idéia de como editar eu dei uma ensinada básica doque você está autorizado a mexer. Espero que vocês curtam a spell e deem aquele REP+ pra fortalecer kkkk
Eu não pretendia liberar essa spell visto que ela é extremamente complexa e nenhum servidor tem ela, mas, acho que seria muito babaca da minha parte ficar guardando um script tão bonito hahaha. Qualquer erro ou dúvida postem nos comentários que eu tento ajudar.
ah, mais uma coisa: Os créditos são 90% meus visto que eu fiz praticamente tudo.. 9% é pro cara que fez a magia original (se vcs derem uma procurada vcs vão ver que não tem quase nada a ver com a minha mas os créditos dele são por ele ter me dado a idéia) e 1% pro cara no suporte que me pediu ajuda numa spell do mesmo gênero e me fez correr atrás de uma forma de fazer essa magia pra versões inferiores a TFS 1.0
-
lucasvtr1 deu reputação a xWhiteWolf em New Library v. 1.2Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:
Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.
Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)
Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.
Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS.
EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.
EDIT 2: Duas novas funções adicionas, espero que gostem!
EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
-
lucasvtr1 deu reputação a KekezitoLHP em [SISTEMA] Colisão de MagiasNome: Sistema de Colisão de Magias V. 1.0 Autor: Ramza (Ricardo Ianelli) Versão Testada: TFS 0.3.6PL1 (8.54) "PODERÁ FUNCIONA EM VERSÃO 8.54+ FAÇA O TESTE" Introdução
video:
Funcionamento
Do ponto de vista do jogador:
O jogador usa uma magia, digamos, exori frigo. No mesmo momento, o inimigo usa um exori vis por exemplo. As magias voam, e se colidem no ar. Do ponto de vista do scripter: Toda magia antes de ser lançada, salva um storage value, e checa se o inimigo tem o mesmo storage. Caso tenha, ao invés de mandar a magia, manda os efeitos pra uma posição calculada entre os dois pontos, e um efeito de colisão. Caso o criador queira melhorar ainda a função (pra ficar como na versão 2.0 do sistema), pode-se fazer uma checagem de força pra saber qual das duas 'vence', fazendo com que ela atinja o oponente. Para melhores resultados, magias usando addEvent são mais usadas, por isso usarei um exemplo dessa forma aqui no tutorial. Instalação
Na pasta Data, crie um arquivo chamado colisionLIB.lua. Dentro dele, cole isto:
function checkColision(cid) -- Function by Ramza (Ricardo Ianelli) if getCreatureTarget(cid) ~= 0 then setPlayerStorageValue(cid, 9001, 'casting') local ppos, enemy = getCreaturePosition(cid), getCreatureTarget(cid) local epos = getCreaturePosition(enemy) if getPlayerStorageValue(enemy, 9001) == 'casting' and getCreatureTarget(enemy) == cid then setPlayerStorageValue(enemy, 9001, 'colision') setPlayerStorageValue(cid, 9001, 'colision') if ppos.x > epos.x and ppos.y > epos.y then cpos = {x = ppos.x - ((ppos.x - epos.x) / 2), y = ppos.y - ((ppos.y - epos.y) / 2), z = ppos.z} elseif ppos.x > epos.x and ppos.y < epos.y then cpos = {x = ppos.x - ((ppos.x - epos.x) / 2), y = epos.y - ((epos.y - ppos.y) / 2), z = ppos.z} elseif ppos.x < epos.x and ppos.y < epos.y then cpos = {x = epos.x - ((epos.x - ppos.x) / 2), y = epos.y - ((epos.y - ppos.y) / 2), z = ppos.z} elseif ppos.x < epos.x and ppos.y > epos.y then cpos = {x = epos.x - ((epos.x - ppos.x) / 2), y = ppos.y - ((ppos.y - epos.y) / 2), z = ppos.z} end doSendDistanceShoot(ppos, cpos, CONST_ANI_ENERGY) doSendDistanceShoot(epos, cpos, CONST_ANI_ENERGYBALL) local value = math.random(1, 3) doSendMagicEffect(cpos, 27+value) return true else return false end end end
Agora vamos pegar uma magia bem básica como exemplo para teste. Vamos usar a magia energy strike. Abra o arquivo da magia, estará mais ou menos assim:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Vamos modificar um pouco para o nosso sistema. Deixe-a assim:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) local function spell(cid, var) if getPlayerStorageValue(cid, 9001) ~= 'colision' then doCreatureSay(cid, 'Strike!', TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, 9001, nil) return doCombat(cid, combat, var) end end function onCastSpell(cid, var) checkColision(cid) doCreatureSay(cid, 'Energy...', TALKTYPE_ORANGE_1) addEvent(spell, 2000, cid, var) end
Agora adiciona essa função em todas as magias que você deseja a colisão.
function onCastSpell(cid, var) checkColision(cid) doCreatureSay(cid, 'Energy...', TALKTYPE_ORANGE_1) addEvent(spell, 2000, cid, var) end Hora de testar, a hora mais difícil! Bem, pra testar esse sistema você precisa de um amigo pra te ajudar, ou de ferramentas ilegais e agilidade. Vamos tomar como exemplo caso você fosse com um amigo testar. Simplesmente usem exori vis um no outro, e vejam o que acontece
Comentários
Quem já é mais experiente já deve ter sacado o tanto de possibilidades que isso abre, como fazer com magias mais avançadas, comparar magic level, fazer com que caso o ML de um seja maior que o do outro, ela anule a do inimigo mas a sua ainda acerte, fazer sistemas no estilo 'disputa de kame-hame-has' usando spriters sem ser as do tibia, e muitas outras coisas, só vai depender de você usar a sua CRIATIVIDADE. Esse sistema, apesar de simples, é considerado pra mim um dos meus sistemas mais avançados, pois como dizia o sábio programador: "O verdadeiro gênio não é aquele que usa pilhas, ponteiros, matrizes ou funções complexas, e sim aquele que usa a criatividade." Muita gente ofereceu grana preta nesse sistema já, mas eu postei aqui pra lembrar à todos vocês que o que faz um grande programador não é o quão complexas são as funções que você usa e os codes que você faz, e sim, o quão criativas einovadoras são suas criações.
É isso ai galera, deixo meu abraço pra todos vocês, qualquer dúvida é só me perguntar, e eu quero que vocês lembrem que o melhor code é sempre, de longe, aquele mais criativo, não importa se tenha 3, 100 ou 10.000 linhas. Lembrem-se disso, sempre.
-
lucasvtr1 deu reputação a DeCarvalho em [Sistema][TFS 1.1 1.2][WindowsModal]Crafting AvançadoBem, esse é mais um sistema do RazorBlade, assim como no outro, pedi autorização para estar trazendo para cá. Esse sistema é bem complexo e enorme e, claro, pode ser alterado da maneira que lhe convir.
Espero que quem usar e testar de um rep, pois traduzir, ajeitar o conteúdo, testar para ver se tem erros e reportar demora né.. estou trazendo pois sei que muitos brs não sabem o mínimo de inglês e acho que esses deveriam ao menos agradecer pelo trabalho de disponibilizar aqui.. Enfim.. novamente, Vamos começar
Esse sistema é composto de 3 ferramentas distintas.: Smith(forja de items), Smelt(derretimento de items), tanning (tratar a pele) Caracteristicas
Bem são mais de 2mil linhas de códigos vamos realmente começar?!?! -- ACTIONS Em actions.xml adicione isto
Crie um arquivo scripts/crafting/smith.lua e adicione isso
Crie um arquivo scripts/crafting/smelt.lua e adicione isso
Crie um arquivo scripts/crafting/tan.lua e adicione isso
-- CREATURESCRIPTS Em creaturescripts.xml adicione isso
Crie um arquivo em creaturescripts/scripts/smith.lua e adicione isso
Crie um arquivo em creaturescripts/scripts/smelt.lua e adicione isso
Crie um arquivo em creaturescripts/scripts/tan.lua e adicione isso
Em creaturescripts/scripts/login.lua adicione isso em qualquer area que seja depois da primera sessão de login
e registre os eventos no final
-- SESSÃO DATA
Em global.lua adicione
Crie o arquivo smith.lua e adicione isso
Crie o arquivo smelt.lua e adicione isso
Crie o arquivo tan.lua e adicione isso
Crie o arquivo skills.lua e adicione isso
-- SESSÃO DATA 1
Caso pretenda usar achievement para os sets é necessário adicionar mais 2 linhas ao global.lua
Crie o arquivo achievements.lua e adicione isso
Crie o arquivo sets.lua e adicione isso
-- CONSIDERAÇÕES FINAIS
O sistema foi testado em TFS 1.1 e 1.2 e esta funcionando sem problemas.
Eu fiz testes usando o tfs 1.2 mas não usei o sistema de achievements, o resto todo que testei esta funcionando perfeitamente..
Por favor, antes de qualquer pergunta leia atentamente todas as informações..
Obs.: Curtiu, usou, testou.. da um rep ae.. isso mostra que valeu a pena gastar o tempo procurando algo interessante, pedindo autorização e tudo mais para trazer para cá.. além de não arrancar pedaço..
-
lucasvtr1 deu reputação a buddha em Item Summoner System - Capaz de summonar QUALQUER monstroEsse script faz com que quando você clique em um item, ele sumone um monstro para você, e quando clicar de novo aquele mesmo monstro some. e o bom é que ele funciona com QUALQUER monstro, seja Morgaroth, Abyssador, até Gaz' Haragoth(não sei escrever). E também permite colocar vários items em um só script.
Em actions.xml no TFS 1.0:
<action itemid="IDdoitem" script="Nomedoarquivo.lua"/>
Outros:
<action itemid="IDdoitem" event="script" value="Nomedoarquivo.lua"/>
Infelizmente, eu já deletei meu Tibia e o XAMPP, então não tenho como deixar uma screenshot. Se aqueles, que testaram e gostaram, pudessem deixar uma como agradecimento, seriam muito bem vindos.
Créditos todos meus - mateusak.
-
lucasvtr1 deu reputação a Absolute em [Clean House] Remover casas de quem não logaOlá Galera do TK, venho hoje rapidamente trazer um sistema muito útil e pedido em meu tópico do !eject system: http://www.tibiaking.com/forum/topic/35060-eject-system-expulsar-player-inativo-da-house/
Explicação:
Sabe aqueles players chatos que compram as melhores casas e não logam no servidor e enche a desgrama da casa de item só para os novos players não comprar? Pois é, isto não existirá mais! =D
Este script é apenas um arquivo que você colocará em sua pasta mods e ele executará toda vez que o servidor for reiniciado, ou seja: Quando o servidor ligar ele irá verificar os players que não logam a X dias (configurável) e então expulsa-los da casa movendo seus items para o depot deixando a casa sem dono.
Vamos ao que interessa; Na pasta principal do servidor, onde fica a distro que roda o servidor e tudo mais, entre na pasta MODS e crie um arquivo com o nome de cleanhouses.xml e dentro coloque o seguinte: <?xml version="1.0" encoding="UTF-8"?> <mod name="Cleanhouses" version="1.03" author="nsanee" contact="tibiaking.com" enabled="yes"> <description> v.1.03 - Added 'onlyNonPremium' configurable. Removed modlib, since the script is run once anyway we don't need it loaded at all times. It shouldn't now stop execution when a house is nameless. v.1.02 - now uses only one sql query, removed multiworld configurable since it's not needed anymore v.1.01 - small fixes, optimized query + multiworld support. This mod will clean houses of inactive players and move their items to the depot. config explained: days - If the player hasn't logged in for this number of days his house will be freed. log - true/false, whether to enable logging of which houses have been cleaned. file - path to the log file, where logs will be stored. Ignored if 'log' set to false onlyNonPremium - if set to 'true', the script will clean only the houses of players who don't have any pacc days left. other notes: DO NOT remove doSaveServer() at the end, otherwise if your server happens to crash before the nearest server save you will regret it =) </description> <globalevent name="cleanhouses" type="start" event="buffer"><![CDATA[ local config = { days = 3, log = true, file = getDataDir() .. "/logs/cleanhouses.txt", onlyNonPremium = true } local ns_query =[[ SELECT houses.owner, houses.id as hid, houses.name as house_name ,players.name FROM houses LEFT JOIN players ON players.id=houses.owner LEFT JOIN accounts ON players.account_id=accounts.id WHERE players.lastlogin < (UNIX_TIMESTAMP() - ]] ..config.days.. [[*24*60*60) ]] ..(config.onlyNonPremium and ' AND accounts.premdays=0 ' or '')..[[ AND players.world_id =]] .. getConfigValue("worldId") local house = db.getResult(ns_query) local logs = " :: Houses cleaned:\n\n" if house:getID() ~= -1 then repeat logs = logs .. house:getDataString('house_name') ..", owned by " .. house:getDataString('name') .. "\n" setHouseOwner(house:getDataInt('hid'), 0) until not house:next() house:free() else logs = logs .. "There were no houses to clean." end if config.log then doWriteLogFile(config.file, logs) end addEvent(doSaveServer, 1000) ]]></globalevent> </mod> Pronto, salve e feche.
Toda vez que o servidor iniciar irá expulsar os players que não logam aos dias configuráveis.
Como configurar:
days = 3 * É o número em DIAS que o player terá que ficar sem logar para perder a casa.
Configure apenas isto, o resto aconselho não mexer, caso queira aprimorar o sistema aconselho ser avançado na área para não causar erros no mesmo.
O Mesmo foi testado hoje por mim e está em funcionalidade a todas as versões de TFS.
Créditos:
Absolute
nsanee (otland)
Demais dúvidas deixe-me saber!
Até o próximo