Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Muito estranho. Você já é o segundo a reportar esse erro. Poderia me dizer qual a revisão do seu The Forgotten Server 0.4?
  2. Não entendi. Você quer um comando que dê para o jogador ver suas próprias skills ou GODs verem as skills de jogadores?
  3. Isso é feito no movements.xml. Por exemplo: <movevent type="Equip" itemid="2492" slot="armor" event="function" value="onEquipItem"> <vocation id="4"/> <vocation id="8" showInDescription="0"/> <vocation id="3"/> <vocation id="7" showInDescription="0"/> </movevent>
  4. Graças ao sistema de formatação de tópicos do XTibia, ele troca símbolos como > para > o que faz com que os scripts deem erros. Já arrumei o erro e retirei a duplicação da parte 2.
  5. Entendo, entendo. E esse creaturescript onStatsChange está registrado onde? Pois acho que já saquei qual é o seu problema... Se você, por ventura, registrou ele no login.lua, está muito claro que a função getCreatureName(cid), no caso, NUNCA vai retornar nomes de monstros e sim o nome do jogador. Desculpe, não vi seu post acima. Faça a postagem do script completo para análise e, de vez em quando, printe as funções para ver o que elas retornam. Veja se ao printar getCreatureName(cid) ela retorna o nome de um monstro.
  6. beddy, Não adianta falar que não pegou? Há algum erro no console? Função que não existe?
  7. skills.lua em data/creaturescripts/scripts function onKill(cid, target) if isPlayer(cid) and isPlayer(target) then doPlayerAddSkill(cid, SKILL_FIST, 1, true) end return true end function onPrepareDeath(cid, deathList) if isPlayer(deathList[1]) then doPlayerAddSkill(cid, SKILL_CLUB, -1, true) end return true end creaturescripts.xml <event type="kill" name="FistSkill" event="script" value="skills.lua"/> <event type="preparedeath" name="ClubSkill" event="script" value="skills.lua"/> login.lua* (data/creaturescripts/scripts) registerCreatureEvent(cid, "FistSkill") registerCreatureEvent(cid, "ClubSkill") Antes de: return true No caso de perder skills, estou fazendo um teste, caso não funcione, farei através de uma query no banco de dados.
  8. Não traz nenhum risco ao servidor, mas como é só um rascunho, não deve estar funcionando perfeitamente. E sim, está certo o modo que você fez de adicionar mais outfits.
  9. Tente isso. doBroadcastMessage("Parabens ".. getCreatureName(cid) ..", está a caminho da ultima sala do templo dos Deuses, e a um passo da imortalidade. Boa Sorte!") Percebe a semelhança com sua tentativa anterior? Abraços.
  10. Não recomendo usar o script acima, pois é só um rascunho que fiz para exemplificar. Mas se quer mesmo assim: 1. Crie um arquivo em data/creaturescripts/scripts com nome attackanimation.lua e adicione o conteúdo do post anterior. 2. Abra o arquivo creaturescripts.xml e adicione a seguinte chave: <event type="attack" name="AttackAnim" event="script" value="attackanimation.lua"/> 3. Abra o arquivo login.lua em data/creaturescripts/scripts e adicione: registerCreatureEvent(cid, "AttackAnim") Antes de: return true
  11. Posso sim, mas como se trata de um sistema não muito simples de se desenvolver, então isso pode demorar.
  12. De: <item id="2148" countmax="10" chance="1"> Para: <item id="2148" countmax="10" chance="1"/> E remova isso: <item id="" countmax="" chance=""/> Abraços.
  13. brunouchihakiller, Para fazer isto, basta usar o creaturescript onAttack(cid, target) juntamente com a função doCreatureSetOutfit(cid, looktype, time). Ficaria mais ou menos assim: function onAttack(cid, target) local attackers = {[53] = 108, [40] = 200} local outfit = getCreatureOutfit(cid) doCreatureSetOutfit(cid, attackers[outfit.lookType], -1) doRemoveCondition(cid, CONDITION_OUTFIT) return true end Abraços.
  14. Lua é uma linguagem de programação do tipo case-sensitive. Isso significa que ao fazer isso: local tabela = { ["demon"] = 1234, } Se digamos a função getCreatureName(cid) retornar a string "Demon", você não poderá acessar tabela["Demon"], que é nulo. Em outras palavras: "demon" diferente de "Demon". Isso acho que sana suas duas dúvidas sobre tabelas e strings como index. No segundo caso, apenas com o uso de file:write() e o certo é fazer isso: local file = io.open(arquivo.txt, "a+") -- abre o arquivo com a permissão de atualização preservando os dados antigos. file:write("blabla")
  15. Caro beddy, Trocar os nomes das coisas em um cliente, creio que só é possível abrindo ele com um Hex Editor ou então com a utilização daquele OTClient (Creio que esse é o nome). Já traduzir as mensagens em geral enviadas pelo sistema, isso só pode ser feito nas sources, precisamente no arquivo player.cpp. char advMsg[60]; sprintf(advMsg, "You advanced from Level %d to Level %d.", prevLevel, level); sendTextMessage(MSG_EVENT_ADVANCE, advMsg); Abração.
  16. Certo, então isso é erro da biblioteca exhaustion do seu servidor. Vou fazer uma pequena "gambiarra". function onSay(cid, words, param, channel) local storage = 6707 local delaytime = 120 local item = {itemid = 2160, count = 1} local a = "data/logs/reports.txt" local f = io.open(a, "a+") if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") end if not doPlayerRemoveItem(cid, item.itemid, item.count) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need ".. item.count .." ".. getItemNameById(item.itemid) ..".") end local exhaust = getPlayerStorageValue(cid, storage) if exhaust < os.time() then setPlayerStorageValue(cid, storage, os.time()+delaytime) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your report has been received successfully!") f:write(""..param.." [x="..getPlayerPosition(cid).x..", y="..getPlayerPosition(cid).y..", z="..getPlayerPosition(cid).z.."].\n\n----------------------------------------------------------\n") f:close() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You must wait " .. getPlayerStorageValue(cid, storage) - os.time() .. " seconds to report.") end return TRUE end
  17. function onSay(cid, words, param, channel) local storage = 6707 local delaytime = 120 local item = {itemid = 2160, count = 1} local a = "data/logs/reports.txt" local f = io.open(a, "a+") if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") end if not doPlayerRemoveItem(cid, item.itemid, item.count) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need ".. item.count .." ".. getItemNameById(item.itemid) ..".") end local exhaust = exhaustion.get(cid, storage) if(not exhaust) then exhaustion.set(cid, storage, delaytime) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your report has been received successfully!") f:write(""..param.." [x="..getPlayerPosition(cid).x..", y="..getPlayerPosition(cid).y..", z="..getPlayerPosition(cid).z.."].\n\n----------------------------------------------------------\n") f:close() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You must wait " .. exhaustion.get(cid, storage) .. " seconds to report.") end return TRUE end Abraços.
  18. Veja se resolve o teu problema: <?xml version="1.0" encoding="UTF-8"?> <vocations> <vocation id="0" name="None" description="none" needpremium="0" gaincap="5" gainhp="5" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="1" manamultiplier="4.0" attackspeed="2000" soulmax="100" gainsoulticks="120" fromvoc="0" attackable="no"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="1" name="Master Sorcerer" description="a master sorcerer" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="150" gainmanaticks="2" gainmanaamount="400" manamultiplier="1.1" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="1"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="2" name="Elder Druid" description="a elder druid" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="150" gainmanaticks="2" gainmanaamount="400" manamultiplier="1.1" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="2"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="3" name="Royal Paladin" description="a royal paladin" needpremium="0" gaincap="20" gainhp="10" gainmana="15" gainhpticks="2" gainhpamount="400" gainmanaticks="3" gainmanaamount="250" manamultiplier="1.4" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.2" club="1.2" sword="1.2" axe="1.2" distance="1.1" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation> <vocation id="4" name="Elite Knight" description="a elite knight" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="2" gainhpamount="420" gainmanaticks="3" gainmanaamount="200" manamultiplier="3.0" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="4"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.1" club="1.1" sword="1.1" axe="1.1" distance="1.4" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation> <vocation id="5" name="Mortal" description="a mortal" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="200" gainmanaticks="2" gainmanaamount="450" manamultiplier="1.1" attackspeed="300" soulmax="200" gainsoulticks="15" lessloss="30" fromvoc="5"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="9" name="Immortal" description="an immortal" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="200" gainmanaticks="2" gainmanaamount="450" manamultiplier="1.1" attackspeed="300" soulmax="200" gainsoulticks="15" lessloss="30" fromvoc="5"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> </vocations>
  19. Como algumas pessoas já pediram um sistema de refino com base no Bronson OT Server, adicionei duas novas opções ao Perfect Refine System com a função de simular não-fielmente o funcionamento do sistema desse servidor. As duas opções são reagent e amountbylevel, no caso, você pode configurar uma ferramenta que precisa de um item secundário para funcionar. Deixei um exemplo base pré-configurado, um Iron Hammer que precisa de uma quantidade variável de iron ores. Um grande abraço.
  20. jokermindrenan, Se eu não me engano, esse é um bug antigo quando o cliente do Tibia foi atualizado para a versão 8.60 e no caso seu items.otb ainda possui propriedades que as runas já não têm mais. Ou seja, você iria precisar editar o items.otb com um OT Item Editor. Há também a possibilidade de que nos IDs de cada runa ainda exista o atributo charges. Isso deve ser retirado no items.xml. Caso isso não funcione, então o problema é interno, nas sources, o que te dá apenas uma opção, caso seu servidor não tenha as sources disponibilizadas: Trocar o executável do servidor. Abraços.
  21. Caro isaque555, Desenvolva essa sua magia Kirin como uma magia normal, vamos pegar como exemplo a magia Energy Strike: 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 Para que seja enviado um efeito no jogador que invocou a magia, basta o uso da função doSendMagicEffect dentro do corpo da função onCastSpell. Ou seja: 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) doSendMagicEffect(getThingPosition(cid), CONST_ME_CLOUDS) return doCombat(cid, combat, var) end No exemplo acima, usei o efeito da Rage of The Skies na posição do jogador invocador e um efeito totalmente diferente, no caso, o efeito da Energy Strike irá aparecer na posição do jogador-alvo.
  22. É um sistema fácil de fazer com um creaturescript onStatsChange e algumas manipulações de strings no nome do equipamento.
  23. Você precisa fazer com que o sistema entenda que essa vocação não é inicial. Para isso, você deve manipular a variável fromvoc e não deletar-la, é preciso colocar um número de uma vocação para que o sistema entenda que a tal vocação é uma promoção de outra vocação. Ou seja se existem duas vocações de nomes, por exemplo, Alchemist e Scientist com IDs iguais a 7 e 8, sendo que a vocação Scientist não pode aparecer no Account Manager. Então você deve fazer isso abaixo: <vocation id="7" name="Alchemist" description="a elder druid" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="150" gainmanaticks="2" gainmanaamount="400" manamultiplier="1.1" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="7"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="8" name="Scientist" description="an Immortal" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="200" gainmanaticks="2" gainmanaamount="450" manamultiplier="1.1" attackspeed="300" soulmax="200" gainsoulticks="15" fromvoc="0" lessloss="30" fromvoc="7"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> Quando você coloca um fromvoc igual ao próprio ID da vocação, ela se torna uma vocação inicial. Quando você coloca um fromvoc diferente do ID da vocação, ela se torna uma promotion
  24. Tente fazer assim no loot do monstro: <item id=2091 chance="100000" actionid="666"/> Creio que funcionará.
  25. Você é fera hein, cara. Achou um problema crítico no sistema. Parabéns e rep+
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...