Ir para conteúdo

xWhiteWolf

Héroi
  • Registro em

  • Última visita

Tudo que xWhiteWolf postou

  1. bota o triplo do que tá e deixa no vocations.xml 0.7 pra todas as vocações
  2. Bem, vamos analisar como vc fez esse creaturescript: function onKill(cid, target) Função ao matar (quem matou, quem morreu) Aí vc foi lá e registrou no xml do monstro, ou seja, isso só vai ativar se o monstro te matar. Se queria fazer pra quando ele morrer deveria ter usado onDeath ou onPrepareDeath ou até onStatsChange com algumas checagens pra garantir que aquele era o monstro certo e que o ultimo hit tiraria a vida dele e que quem matou foi um player humano.
  3. eu tinha um global q não upava distance, mesmo problema só q ele travava no 83. A solução foi diminuir no vocations.xml pra 0.7 e aumentar a rate de skills
  4. ja passei ali em cima
  5. aqui no meu servidor 8.54 tá assim: <action fromid="1219" toid="1262" script="other/doors.lua"/> <action fromid="1539" toid="1542" script="other/doors.lua"/> <action fromid="2086" toid="2092" script="other/doors.lua"/> <action fromid="3535" toid="3552" script="other/doors.lua"/> <action fromid="4913" toid="4918" script="other/doors.lua"/> <action fromid="5082" toid="5085" script="other/doors.lua"/> <action fromid="5098" toid="5145" script="other/doors.lua"/> <action fromid="5278" toid="5295" script="other/doors.lua"/> <action fromid="5515" toid="5518" script="other/doors.lua"/> <action fromid="5732" toid="5737" script="other/doors.lua"/> <action fromid="5745" toid="5749" script="other/doors.lua"/> <action fromid="6192" toid="6209" script="other/doors.lua"/> <action fromid="6249" toid="6266" script="other/doors.lua"/> <action fromid="6795" toid="6802" script="other/doors.lua"/> <action fromid="6891" toid="6908" script="other/doors.lua"/> <action fromid="7033" toid="7050" script="other/doors.lua"/> <action fromid="7054" toid="7057" script="other/doors.lua"/> <action fromid="8541" toid="8558" script="other/doors.lua"/> <action fromid="9165" toid="9184" script="other/doors.lua"/> <action fromid="9267" toid="9186" script="other/doors.lua"/> <action fromid="9268" toid="9269" script="other/doors.lua"/> <action itemid="10269" script="other/doors.lua"/> <action itemid="10270" script="other/doors.lua"/> <action itemid="10272" script="other/doors.lua"/> <action itemid="10273" script="other/doors.lua"/> <action itemid="10274" script="other/doors.lua"/> <action itemid="10275" script="other/doors.lua"/> <action itemid="10276" script="other/doors.lua"/> <action itemid="10277" script="other/doors.lua"/> <action itemid="10278" script="other/doors.lua"/> <action itemid="10279" script="other/doors.lua"/> <action itemid="10280" script="other/doors.lua"/> <action itemid="10281" script="other/doors.lua"/> <action itemid="10282" script="other/doors.lua"/> <action itemid="10283" script="other/doors.lua"/> <action itemid="10284" script="other/doors.lua"/> <action itemid="10285" script="other/doors.lua"/> <action itemid="10469" script="other/doors.lua"/> <action itemid="10470" script="other/doors.lua"/> <action itemid="10471" script="other/doors.lua"/> <action itemid="10472" script="other/doors.lua"/> <action itemid="10473" script="other/doors.lua"/> <action itemid="10474" script="other/doors.lua"/> <action itemid="10475" script="other/doors.lua"/> <action itemid="10476" script="other/doors.lua"/> <action itemid="10478" script="other/doors.lua"/> <action itemid="10479" script="other/doors.lua"/> <action itemid="10480" script="other/doors.lua"/> <action itemid="10481" script="other/doors.lua"/> <action itemid="10482" script="other/doors.lua"/> <action itemid="10483" script="other/doors.lua"/> <action itemid="10484" script="other/doors.lua"/> <action itemid="10485" script="other/doors.lua"/>
  6. O problema é que seus itens estão sem enviados à um depot com id correspondente à city porém muito provavelmente seu servidor tem depot global, certo? esse depot global é só todas as citys usarem o mesmo id de depot. Seus itens devem estar num depot com id diferente. Resolver isso é bem complicado pois não sei onde alterar cada coisa, qnd tive esse problema no servidor foi um colega que resolveu.. mas saber oque é já deve dar uma força pra qlqer outro que for tentar te ajudar, boa sorte
  7. Se n me engano esse é o script pra ir direto colocando na actions local function checkStackpos(item, position) position.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE local thing = getThingfromPos(position) position.stackpos = STACKPOS_TOP_FIELD local field = getThingfromPos(position) if(item.uid ~= thing.uid and thing.itemid >= 100 or field.itemid ~= 0) then return FALSE end return TRUE end function onUse(cid, item, fromPosition, itemEx, toPosition) local nuevas = { {closed=10269, open=10270}, {closed=10272, open=10273}, {closed=10274, open=10275}, {closed=10276, open=10277}, {closed=10278, open=10279}, {closed=10280, open=10281}, {closed=10282, open=10283}, {closed=10284, open=10285}, {closed=10469, open=10470}, {closed=10471, open=10472}, {closed=10473, open=10474}, {closed=10475, open=10476}, {closed=10478, open=10479}, {closed=10480, open=10481}, {closed=10482, open=10483}, {closed=10484, open=10485}, } for ia = 1,#nuevas do if (item.itemid == nuevas[ia].closed) then doTransformItem(item.uid, nuevas[ia].open) elseif (item.itemid == nuevas[ia].open) then doTransformItem(item.uid, nuevas[ia].closed) end end if(getItemLevelDoor(item.itemid) > 0) then if(item.actionid > 0 and getPlayerLevel(cid) >= (item.actionid - getItemLevelDoor(item.itemid))) then doTransformItem(item.uid, item.itemid + 1) doTeleportThing(cid, toPosition, TRUE) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.") end return TRUE end if(isInArray(specialDoors, item.itemid) == TRUE) then if(item.actionid ~= 0 and getPlayerStorageValue(cid, item.actionid) ~= -1) then doTransformItem(item.uid, item.itemid + 1) doTeleportThing(cid, toPosition, TRUE) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The door seems to be sealed against unwanted intruders.") end return TRUE end if(isInArray(keys, item.itemid) == TRUE) then if(itemEx.actionid > 0) then if(item.actionid == itemEx.actionid) then if doors[itemEx.itemid] ~= nil then doTransformItem(itemEx.uid, doors[itemEx.itemid]) return TRUE end end doPlayerSendCancel(cid, "The key does not match.") return TRUE end return FALSE end if(isInArray(horizontalOpenDoors, item.itemid) == TRUE and checkStackpos(item, fromPosition) == TRUE) then local newPosition = toPosition newPosition.y = newPosition.y + 1 local doorPosition = fromPosition doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE local doorCreature = getThingfromPos(doorPosition) if(doorCreature.itemid ~= 0) then if(getTilePzInfo(doorPosition) == TRUE and getTilePzInfo(newPosition) == FALSE and doorCreature.uid ~= cid) then doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) else doTeleportThing(doorCreature.uid, newPosition, TRUE) if(isInArray(closingDoors, item.itemid) ~= TRUE) then doTransformItem(item.uid, item.itemid - 1) end end return TRUE end doTransformItem(item.uid, item.itemid - 1) return TRUE end if(isInArray(verticalOpenDoors, item.itemid) == TRUE and checkStackpos(item, fromPosition) == TRUE) then local newPosition = toPosition newPosition.x = newPosition.x + 1 local doorPosition = fromPosition doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE local doorCreature = getThingfromPos(doorPosition) if(doorCreature.itemid ~= 0) then if(getTilePzInfo(doorPosition) == TRUE and getTilePzInfo(newPosition) == FALSE and doorCreature.uid ~= cid) then doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) else doTeleportThing(doorCreature.uid, newPosition, TRUE) if(isInArray(closingDoors, item.itemid) ~= TRUE) then doTransformItem(item.uid, item.itemid - 1) end end return TRUE end doTransformItem(item.uid, item.itemid - 1) return TRUE end if(doors[item.itemid] ~= nil and checkStackpos(item, fromPosition) == TRUE) then if(item.actionid == 0) then doTransformItem(item.uid, doors[item.itemid]) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") end return TRUE end return FALSE end
  8. vc tem q colocar essas duas no lugar de <stage minlevel="651" maxlevel="700" multiplier="300"/> não é garantido funcionar, mas porque vc não testa e nos diz se funciona ou não?
  9. <stage minlevel="651" maxlevel="699" multiplier="300"/> <stage minlevel="700" maxlevel="1000" multiplier="0"/>
  10. se vc clicar na porta e não entrar ela fecha sozinha dps de 1 tempo? Ou ao clicar vc ja anda automaticamente 1 sqm pra frente?? Se não, é um problema em movements q está fechando a porta ao passar por cima e esquecendo de teleportar o player 1 sqm pra frente
  11. xWhiteWolf postou uma resposta no tópico em Suporte Tibia OTServer
    linha 7 aqui é isso daqui doPlayerSetStorageValue(cid, storage, getPlayerStorageValue(cid, storage)+1) se for realmente isso, bota um storage menor que esse q vc colocou ta muito grande e pode dar erro.
  12. xWhiteWolf postou uma resposta no tópico em Playground (Off-topic)
    meu deus que coisa absurda.. a BlackOnyx era um derivado e ela é responsável por você ter hoje em dia Statschange compilado, por exemplo. Acho que vc tá confundindo derivados mal feitos com projetos incríveis como o PDA
  13. vcs querem mudar umas coisas tão nada a ver no server.. huauhahue não faço idéia de onde configura a cor, provavel q seja na source já q essa configuração é em XML
  14. xWhiteWolf postou uma resposta no tópico em Suporte Tibia OTServer
    Bom, vc não disse nada sobre seu server, nao postou o script que vc usa e não nos informou a versão.. assim fica dificil tentar te ajudar mas de qlqer forma vou colar o link do meu sistema de dodge, ele funciona perfeitamente aqui em casa http://www.tibiaking.com/forum/topic/33545-dodge-system-854/
  15. xWhiteWolf postou uma resposta no tópico em Playground (Off-topic)
    @Whiterose grande Summ, um salve pra você amigão. Espero te encontrar por aí em alguma empresa grande no futuro. @Augusto com toda certeza o tempo livre influencia, eu quero escrever muitos tutoriais mas nem sempre consigo arrumar um jeito de ensinar oque eu sei (acabo querendo explicar muito detalhadamente e fica um texto cansativo e disléxico), me considero um professor ruim mas a questão aqui é não ensinar o que sabe, de forma alguma. Não me aventurei pelas áreas que você citou pra poder falar, mas pelo que me parece você contribuiu bastante e ensinou muita gente. A verdade é que me frustra muito alguém me perguntar algo e eu não souber ajudar.. quando eu corro atrás pra arrumar uma solução não consigo achar pois não há gente pra ensinar ou tópicos para que eu consiga aprender sozinho. Em 9 Anos de Open Tibia (2007~2016) ainda tem muita coisa que já deveria ter pelos fóruns e infelizmente não tem.
  16. A duvida que fica é: tá retornando nil porque a função getItemAttribute está bugada ou está retornando nil porque a getPlayerWeapon não está retornando a weapon de fato? Se o problema for a primeira, troque por getItemAttack e se não funcionar não tem como resolver. Se o problema for a segunda existe uma função na New Lib (vc encontra no meu perfil em "About Me") que retorna a arma que vc está utilizando.
  17. xWhiteWolf postou uma resposta no tópico em Playground (Off-topic)
    @ruanmineiro25 o foco do meu texto nem é pra dizer o quanto eu ajudei, até porque teve muitos momentos que eu abandonei o tk. Mas eu fico abismado com isso de o povo que diz que manja não vir criar tópicos aqui pra compartilhar... É muito confortável virar e falar "sou o melhor em X coisa porque sou o único q sabe fazer" mas se essa pessoa ensinasse tudo que ela sabe, certeza que seria superada porque já não estuda e nem corre atrás mais. Eu ensinei muitas pessoas, considero que algumas delas me superaram porque eu fiquei sem correr atrás, sem estudar e principalmente sem testar as coisas que eu desconheço. O próprio zipter foi uma espécie de aluno, ele já tinha conhecimentos básicos mas discutíamos sempre sobre código e isso fez ele melhorar muito. Aí ele continuou, foi atrás de estudar as sources e acredito que hoje ele é muito mais apto à resolver um problema do que eu, porque eu parei. Se eu tivesse continuado a estudar Lua e treinar, talvez nossos conhecimentos, mesmo que diferentes, pudessem se complementar. Ele na source e eu em Lua. O suicide foi um cara q tinha um potencial incrível, foi uma das pessoas q eu mais tinha prazer de ajudar.. era esforçado e entendia muito fácil. O código já tá no DNA dele, infelizmente pra mim mas felizmente pra ele, o cara foi correr atrás do sonho dele e por conta disso ele não tem tanto tempo pra vir aqui e discutir a linguagem. O Danih que decidiu fazer computação, o Caronte que de mapper veio pra scripting (assim como eu) e agora ajuda pra caralho tanto aqui qnt no XT.. são todos exemplos memoráveis de como um conhecimento compartilhado pode influenciar na comunidade. Não estou querendo insinuar q se não fosse por mim eles não seriam quem são, jamais. Longe disso, os caras tem facilidade e se esforçaram pra aprender cada vez mais, eu só ajudei a direcionar e polir algumas pequenas coisas com base no que eu estudava na faculdade. Acredito que todos os nomes citados aqui são potenciais substitutos pra mim quando eu for embora, e pensar nisso me alegra de muitas formas. Se todos tivessem o pensamento nessa linha de raciocínio talvez a comunidade fosse um pouco melhor.
  18. xWhiteWolf postou uma resposta no tópico em Playground (Off-topic)
    Bom gente, odeio jogar a semente da discórdia no tópico de vocês mas eu sou de 2006 e quando eu conheci o mundo de Otserv só haviam dois fóruns sobre isso> a otnet e a otland. Em um deles existia um pequeno grupinho que vendia otservers prontos, no outro existia um pequeno grupinho que fazia código e vendia. Por muito tempo isso fez com que as pessoas, por mais q se esforçassem, não conseguissem ir atrás pra aprender. Você teria que comprar um otserver e em seguida comprar códigos e tentar estudar por eles e pelo lua.org. Com isso, os fóruns encheram de pessoas que se contentavam em fazer scripts simples ou pedidos simples, vide "arrumem minha poção de mana que tá recuperando 37 de vida e deveria recuperar 35". Todos os tópicos eram praticamente iguais pois ninguém sabia criar algo, apenas editar algumas linhas do que já existia. Não tinha listas de funções na net e ninguém da otland iria te falar como a source funcionava. Tudo era muito simples e idiota, as magias consideradas legais eram as que tinham trocentos efeitos e matavam em 1 hit. (Faça uma busca no archieve da otbr pra spells 7.6~7.8 q vc vai ver oque eu to falando.) Toda essa dificuldade facilitava as vendas, vc dá dificuldade pra vender facilidade, porém ela também impedia o progresso visto que a única forma de você aprender era virando amigo de um scripter e pedindo pra ele te ensinar. Foi o meu caso, aprendi com um dos melhores que já conheci: Jovial. Hoje em dia não é muito diferente, as pessoas que manjam mais são as que menos contribuem pois não acham justo dividir o conhecimento com aqueles que não o tem. É aquele velho dilema da meritocracia... porém as pessoas que manjam, em breve vão começar a trabalhar ou desistir dos fóruns e as pessoas novas não foram ensinadas pra continuar o legado. É assim que uma comunidade morre (e com ela o conhecimento). Acredito que é muito fácil vir aqui e culpar os derivados, que é muito fácil chamar algumas crianças que querem montar um server legal mas não fazem idéia de como começar de leechers. Dificil mesmo é admitir que tudo isso é uma desculpa pra ser preguiçoso e não querer compartilhar o que você sabe. Não quero entrar nesse mérito porque muita gente aqui tá mais preocupada em se gabar do que ser bom de fato, mas seria legal ver a própria equipe dando exemplo. Comedinhas é um nome que eu já ouvi falar muito bem, pelo que falam ele é uma espécie de gênio dos otservers e que contribuiu muito pro avanço da nossa comunidade... só que isso a oque? 5 anos atrás? Cadê os tópicos pra ensinar oque ele sabe pra outros darem continuidade ao trabalho dele? Mock, Colex, Nostradamus.. todos fizeram sistemas incríveis mas que são totalmente inúteis hoje em dia por conta da diferença de versões. Oque nós aprendemos com eles? nada. Ok, você pode virar pra mim e falar: "Nossa Lobo, como você é hipócrita.. seus tópicos sobre tutoriais são minoria e você só dá os scripts prontos, que aprendizado você tá deixando?" Bom, eu sempre tento ensinar.. todo script que faço vem acompanhado com um mini tutorial bem explicadinho de porque aquilo funciona e como editar. Eu ensino através dos detalhes e isso é o suficiente pra transformar um leecher num seeder. Pensem diferente. Se o fórum está morrendo a culpa é nossa que não foi capaz de ensinar a nova geração. Abraços do Lobo.
  19. olha, eu não faço a mínima idéia de onde fica os triggers do account manager pra falar com a database, talvez na source porque em lua mesmo eu nunca vi. Oque eu sei é q esse é o problema e a culpa disso é justamente o pessoal ficar querendo alterar coisa na database q não deveria ser alterada, como nome por exemplo. Eu sei q faz parte do seu sistema de vip mas isso abre brechas pra muitos erros.
  20. se não funcionar assim eu lamento mas vc vai ter q achar outra função pra pegar o ataque da arma.. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_DRAWBLOOD) function onGetFormulaValues(cid, level, skill) arma= getPlayerWeapon(cid) darma= getItemAttribute(arma.uid, "attack") print("Darma é: "..darma) local skillsword= getPlayerSkill(cid, 2) local forca= getPlayerStorageValue(cid, 70001) local agilidade= getPlayerStorageValue(cid, 70003) min = -(level*0.25) -(forca*0.5) -(agilidade*0.2) -(skillsword*0.4) -darma max = -(level*0.35) -(forca*0.6) -(agilidade*0.3) -(skillsword*0.8) -darma return min, max end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onUseWeapon(cid, var) return doCombat(cid, combat, var) end
  21. o id da arma que vc tá utilizando é 70000? pelo q parece seu getItemAttribute tá bugada, vc tem as sources do seu servidor? Só por curiosidade, vc usa o crying damson 0.3.6 versão 8.54 do tibia?
  22. vc tem que verificar se já existe um char chamado Diego ou chamado [VIP] Diego antes de poder criar um char com nome Diego. O erro retornado tá te dizendo justamente isso: MYSQL ERROR: Duplicate entry '[VIP] Diego-0' for key 'name' (1062) "Erro no mysql: entrada duplicada '[VIP] Diego' para chave 'nome' Quando você tenta por VIP no Diego, vc tá atualizando a database e deixando dois chars com [VIP] Diego, oque não é permitido.
  23. no primeiro ele não conseguiu achar o item então creio q a forma correta seja a segunda mesmo.. porém na segunda ele não conseguiu retornar o ataque do item por essa função. Agora você vai ter q me ajudar a entender o porquê diso.. Troca o seu script por esse daqui local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_DRAWBLOOD) function onGetFormulaValues(cid, level, skill) local arma= getPlayerWeapon(cid) print(arma.id) print(arma.uid) local darma= getItemAttribute(arma, "attack") local darma2 = getItemAttribute(arma.uid, "attack") print("Darma é: "..darma) print("Darma dois é: "..darma2) local skillsword= getPlayerSkill(cid, 2) local forca= getPlayerStorageValue(cid, 70001) local agilidade= getPlayerStorageValue(cid, 70003) min = -(level*0.25) + -(forca*0.5) + -(agilidade*0.2) + -(skillsword*0.4) + -darma max = -(level*0.35) + -(forca*0.6) + -(agilidade*0.3) + -(skillsword*0.8) + -darma return min, max end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onUseWeapon(cid, var) return doCombat(cid, combat, var) end Repita o teste duas vezes, uma com a arma na mão direita e uma com a arma na mão esquerda. Me manda um print do que aparece no seu console nos dois casos.
  24. Bom, o problema principal é que você fez uma pequena cagadinha no código, como seu próprio server diz: [13/01/2016 16:42:38] [Error - Weapon Interface] [13/01/2016 16:42:38] In a callback: data/weapons/scripts/sword.lua:onGetFormulaValues [13/01/2016 16:42:38] (Unknown script file) [13/01/2016 16:42:38] Description: [13/01/2016 16:42:38] data/weapons/scripts/sword.lua:10: attempt to index local 'item' (a number value) Erro no callback onGetFormulaValues descrição: Linha 10-> tentou indexar uma variável local chamada item (um valor numérico). Linha 10 -> darma= getItemAttribute(item.arma, "attack") pegar o atributo do item cujo uid seja 'item.arma' e o atributo que eu quero é "attack". OK, mas oque é item.arma? Em nenhum momento você definiu oque era item e a arma está definida como local arma= getPlayerWeapon(cid).id arma é um variável que vai armazenar o id da arma. Então nessas linhas aí a única coisa que vc fez foi pedir pro console te retornar item.id (o campo id da tabela item) só que item não é uma tabela (por isso erro de index..) Tá, mas oque é item? A resposta correta seria um grandiosíssimo "NADA", item na vdd está como parâmetro do callback mas essa function o terceiro parâmetro é a skill do player, não o item que ele utiliza. function onGetFormulaValues(cid, level, item) local arma= getPlayerWeapon(cid).id darma= getItemAttribute(item.arma, "attack") O correto seria Se der erro troca arma por arma.uid ali no darma local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_DRAWBLOOD) function onGetFormulaValues(cid, level, skill) local arma= getPlayerWeapon(cid) local darma= getItemAttribute(arma, "attack") local skillsword= getPlayerSkill(cid, 2) local forca= getPlayerStorageValue(cid, 70001) local agilidade= getPlayerStorageValue(cid, 70003) min = -(level*0.25) + -(forca*0.5) + -(agilidade*0.2) + -(skillsword*0.4) + -darma max = -(level*0.35) + -(forca*0.6) + -(agilidade*0.3) + -(skillsword*0.8) + -darma return min, max end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onUseWeapon(cid, var) return doCombat(cid, combat, var) end

Informação Importante

Confirmação de Termo