Ir para conteúdo

.Foxxy

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    .Foxxy recebeu reputação de Magalhaes92 em (Resolvido)[[[ Save Player ]]]]   
    @Sekk e @Vitoxy , achei um script funcional aqui:

    em creaturescripts/scripts crie "saveplayer.lua" e cole isso dentro:

    local save = {}
    function saveRepeat(cid)
    if not isPlayer(cid) then return true end
    doPlayerSave(cid)
    doPlayerSendTextMessage(cid,19, 'Your character\'s progress is saved.')
    doSendMagicEffect(getThingPos(cid), 11)
    save[cid] = addEvent(saveRepeat, math.random(1,1) *60*1000, cid)
    end
    function onLogin(cid)
    save[cid] = addEvent(saveRepeat, math.random(1,1)*60*1000, cid)
    return true
    end
    function onLogout(cid)
    stopEvent(save[cid])
    return true
    end

    em creaturescripts.xml adicione as tag's:
     
    <event type="login" name="savePlayer" event="script" value="savePlayer.lua" />
    <event type="logout" name="savePlayer_L" event="script" value="savePlayer.lua" />
     
    em creaturescripts/scripts/login.lua, cole isso antes do ultimo "return true":
     
    registerCreatureEvent(cid, "savePlayer")
    registerCreatureEvent(cid, "savePlayer_L")

    Funcionando perfeitamente no TFS 0.3.6 - 8.54/8.60

    Obrigado pela ajuda!!! Tmj!
     
  2. Obrigado
    .Foxxy recebeu reputação de Ackerzin em [PEDIDO] Referente ao tfs 0.4 (rev3777) do Fir3element   
    Fala pessoal do TK!

    Acho que esse Post vai ser do interesse de muitos.

    *Vamos ajudar quem ajuda o Tibiaking*

    O @Fir3element com sua paciência, seu conhecimento e sua boa vontade, trouxe para os membros do TibiaKing, acredito eu que seja o melhor tfs 0.4 3777, com os principais bugs
    arrumados e alguns outros que os membros pediram. Fora os extras como "war system" e "cast".

    Eu baixei, testei, mudei meu server pra rodar sem problemas com ela, porém detectei um erro relacionado a função de
    adicionar item aos players, seja por npc, por comando ou sistemas, simplesmente a distro para de reconhecer que o player tem slot vazio após umas 3 ou 4 bps cheias
    (colocadas uma dentro da outra, como são utilizadas para ssa e might ring por ex). Enfim, qual o intuito do "post"? é pedir pra geral que tem conhecimento na área,
    tentar resolver este problema e ajudar o Fir3element  que disse estar sem tempo no momento.
    A unica coisa que ele conseguiu informar foi que pode ser um problema na função "queryadd" no "player.cpp".

    Quando eu achei que era somente comigo, eu fiquei com meu post na base do up e pedindo uma ajuda aqui outra ali, estou há mais de semanas tentando resolver (mas
    ainda não tenho conhecimento pra isso) agora, sei que geral que baixou e está usando, pode estar enfrentando o mesmo problema, tornando o mesmo de interesse para
    muitos.

     
    Obs: Se o Fir3element ou qualquer outro moderador achar incomodo esse pedido e quiser que eu remova, é só falar. Só estou tentando ajudar.

    A distro e a source para os testes estão disponíveis no post dele (se puder postar o link me informem, mas acredito que seja fácil achar no fórum).

    PARA O PESSOAL QUE ESTIVER TENTANDO: Peço para que publiquem o código e o player.cpp arrumado caso achem a solução, será de grande ajuda, além de facilitar quem tem a source com alteração, economizará o tempo que vocês gastariam respondendo perguntas repetitivas no tópico.

    O post é de responsabilidade minha, o Fir3 nunca fugiu de tentar resolver qualquer problema relacionado ao tfs dele, como eu disse, qualquer problema podem apagar ou pedir para que eu apague.

    Obrigado e TMJ!
     
  3. Obrigado
    .Foxxy recebeu reputação de Cat em [PEDIDO] Referente ao tfs 0.4 (rev3777) do Fir3element   
    Fala pessoal do TK!

    Acho que esse Post vai ser do interesse de muitos.

    *Vamos ajudar quem ajuda o Tibiaking*

    O @Fir3element com sua paciência, seu conhecimento e sua boa vontade, trouxe para os membros do TibiaKing, acredito eu que seja o melhor tfs 0.4 3777, com os principais bugs
    arrumados e alguns outros que os membros pediram. Fora os extras como "war system" e "cast".

    Eu baixei, testei, mudei meu server pra rodar sem problemas com ela, porém detectei um erro relacionado a função de
    adicionar item aos players, seja por npc, por comando ou sistemas, simplesmente a distro para de reconhecer que o player tem slot vazio após umas 3 ou 4 bps cheias
    (colocadas uma dentro da outra, como são utilizadas para ssa e might ring por ex). Enfim, qual o intuito do "post"? é pedir pra geral que tem conhecimento na área,
    tentar resolver este problema e ajudar o Fir3element  que disse estar sem tempo no momento.
    A unica coisa que ele conseguiu informar foi que pode ser um problema na função "queryadd" no "player.cpp".

    Quando eu achei que era somente comigo, eu fiquei com meu post na base do up e pedindo uma ajuda aqui outra ali, estou há mais de semanas tentando resolver (mas
    ainda não tenho conhecimento pra isso) agora, sei que geral que baixou e está usando, pode estar enfrentando o mesmo problema, tornando o mesmo de interesse para
    muitos.

     
    Obs: Se o Fir3element ou qualquer outro moderador achar incomodo esse pedido e quiser que eu remova, é só falar. Só estou tentando ajudar.

    A distro e a source para os testes estão disponíveis no post dele (se puder postar o link me informem, mas acredito que seja fácil achar no fórum).

    PARA O PESSOAL QUE ESTIVER TENTANDO: Peço para que publiquem o código e o player.cpp arrumado caso achem a solução, será de grande ajuda, além de facilitar quem tem a source com alteração, economizará o tempo que vocês gastariam respondendo perguntas repetitivas no tópico.

    O post é de responsabilidade minha, o Fir3 nunca fugiu de tentar resolver qualquer problema relacionado ao tfs dele, como eu disse, qualquer problema podem apagar ou pedir para que eu apague.

    Obrigado e TMJ!
     
  4. Curtir
    .Foxxy deu reputação a Cleiton Felipi em (Resolvido)mana e vida ??   
    Bom dia amigo, em player.cpp procure a linha  if (oldLevel != level) {
    e adiciona em baixo dela esse codigo
    health = healthMax;
    mana = manaMax;
     
  5. Curtir
    .Foxxy deu reputação a xWhiteWolf em Magnus Challenger   
    Fala 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.
  6. Curtir
    Reporte qualquer bug encontrado.
     
    - Mudanças:
    * opcode adicionado
    * Monstros andando em cima de corpos
    * War system arrumado
    * Anti-divulgação melhorado
    * Cast system arrumado
    * Crash bugs arrumados
    * Adicionado exhaust ao comprar/vender items
    * Account manager com opção para cidades
    * /ghost stacking arrumado
    * !disband arrumado
    * Erros no linux arrumado
    * Aleta som arrumado
    * Bug nos rings arrumado
    * Adicionado suporte para Visual Studio
    * Remover battle ao entrar em PZ
    * Não pode jogar lixo em casas
    * Salt removido
     
    - Downloads:
    * Distro (x32): https://github.com/Fir3element/binaries/raw/master/x32-windows.zip
    * Distro (x64): https://github.com/Fir3element/binaries/raw/master/x64-windows.zip
    * Requisitos: Microsoft Visual C++ Redistributable Package
    * Source + datapack: https://github.com/Fir3element/3777/archive/refs/heads/main.zip
     
    - Scans:
    * Distro (x32): https://virustotal.com/pt/file/6683a91273b848a39ac21288da9d3abde341436744d6846e35a477c8e7c8f5f7/analysis/1480675335/
    * Distro (x64): https://virustotal.com/pt/file/21028857bb1124f19e0353e7f5775c8f66afc4f87f29df9cf4ab8ca1a046b816/analysis/1480675394/
    * Source + datapack: https://virustotal.com/pt/file/3761b48ee19f3f540d4c4a48c35c73c89a85615876307073494b1dcfed464d36/analysis/1480675473/
  7. Curtir
    function onEquip(cid, item, slot) local cfg = { [128] = 324, [20] = 12, [33] = 5 } --[[ [10] = 51 [looktype current outfit] = looktype new outfit ]] if getTilePzInfo(getPlayerPosition(cid)) then print('pz') doPlayerSendCancel(cid, "Você não pode equipar esse item no PZ.") return end local p = getCreatureOutfit(cid) local looktype = {lookType = cfg[p.lookType], lookHead = p.lookHead, lookBody = p.lookBody, lookLegs = p.lookLegs, lookFeet = p.lookFeet} if cfg[p.lookType] ~= nil then doSetCreatureOutfit(cid, looktype, -1) end return true end function onDeEquip(cid, item, slot) doRemoveCondition(cid, CONDITION_OUTFIT) return true end  
  8. Gostei
    começa assim
     
    <movevent type="DeEquip" itemid="ID" slot="ammo" event="function" value="script_outfit.lua"/> <movevent type="Equip" itemid="ID" slot="ammo" event="function" value="script_outfit.lua"> <vocation id="1"/> -- vocations que pode equipar <vocation id="2"/> -- vocations que pode equipar <vocation id="3"/> -- vocations que pode equipar <vocation id="4"/> -- vocations que pode equipar </movevent>  
    agora script  em movements  crie o arquivo .Lua  chamado script_outfit.lua

     
    --By Cerberus local cfg = { efeito = 51, -- escolha o efeito que ao equipar mostra outfit = 13, -- id do outfit p = getCreatureOutfit(cid), d = getCreaturePosition(cid), } function onEquip(cid, item, slot) local looktype = {lookType = cfg.outfit , lookHead = cfg.p.lookHead, lookBody = cfg.p.lookBody, lookLegs = cfg.p.lookLegs, lookFeet = cfg.p.lookFeet} -- looktype if getTilePzInfo(cfg.d) == false then doSetCreatureOutfit(cid, looktype, -1) doSendMagicEffect(cfg.d,cfg.efeito) -- effect else return doPlayerSendCancel(cid, "Você não pode equipar esse item no PZ.") end return true end   function onDeEquip(cid, item, slot) doRemoveCondition(cid, CONDITION_OUTFIT)  doSendMagicEffect(cfg.d,cfg.efeito) -- effect return true end  
  9. Gostei
    .Foxxy recebeu reputação de guessi em Wand nao ataca   
    Verifique em weapons.xml, se a mesma está associada as devidas vocações, seria a primeira coisa na qual eu olharia.
     
  10. Gostei
    .Foxxy recebeu reputação de davidguimaraesdrum em (Resolvido)[Resolvido] - NPCs Aceitando Outro Gold   
    @davidguimaraesdrum, que bom que deu certo bro! Fico feliz em ajudar! Se possível, marque como melhor resposta para que fique como [RESOLVIDO]. Obrigado!
  11. Gostei
    .Foxxy recebeu reputação de davidguimaraesdrum em (Resolvido)[Resolvido] - NPCs Aceitando Outro Gold   
    Boa Tarde @davidguimaraesdrum , acredito que dê pra fazer sem alterar nada na source, testa ai, mas antes , faça um BACKUP de todos os arquivos que você irá alterar.
     
    No meu otserv eu possuo uma moda que equivale a 1kk (gold nugget), você precisará fazer alguns passos para que o npc aceite ela como novo gold, vamo lá:
     
    OBS: Se você já fez algum desses processos, pode pular, acredito que pra vc só falta adicionar a tag do 4º passo, mas vou deixar completo caso alguém tenha duvida ou até você mesmo.

    1º procure pelo arquivo chamado changegold.lua (provavelmente estará em /data/action/scripts/other), faça um backup desse arquivo, apague tudo de dentro dele e adicione:

    local coins = {
    [ITEM_GOLD_COIN] = {
    to = ITEM_PLATINUM_COIN, effect = TEXTCOLOR_YELLOW
    },
    [ITEM_PLATINUM_COIN] = {
    from = ITEM_GOLD_COIN, to = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_LIGHTBLUE
    },
    [ITEM_CRYSTAL_COIN] = {
    from = ITEM_PLATINUM_COIN, to = 2157, effect = TEXTCOLOR_LIGHTBLUE
    },
    [9971] = {
    from = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_TEAL
    }
    }
    function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then
    return false
    end
    local coin = coins[item.itemid]
    if(not coin) then
    return false
    end
    if(coin.to ~= nil and item.type == ITEMCOUNT_MAX) then
    doChangeTypeItem(item.uid, item.type - item.type)
    doPlayerAddItem(cid, coin.to, 1)
    doSendAnimatedText(fromPosition, "$$$", coins[coin.to].effect)
    elseif(coin.from ~= nil) then
    doChangeTypeItem(item.uid, item.type - 1)
    doPlayerAddItem(cid, coin.from, ITEMCOUNT_MAX)
    doSendAnimatedText(fromPosition, "$$$", coins[coin.from].effect)
    end
    return true
    end
     
    2º vá em /data/action/scripts e crie um arquivo chamado novamoeda.lua e cole isso:

    function onUse(cid, item, frompos, item2, topos)
    if doRemoveItem(item.uid,1) then
    doPlayerSendTextMessage(cid,22,"Voce trocou 1 gold ingot por 1kk.")
    doPlayerAddItem(cid,2160,100)
    end
    end

    3º adicione essa tag em data/action.xml

    <action itemid="9971" script="novamoeda.lua" />

    4º vá em items.xml, procure pelo id 9971 e adicione esta tag:

    <attribute key="worth" value="1000000" />

    ficará assim:

    </item>
        <item id="9971" article="a" name="gold ingot">
                    <attribute key="weight" value="10"/>
                    <attribute key="worth" value="1000000" />
     
    creio que após isso, qualquer npc reconhecerá ela como uma moeda equivalente a 1kk, essa ultima função em item.xml é que indica o valor.

    Se ajudei, REP+ haha
  12. Gostei
    .Foxxy recebeu reputação de marcoatorres em Reset com Look   
    Faça um backup do seu arquivo, troque a tag "doplayersetspecialdescription" por essa e teste!
     
    doPlayerSetSpecialDescription(cid,'\n[Frags: '..getPlayerFrags(cid)..'],\n[Resets: '..math.max(0,(tonumber(getCreatureStorage(thing.uid,378378)) or 0))..']')
     
     
  13. Gostei
    .Foxxy deu reputação a Pedriinz em (Resolvido)Item por Vocação   
    function onUse(cid, item, fromPosition, itemEx, toPosition) local vocation = {5, 6, 7, 8} if not isInArray(vocation, getPlayerVocation(cid)) then doPlayerSendTextMessage(cid, 20, "You cant use this item.") return TRUE end if item.itemid == 10543 then doPlayerSetVocation(cid, getPlayerVocation(cid)+8) doPlayerSendTextMessage(cid, 20, "You are a ".. getPlayerVocationName(cid) ..".") end doSendMagicEffect(fromPosition, CCONST_ME_MAGIC_RED) doRemoveItem(item.uid, 1) return TRUE end try it.
  14. Gostei
    .Foxxy deu reputação a Hunterii em Reset com Look   
    @XandimH Boa tarde amigo, testei o seu script e funcionou perfeitamente, só tive que alterar o número da storage e funcionou.
    Obrigado a todos que ajudaram rep++.

    Pode fechar o tópico.
  15. Gostei
    .Foxxy recebeu reputação de Hunterii em Reset com Look   
    Faça um backup do seu arquivo, troque a tag "doplayersetspecialdescription" por essa e teste!
     
    doPlayerSetSpecialDescription(cid,'\n[Frags: '..getPlayerFrags(cid)..'],\n[Resets: '..math.max(0,(tonumber(getCreatureStorage(thing.uid,378378)) or 0))..']')
     
     
  16. Gostei
    .Foxxy recebeu reputação de Bruxo Ots em (Resolvido)ERRO Talkactions   
    @frank007 show brother! achei que esse comando fosse só por função! REP+

    @sirarcken valeu tbm! Tmj!

    Solução, usei o .lua do frank e a tag do sirarken. Tudo ok!
  17. Gostei
    .Foxxy recebeu reputação de Bruxo Ots em (Resolvido)ERRO Talkactions   
    @frank007 se eu remover vou ficar sem o comando, que é o contrario do que eu preciso.
    @sirarcken o problema não é a tag, até porque o "/addskill" não é um script, é uma função na source, que pelo visto está faltando.
     
    Obrigado mesmo assim!

     
  18. Gostei
    .Foxxy deu reputação a Bruxo Ots em (Resolvido)ERRO Talkactions   
    <talkaction log="yes" words="/addskill" access="5" event="script" value="skill.lua"/> veja se da certo isso.
  19. Gostei
    .Foxxy deu reputação a frank007 em (Resolvido)ERRO Talkactions   
    troque o seu addskill por esse e so renomear para addskill
    skill.lua
  20. Gostei
    .Foxxy deu reputação a xWhiteWolf em Mining System   
    Antes de tudo queria agradecer ao cara do suporte que me pediu pra fazer isso, achei muito legal a idéia. Fala galera do TK, vim trazer um script bem simpleszinho mas que abre um leque de opções de RPG e diversão pro seu OT.. Trata-se do Mining System, um sistema que você pode utilizar a pick normal (ou uma outra pick especial) para minerar a terra e tentar conseguir items que você pode trocar por dinheiro, items ou utilizar para craftar items. São 70 leveis de Mining que vão upando conforme vc minera.
    Enfim, vamos ao script:
    actions\scripts\mining.lua:
    terra = {351,352,353,354,355}  levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [1] = 3976, --- worm [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [15] = 2145, -- Small Diamond  [17] = 2150, -- Small Amethyst [20] = 2147, -- Small Ruby [25] = 2144, -- Black Pearls  [27] = 2143, -- White Pearls [30] = 2157, -- Gold Nuggets [35] = 2156, --- red gem [36] = 2158, -- blue gem  [37] = 2155, -- green gem  [38] = 2153, -- violet gem [39] = 2154, -- yellow gem [40] = 7761, -- small enchanted emerald  [42] = 7759, -- Small Enchanted Sapphiire [45] = 7762, -- Small Enchanted Amethyst [50] = 7760, -- Small Enchanted Ruby [70] = 2177  -- Life Crystal } local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end em terra vc coloca os ids dos chãos em que é possível minerar, levels é o level da skill e o ID do respectivo item que você fica capaz de conseguir após alcançar esse nível. Em outras palavras, no começo vc só consegue minerar skull, no nv 70 vc vai ter a chance de conseguir todos os items anteriores e não só life crystal. O restante das configurações está no meio do script:
    local config = {
    storage = 19333,
    chance = 40, --- chance de achar um item ou não
    k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante)
    experience = 19334
    }
    o storage é onde vai salvar o seu nível
    chance é a chance de pegar um item cada vez que minera.
    k é a constante de level, o nivel 10 precisa de 10*10/k de experiencia para ser alcançado (com k sendo 2 dá 50 de experiencia), ou seja, com 50 picaretadas na terra vc pega nivel 10.
    experience é o storage que fica salvo sua experiencia.
    Bônus: Ao alcançar level 50 você ganha o Mining Helmet como prêmio, ele não faz nada de especial mas é como se fosse um troféu. No meu server tem uma série de troféus que voce pode colecionar e fica como sendo uma conquista épica para os players.
    e no actions.xml:
    <action itemid="2553" script="mining.lua"/> OBS: Sugiro que vcs utilizem uma outra pick pra não dar conflito mas você faz oque quiser.
    PS: Uma fotinha pra vcs verem
    Espero que tenham gostado!  
  21. Gostei
    .Foxxy recebeu reputação de Semideus em (Resolvido)Item que adiciona HP e Mana   
    @Semideus Acredito que seja só colocar esse atributo no item em "items.xml" e depois adicionar um movements com o ID do mesmo.
     
  22. Gostei
    .Foxxy recebeu reputação de Sekk em (Resolvido)[[[ Save Player ]]]]   
    @Sekk e @Vitoxy , achei um script funcional aqui:

    em creaturescripts/scripts crie "saveplayer.lua" e cole isso dentro:

    local save = {}
    function saveRepeat(cid)
    if not isPlayer(cid) then return true end
    doPlayerSave(cid)
    doPlayerSendTextMessage(cid,19, 'Your character\'s progress is saved.')
    doSendMagicEffect(getThingPos(cid), 11)
    save[cid] = addEvent(saveRepeat, math.random(1,1) *60*1000, cid)
    end
    function onLogin(cid)
    save[cid] = addEvent(saveRepeat, math.random(1,1)*60*1000, cid)
    return true
    end
    function onLogout(cid)
    stopEvent(save[cid])
    return true
    end

    em creaturescripts.xml adicione as tag's:
     
    <event type="login" name="savePlayer" event="script" value="savePlayer.lua" />
    <event type="logout" name="savePlayer_L" event="script" value="savePlayer.lua" />
     
    em creaturescripts/scripts/login.lua, cole isso antes do ultimo "return true":
     
    registerCreatureEvent(cid, "savePlayer")
    registerCreatureEvent(cid, "savePlayer_L")

    Funcionando perfeitamente no TFS 0.3.6 - 8.54/8.60

    Obrigado pela ajuda!!! Tmj!
     
  23. Gostei
    .Foxxy deu reputação a Vitoxy em (Resolvido)[[[ Save Player ]]]]   
    Salva o server todo incluindo os players...
     
    Mas existe uma talkaction individual que também faz isso, entretando cada player tem que se salvar sozinho.
     
    talkactions/scripts/ save.lua
    function onSay(cid, words, param, channel) local config = { s = 11548, -- n mexa exhau = 30 -- tempo em seegundos para salvar denovo } if (getPlayerStorageValue(cid, config.s) <= os.time()) then doPlayerSave(cid) setPlayerStorageValue(cid,config.s,os.time()+config.exhau) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Seu Personagem foi salvo com sucesso!!.") else doPlayerSendCancel(cid, "Você tem que esperar " .. config.exhau .. " segundos para salvar novamente.") end return TRUE end  
    talkactions.XML
    <talkaction words="!save" event="script" value="save.lua"/> @XandimH
  24. Gostei
    .Foxxy deu reputação a MySticaL em [0.3.6] Função doPlayerOpenChannel   
    EDITADO REMOVIDO A VERSÃO 0.4 QUE CONTIA!
    SE QUISER A VERSÃO 0.4 SÓ VER NO PERFIL DO ALEXY.
     
    Oi, vim trazer a função doPlayerOpenChannel para tfs 0.3.6
    Essa função nada mais é que quando o player loga abre os chat selecionado no login.lua automaticamente
     
    Essa função é para 0.3.6
    Versões testada: 8.54
     
    Vamos ao código
    em LuaScript.cpp
     
    Procure:
    //getChannelUsers(channelId) lua_register(m_luaState, "getChannelUsers", LuaScriptInterface::luaGetChannelUsers); Adicione em baixo:
    //doPlayerOpenChannel(cid, channelId) lua_register(m_luaState, "doPlayerOpenChannel", LuaScriptInterface::luaDoPlayerOpenChannel); Continuando procure:
    int32_t LuaScriptInterface::internalGetPlayerInfo(lua_State* L, PlayerInfo_t info) Acima adicione:
    int32_t LuaScriptInterface::luaDoPlayerOpenChannel(lua_State* L) { //doPlayerOpenChannel(cid, channelId) uint32_t channelId = popNumber(L); uint32_t cid = popNumber(L); ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(cid); if(player) lua_pushnumber(L, g_game.playerOpenChannel(cid, channelId) ? true : false); else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushnumber(L, false); } return 1; } Agora em LuaScript.h
    Procure por:
    static int32_t luaGetChannelUsers(lua_State* L); abaixo adicione:
    static int32_t luaDoPlayerOpenChannel(lua_State* L); Agora em data/creaturescripts/scripts/login.lua
    Antes do último
    return true Adicione:
    doPlayerOpenChannel(cid, 7) -- 7 é o número do channel para ver é em data/xml/channels.xml  
    Rep não cai o dedo
  25. Gostei
    .Foxxy deu reputação a Absolute em [Busque a cabeça] Mandato de morte! SCRIPT!   
    Fala galera do TK, trago hoje a vocês um sistema chamado Bounty Hunters, porém traduzido e pouco modificado.
     
    Como funciona?
    O Player irá executar !hunt, VALOR,NICK
    Com este comando ele estará oferecendo uma recompensa para que matar o jogador de NICK que ele colocou.
    Ao player que dar o golpe final no jogador huntado receberá automaticamente o prêmio em sua backpack (Oferecido pelo solicitante do hunted)
     
     

     
     
     
    Sem mimimi vamos ao que interessa:
     
    Em data/talkactions/scripts crie um arquivo com o nome de busque.lua e dentro adicione o conteúdo:
    function onSay(cid, words, param) if(param == "") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BUSQUE A CABEÇA] Use: \"!busque [prize],[nick]\" Exemplo de prêmio 1(k).") return TRUE end local t = string.explode(param, ",") if(not t[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BUSQUE A CABEÇA] Use: \"!busque [prize],[nick]\" Exemplo de prêmio 1(k).") return TRUE end local sp_id = getPlayerGUIDByName(t[2]) if sp_id == nil then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BUSQUE A CABEÇA] Este player não existe") return TRUE end local result_plr = db.getResult("SELECT * FROM `busque_cabeca` WHERE `sp_id` = "..sp_id.." AND `killed` = 0;") if(result_plr:getID() ~= -1) then is = tonumber(result_plr:getDataInt("sp_id")) result_plr:free() else is = 0 end prize = tonumber(t[1]) if(prize == nil or prize < 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BUSQUE A CABEÇA] Use: \"!busque [prize],[nick]\" Exemplo de prêmio 1(k) return TRUE end if(prize >= 100000000000000000000) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BUSQUE A CABEÇA] Desculpe, você digitou um número muito grande") return TRUE end if is ~= 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BUSQUE A CABEÇA] Este player já está sob mandato de morte.") return TRUE end if doPlayerRemoveMoney(cid, prize*1000) == TRUE then db.executeQuery("INSERT INTO `busque_cabeca` VALUES (NULL,"..getPlayerGUID(cid)..","..sp_id..",0," .. os.time() .. ","..prize..",0,0);") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BUSQUE A CABEÇA] O Player foi adicionado na lista de morte!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BUSQUE A CABEÇA] Você não tem dinheiro suficiente para oferecer a recompensa nessa cabeça!") end return 1 end Em data/talkactions/talkactions.xml adicione a seguinte linha:
    <talkaction access="0" log="no" filter="word" words="!busque" script="busque.lua" /> Agora em data/creaturescripts/scripts crie um arquivo com o nome busque-kill.lua e adicione:
    function onKill(cid, target) if isPlayer(target) == TRUE then ---- BOUNTY HUNTERS START ----- pid = cid pid2 = getPlayerGUID(target) local result_plr = db.getResult("SELECT * FROM `busque_cabeca` WHERE `sp_id` = "..pid2.." AND `killed` = 0;") if(result_plr:getID() ~= -1) then prize = tonumber(result_plr:getDataInt("prize")) bid = tonumber(result_plr:getDataInt("id")) result_plr:free() else prize = 0 bid = 0 end if (bid ~= 0 and prize ~= 0 and not(getTileInfo(getCreaturePosition(cid)).pvp)) then db.executeQuery("UPDATE `busque_cabeca` SET `killed` = 1, `k_id`="..getPlayerGUID(cid)..", `kill_time` = " .. os.time() .. " WHERE `id` = "..bid..";") doPlayerAddMoney(cid,prize*1000) doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,'[BUSQUE A CABEÇA] Você matou um jogador que estava em pena de morte, receba sua recompensa!') end ---- BOUNTY HUNTERS END ----- end return TRUE end Em data/creaturescripts/creaturescripts.xml adicione a seguinte linha:
    <event type="kill" name="Busque" script="busque-kill.lua"/> Agora ainda na pasta creaturescripts/scripts abra o seu arquivo login.lua e abaixo de registerCreatureEvent(cid, "PlayerDeath") adicione:
    registerCreatureEvent(cid, "Busque") Agora pra finalizar, vá no seu PHPMYADMIN/SQL e execute a seguinte query:
    CREATE TABLE IF NOT EXISTS `busque-cabeca` ( `id` int(11) NOT NULL auto_increment, `fp_id` int(11) NOT NULL, `sp_id` int(11) NOT NULL, `k_id` int(11) NOT NULL, `added` int(15) NOT NULL, `prize` bigint(20) NOT NULL, `killed` int(11) NOT NULL, `kill_time` int(15) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;  
    Caso possua site e queira colocar a página, segue a página do gesior, coloque em www/
    <?php @mysql_connect("localhost","user","password"); @mysql_select_db("database"); $main_content .= '<P ALIGN=CENTER> <br> <FONT SIZE=5 COLOR=#CFF00C> Como usar... </FONT> <br> <br> <FONT SIZE=2 COLOR=#CFF00C> * !hunt [prize],[nick] : <FONT SIZE=1 COLOR=#FCC33F> Exemplo de HUNT:<br> Digite: !hunt 100,Absolute </FONT><br> </FONT> </P> <br> <br> <center> <h1> Bounty Hunters </h1> </center> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> <TR BGCOLOR="#505050"> <TD CLASS=white width=30%> <center><B>Encomendado</B></center> </TD> <TD CLASS=white width=30%> <center><B>Valor do Prêmio</B></center> </TD> <TD CLASS=white width=30%> <center><B>Sacrificado</B></center> </TD> <TD CLASS=white width=10%> <center><B>Morto Por</B></center> </TD> </TR>'; $inv = @mysql_query("SELECT * FROM `busque_cabeca` ORDER BY `added` DESC"); $num = 0; $color=$config['site']['darkborder']; while($tab = @mysql_fetch_array($inv)){ if($num%2 == 0){$color=$config['site']['darkborder'];}else{$color=$config['site']['lightborder'];} $pid = $tab['fp_id']; $sid = $tab['sp_id']; $kid = $tab['k_id']; $killed = $tab['killed']; $prize = $tab['prize']*1000; if($killed == 0){ $kill = '<font color="red">Ninguém Ainda!</font>'; }else{ $k = @mysql_query("SELECT * FROM `players` WHERE `id` = ".$kid.""); $k1 = @mysql_fetch_array($k); $kill_name = $k1['name']; $kill = '<a href="index.php?subtopic=characters&name='.$kill_name.'">'.$kill_name.'</a>'; } $f = @mysql_query("SELECT * FROM `players` WHERE `id` = ".$pid.""); $f1 = @mysql_fetch_array($f); $s = @mysql_query("SELECT * FROM `players` WHERE `id` = ".$sid.""); $s1 = @mysql_fetch_array($s); $fn = $f1['name']; $sn = $s1['name']; $main_content .= ' <TR BGCOLOR="'.$color.'"> <TD> <center> <b> <a href="index.php?subtopic=characters&name='.$fn.'">'.$fn.'</a> </b> </center> </TD> <TD> <center> <b> '.$prize.' gp </b> </center> </TD> <TD> <center> <b> <a href="index.php?subtopic=characters&name='.$sn.'">'.$sn.'</a> </b> </center> </TD> <TD> <center> <b> '.$kill.' </b> </center> </TD> </TR>'; $num++; } if($num == 0){ $main_content.='<TR BGCOLOR="'.$color.'"> <TD colspan=4> <center> No momento não há cabeças para busca. </center> </TD> </TR>'; } $main_content .='</TABLE><div align="right">Copyright &copy; <a href="http://www.tibiaking.com/forum/user/116608-absolute/">Absolute on TibiaKing</a>.</div>'; ?> Aqui:
    @mysql_connect("localhost","user","password"); @mysql_select_db("database");  Em user coloque o seu usuário phpmyadmin e em password a senha.
    Em database o nome do seu banco de dados.
     
     
     
    Pós isso, abra seu index.php e procure por: 
    case "guilds"; $topic = "Guilds"; $subtopic = "guilds"; include("guilds.php"); break; Após o break; Adicione:
    case "busque-cabeca"; $topic = "Busque a Cabeca"; $subtopic = "characters"; include("busque-cabeca.php"); break; Depois vá em layouts/tibiacom/layout.php e procure por:
    <a href='index.php?subtopic=guilds'> <div id='submenu_guilds' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_guilds' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Guilds</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> Logo abaixo adicione:
    <a href='index.php?subtopic=busque-cabeca'> <div id='submenu_bounty' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_biunty' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color=red>Busque a Cabeca!</font></div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> Pronto, tudo perfeito!
     
     
     
     
    Créditos para o autor base masteuszx.
    Absolute.
     

     
     
    Qualquer dúvida publique no tópico, será bem legal ver esse sistema nos vossos servidores
     
     
     
    Até o próximo sisteminha.
     
    Absolute.

Informação Importante

Confirmação de Termo