-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
Olá, Ékstibiano. Isto é feito através da edição dos sprites do jogo, através do arquivo Tibia.spr. Pode constatar que o cliente deles é editado (chamado de cliente próprio), ou seja, eles tem o seu próprio Tibia.spr com sprites que não existem no Tibia normal, daí a razão de haverem animações novas e itens novos.
-
talkaction [ Talkaction ]Talkaction De Compra De Itens.
tópico respondeu ao MatheusGlad de Oneshot em Actions e Talkactions
Gostei do sistema, interessante. Ajuda muito em servidores de jogo rápido, mas, na minha opinião, destrói o RPG do servidor. Sobre a programação, bem limpa e bem desenvolvida. Digno de um bom programador. -
Monstros 8.54 No Meu Server 8.50, Como?
tópico respondeu ao danielprist de Oneshot em Lixeira Pública
Teoricamente impossível, Já que as versões dos servidores 8.50 não sabem que esses "monstros" existem. Tais versões não tem os sprites compilados. É a mesma coisa que querer os itens do update 8.54 em um servidor 8.50. -
http://www.speedyshare.com/files/21284879/monster.rar Monstros 8.54 com loot fiel ao site Tibia.Wikia.
-
O print serve para escrever a mensagem especificada no comando na tela do cmd do seu servidor.
-
Dá sim para substituir os comandos por outro, O problema é que o pessoal que desenvolve o TheForgotten Server, fez alguma coisa errada, e a função que eles colocaram, só retorna valores nulos.
-
- Olá, Sobre a dúvida 2, referente a Refine, os servidores baseados no distro Forgotten Server 0.3.6pl1 não podem rodar esse sistema, porque as funções getItemAttack, getItemDefense, getItemExtraAttack e etc, foram retiradas do sistema, logo se você roda esse script em um servidor baseado nessa distribuição, ocorrerá o não-reconhecimento da função, retornando valores nulos, ocasionando o erro que você passou. Se você quer resetar TODO seu servidor, porque não pegar uma database Sqlite nova, sem contas e sem dados nas houses, e substituir pela velha? Abraços.
-
@editado, 18-maio-2010 Decidi fazer algo mais interativo com vocês, Vocês podem escolher o tema do próximo tutorial da série Scripting, o que vocês gostariam de ver e aprender sobre a linguagem LUA? Fale comigo
-
Bem-vindos, Ékstibianos. Este é um dos tutoriais que explicam os Advanced Systems que eu criei para um projeto de servidor alternativo que não se efetivou. Além de mostrar-lhes o sistema, explicarei cada função usada e como configurar cada magia no seu servidor. 1 - Requisitos Ékstibiano, você irá precisar de: - Uma dose de conhecimento em LUA. - Uma dose de funções. - E... senso de localização... os scripts das magias irão ficar grandes. 2 - O corpo do script Esse é o script mais básico de Spell System que criei, ele permite que a magia Ice Strike possa avançar do nível 1 (básico) ao nível 3 (ótimo) Irei explicar o script em blocos, exatamente abaixo: 3 - Explicações 3.1 - Bloco 1 local combat_lv1 = createCombatObject() setCombatParam(combat_lv1, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat_lv1, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK) local combat_lv2 = createCombatObject() setCombatParam(combat_lv2, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat_lv2, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK) local combat_lv3 = createCombatObject() setCombatParam(combat_lv3, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat_lv3, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK) Este é o bloco do script que irá determinar como é o "rosto" da sua magia, veja que eu criei três variáveis local nomeadas de combat_lv1, combat_lv2 e combat_lv3, o efeito delas é determinado pela função SetCombatParam, e as três tem efeitos idênticos com duas diferenças, uma é o dano e a outra é a área. 3.2 - Bloco 2, Áreas local area_lv1 = createCombatArea({ {3} }) local area_lv2 = createCombatArea({ {1}, {3} }) local area_lv3 = createCombatArea({ {0, 1, 0}, {1, 3, 1} }) setCombatArea(combat_lv1, area_lv1) setCombatArea(combat_lv2, area_lv2) setCombatArea(combat_lv3, area_lv3) Veja no Bloco 2, que eu crei três váriaveis local nomeadas de area_lv1, area_lv2 e area_lv3. Cada uma dessas variáveis, cria uma área pela função createCombatArea, perceba também que as três áreas são diferentes, é o nosso objetivo não, quanto mais nível, mas poder de magia! Ah, e a função setCombarArea é responsável por associar cada área ao seu respectivo combat. Vamos ao Bloco 3, de Danos. 3.3 Bloco 3, Danos. function onGetFormulaValues_lv1(cid, level, maglevel) local magDamage, levelDamage = maglevel, level / 5 return -(magDamage * 1 + levelDamage), -(magDamage * 2 + levelDamage) end function onGetFormulaValues_lv2(cid, level, maglevel) local magDamage, levelDamage = maglevel, level / 5 return -(magDamage * 1.5 + levelDamage), -(magDamage * 3 + levelDamage) end function onGetFormulaValues_lv3(cid, level, maglevel) local magDamage, levelDamage = maglevel, level / 5 return -(magDamage * 2.25 + levelDamage), -(magDamage * 4.5 + levelDamage) end setCombatCallback(combat_lv1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_lv1") setCombatCallback(combat_lv2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_lv2") setCombatCallback(combat_lv3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_lv3") Essa é uma parte complicadinha (hehe), agora não são mais variavéis locais e sim três funções onGetFormulaValues, elas são responsáveis por definir o dano que o jogador irá fazer quando utilizar a magia. A estrutura é a mesma, você pode criar quantos onGetFormulaValues quiser para cada nível de magia, mas deve colocar um sufixo _lvX para evitar erros, onde X é o level que cada função é relacionada. A magia Ice Strike causa dano conforme o level e o maglevel do usuário, as fórmulas de dano tem o prefixo return. Veja abaixo: return -(magDamage * 1 + levelDamage), -(magDamage * 2 + levelDamage) --Ice Strike Nv1, dano 40~60 return -(magDamage * 1.5 + levelDamage), -(magDamage * 3 + levelDamage) --Ice Strike Nv2, dano 30~80 return -(magDamage * 2.25 + levelDamage), -(magDamage * 4.5 + levelDamage) --Ice Strike Nv3, dano 45~110 Cada fórmula de cada função onGetFormulaValues faz danos diferentes. A função setCombatCallback, associa cada onGetFormulaValues ao seu respectivo combat. Ou seja, cada dano ao seu respectivo nível. Agora, vamos, ao último bloco e o mais complicadinho. Bloco 4, Avançando o nível local function onCastSpell1(parameters) doCombat(parameters.cid, combat_lv1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, combat_lv2, parameters.var) end local function onCastSpell3(parameters) doCombat(parameters.cid, combat_lv3, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var} local SPELL_LEVEL_STORAGE = 70000 local SPELL_TRIES_STORAGE = 70001 local spell_level = getPlayerStorageValue(cid, SPELL_LEVEL_STORAGE) local spell_tries = getPlayerStorageValue(cid, SPELL_TRIES_STORAGE) if spell_level == -1 then spell_level = 1 end if spell_level == 1 then addEvent(onCastSpell1, 0, parameters) if spell_tries >= 1 then setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, spell_tries+1) else setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 1) end elseif spell_level == 2 then addEvent(onCastSpell2, 0, parameters) if spell_tries >= 1 then setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, spell_tries+1) else setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 1) end elseif spell_level == 3 then addEvent(onCastSpell3, 0, parameters) end if spell_tries >= ((spell_level)*12) then if spell_level < 3 then setPlayerStorageValue(cid, SPELL_LEVEL_STORAGE, spell_level + 1) setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 0) doPlayerSendTextMessage(cid, 22, "You advanced from level " .. spell_level .. " to level " .. spell_level + 1 .. " in Ice Strike spell") doSendMagicEffect(getCreaturePosition(cid),14) doSendAnimatedText(getCreaturePosition(cid), 'Advanced!', 18) end end return TRUE end Okay, você está saturado de informação se leu até aqui, descanse um pouco, respire e vamos lá: - Observe no Bloco 4, as funções locais onCastSpell1, onCastSpell2 e onCastSpell3, elas são responsáveis para que quando o personagem invocar a magia Ice Strike, ela seja realmente invocada. E há abaixo da última função local, a onCastSpell mais importante, ela que irá nos trazer a sintaxe geral do script de magia. - O código abaixo é responsável por duas coisas, ele irá determinar dois Storages onde serão armazenados os pontos de uso da magia e onde será armazenado o valor do nível da magia. LEMBRE-SE que os Storages que você usar aqui não deverão ser usadas em Quests e cada magia deve ter dois Storages distintos. local SPELL_LEVEL_STORAGE = 70000 local SPELL_TRIES_STORAGE = 70001 local spell_level = getPlayerStorageValue(cid, SPELL_LEVEL_STORAGE) local spell_tries = getPlayerStorageValue(cid, SPELL_TRIES_STORAGE) - Este outro código abaixo é responsável pela invocação da magia conforme o nível da magia que o personagem detêm. if spell_level == -1 then spell_level = 1 end if spell_level == 1 then addEvent(onCastSpell1, 0, parameters) if spell_tries >= 1 then setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, spell_tries+1) else setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 1) end elseif spell_level == 2 then addEvent(onCastSpell2, 0, parameters) if spell_tries >= 1 then setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, spell_tries+1) else setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 1) end elseif spell_level == 3 then addEvent(onCastSpell3, 0, parameters) end Veja que o verificador [if spell_level == -1 then] é necessário, porque todo Storage começa em -1, então se o Storage que você atribuiu para ser responsável pelo nível da magia em questão estiver em -1, então o script mudará seu valor para 1. O verificador [if spell_level == 1 then] faz a função de, SE o nível da magia é 1, invocar a sintaxe do nível 1 e adicionar 1 ponto de uso. O mesmo acontece para os dois outros verificadores [if spell_level == 2 then] e [if spell_level == 3 then], com exceção de quê quando a magia estiver no nível 3, você não ganhará mais pontos de uso. E o último código: if spell_tries >= ((spell_level)*12) then if spell_level < 3 then setPlayerStorageValue(cid, SPELL_LEVEL_STORAGE, spell_level + 1) setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 0) doPlayerSendTextMessage(cid, 22, "You advanced from level " .. spell_level .. " to level " .. spell_level + 1 .. " in Ice Strike spell") doSendMagicEffect(getCreaturePosition(cid),14) doSendAnimatedText(getCreaturePosition(cid), 'Advanced!', 18) end end return TRUE end Querendo ou não esse é o código mais importante do script, ele verifica que quando os pontos de uso forem maiores iguais a 12 vezes o nível atual da magia em questão, e se o nível da magia for menor que 3, eles adicionem +1 no SPELL_LEVEL_STORAGE e zerem o contador de pontos de uso da magia. Mandando uma mensagem de "Sua magia avançou de nível" com um "Advanced!" bonitinho em cor verde. Até mais, te vejo no próximo tutorial de Advanced System.
-
Atualmente não é existente uma função que consiga editar atributos como speed, magic level e defesa contra elementos em tempo real. É possível editar apenas os atributos básicos como attack, defense, armor, name e description.
-
Nome: Items e Movements Descrição: Arquivos Items e Movements totalmente atualizados com todos os itens, desde Creature Products até Equipamentos, de protocolo 8.54. Arquivo Movements também atualizado com todos os atributos dos equipamentos. Comentário: Espero que vocês saibam usufruir destes arquivos que eu mesmo atualizei para o projeto Solscian que não foi efetivado. Download - Items Download - Movements @editado ; havia esquecido os links @editado ; links corrigidos
-
Olá, - Substitua todo o conteúdo do seu arquivo ultimate healing.lua que, provavelmente, estará localizado em data\spells\scripts\healing. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function onGetFormulaValues(cid, level, maglevel) local magTotal, levelTotal = maglevel, level / 4 return (magTotal * A + levelTotal * B), (magTotal * C + levelTotal * D) end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end A - Fator multiplicativo mínimo para magic level. B - Fator multiplicativo mínimo para level. C - Fator multiplicativo máximo para magic level. D - Fator multiplicativo máximo para level. Sendo assim, C terá que ser maior que A, e D maior que B. Quando maior o valor dos fatores, mais healing a magia fará. Até mais,
-
Ou se mapa está "pesado" demais e seu computador não tem a RAM necessária para executá-lo, ou a compilação do executável do servidor foi feita em 32-bit. Se seu mapa ultrapassa os 30 Mb de peso, você terá que ter uma RAM considerável e um processador muito bom para executá-lo.
-
[Arquivado]Quantos Programadores Open/off Tibia Temos Aqui?
tópico respondeu ao noobinhu de Oneshot em Noticias - Arquivo
Quando você se refere Programação OpenTibia, você diz C++, então eu não sei nada. Mas se LUA e XML estão incluídos, nestas duas linguagens, eu me considero de nível Intermediário-Avançado -
Bom, uma vez que você cria um servidor em uma rede compartilhada, e faz uso do Hamachi, quaisquer usuário que esteja na rede virtual que você criou, fará "parte" da rede local do seu computador, seria como eles estivessem no seu computador. Agora, se você não usa o Hamachi, então eu realmente não sei como alguém pode invadir o seu computador.
-
Ué, se você usar o comando /attr da seguinte forma: /attr set name "NOME O nome ficará com espaços, lembrando que a sintaxe acima é normalmente usada em servidores 8.54.
-
Parabéns a todos os selecionados para as vagas de Colaboração. Espero que abram uma vaga para Scripting
-
No arquivo de cada monstro existem essas duas tags: <flag summonable="1"/> <flag illusionable="1"/> 1 é o valor que permite que o monstro seja invocado/"ilusionado". 0 é o valor que não permite que o monstro seja invocado/"ilusionado".
-
<vocation id="9" name="Xennys Sorcerer" description="a Xennys Sorcerer" gaincap="15" gainhp="15" gainmana="60" gainhpticks="1.5" gainhpamount="300000" gainmanaticks="1" gainmanaamount="500000" manamultiplier="1.1" attackspeed="1500" soulmax="300" gainsoulticks="30" fromvoc="1"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/> <skill id="0" multiplier="1.5"/> <skill id="1" multiplier="2.0"/> <skill id="2" multiplier="2.0"/> <skill id="3" multiplier="2.0"/> <skill id="4" multiplier="2.0"/> <skill id="5" multiplier="1.5"/> <skill id="6" multiplier="1.1"/> </vocation> <vocation id="10" name="Xennys Druid" description="a Xennys Druid" gaincap="15" gainhp="15" gainmana="60" gainhpticks="2" gainhpamount="300000" gainmanaticks="1" gainmanaamount="500000" manamultiplier="1.1" attackspeed="1500" soulmax="300" gainsoulticks="30" fromvoc="2"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/> <skill id="0" multiplier="1.5"/> <skill id="1" multiplier="1.8"/> <skill id="2" multiplier="1.8"/> <skill id="3" multiplier="1.8"/> <skill id="4" multiplier="1.8"/> <skill id="5" multiplier="1.5"/> <skill id="6" multiplier="1.1"/> </vocation> <vocation id="11" name="Xennys Paladin" description="a Xennys Paladin" gaincap="25" gainhp="30" gainmana="30" gainhpticks="2" gainhpamount="400000" gainmanaticks="2" gainmanaamount="400000" manamultiplier="1.6" attackspeed="1500" soulmax="300" gainsoulticks="30" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.2" defense="1.0" armor="1.0"/> <skill id="0" multiplier="1.2"/> <skill id="1" multiplier="1.2"/> <skill id="2" multiplier="1.2"/> <skill id="3" multiplier="1.2"/> <skill id="4" multiplier="1.1"/> <skill id="5" multiplier="1.1"/> <skill id="6" multiplier="1.1"/> </vocation> <vocation id="12" name="Xennys Knight" description="a Xennys Knight" gaincap="30" gainhp="35" gainmana="15" gainhpticks="1" gainhpamount="500000" gainmanaticks="2" gainmanaamount="300000" manamultiplier="4.0" attackspeed="1500" soulmax="300" gainsoulticks="30" fromvoc="4"> <formula meleeDamage="1.3" distDamage="1.0" defense="1.5" armor="1.0"/> <skill id="0" multiplier="1.1"/> <skill id="1" multiplier="1.1"/> <skill id="2" multiplier="1.1"/> <skill id="3" multiplier="1.1"/> <skill id="4" multiplier="1.4"/> <skill id="5" multiplier="1.1"/> <skill id="6" multiplier="1.1"/> </vocation> O erro está no valor de fromvoc nas quatro vocações. O fromvoc deveria ser 5 para Xennys Sorcerer, 6 para Xennys Druid, 7 para Xennys Paladin, e 8 para Xennys Knight.
-
Qual a versão do seu distro? Pode postar seu vocations.xml para eu dar uma olhada?
-
Desculpe, Errei algo no script, tente denovo com este, function onSay(cid, words, param) if getPlayerVocation(cid) <= 8 then if doPlayerRemoveMoney(cid, 30000000) == TRUE then setPlayerPromotionLevel(cid, getPlayerPromotionLevel(cid) + 1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce comprou Xennys Promotion!") doSendMagicEffect(getPlayerPosition(cid), 30) else doPlayerSendCancel(cid, "Desculpe, voce nao tem dinheiro para a promotion!") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "Desculpe, voce ja esta promovido") end return TRUE end E se no seu config.lua, existe essa variável com o valor "yes", mude para "no" premiumForPromotion = "no"
-
Adicione isso ao seu movements.xml, localizado em data/movements. <moveevent type="Equip" itemid="2474" slot="head" event="function" value="onEquipItem"/> <moveevent type="DeEquip" itemid="2474" slot="head" event="function" value="onDeEquipItem"/> Antes veja se não existem tags parecidas com o mesmo ID no arquivo, para evitar quaisquer erros. Edição - Área errada, reportado.
-
Olá, Sem querer ser o chato da história, mas se esses mapas não são disponibilizados é porque são mapas próprios, em outras palavras, feito pela equipe do Loucoserv e Heroserv.
-
O ACC Maker que você baixou não é compatível com a versão do seu distro. Tente baixar algum compatível com TFS 0.3.6
-
<action fromid="2086" toid="2092" event="script" value="other/doors.lua"/> Esta tag do seu actions.xml diz tudo. Qualquer ID entre 2086 e 2092 estará registrado nela, por isso que o executável acusa de Item ID duplicado, você está registrando o ID novamente colocando essa tag: <action itemid="2089" script="chave2.lua" />
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.