Ir para conteúdo

Bagon

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    Bagon deu reputação a WooX em Algumas funções Lua   
    Biblioteca de funções Lua
     
    Eu me recordo que alguns anos atrás quando iniciei meus estudos em Lua, a biblioteca de funções postada pelo @xWhiteWolf me ajudou muito com a escrita de alguns scripts, me fez economizar tempo e algumas linhas de código. Ter uma biblioteca de funções uteis é uma mão na roda para qualquer desenvolvedor pois poupa tempo que teria de ser gasto desenvolvendo algo que algum outro programador provavelmente já fez.
     
    Pensando nisso, hoje eu decidi trazer algumas funções Lua, tenho certeza que poderá ser útil pra alguém algum dia. Algumas dessas funções foram feitas por mim, outras por amigos meus e algumas eu já nem lembro mais onde encontrei. Irei postar aqui o conteúdo desta biblioteca porem ela também estará no final do tópico como anexo. As funções que me recordo a origem estará com os créditos do autor.
     
    Lib
     
    Explicação das funções:
     
    Por enquanto é isso... pretendo atualizar este tópico sempre que achar necessidade de escrever algo novo ou encontrar algo que possa ser útil a biblioteca.
     
    090-woox_functions.lua
  2. Gostei
    Bagon deu reputação a FlavioHulk em (Resolvido)ERRO AO REMOVER ITEM   
    local config = { {chance = {from = 0, to = 30.5}, itemId = 123, count = 2}, {chance = {from = 30.5, to = 60}, itemId = 123, count = 2}, {chance = {from = 60, to = 100}, itemId = 123, count = 2}, } function onUse(cid, item) if getPlayerStorageValue(cid, STORAGE) > 0 then doRemoveItem(item.uid, 1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já recebeu seu prêmio.") return false end local chance = math.random(0, 10000) / 100 for i = 1, #config do local reward = config[i] if chance >= reward.chance.from and chance < reward.chance.to then doPlayerAddItem(cid, reward.itemId, reward.count) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você encontrou ".. reward.count .." ".. reward.itemId .. ".") setPlayerStorageValue(cid, STORAGE, 1) doSendMagicEffect(getThingPos(cid), 13) doRemoveItem(item.uid, 1) end end return true end  
  3. Curtir
    Bagon recebeu reputação de mullino em (Resolvido)Ajuda Otx Trava no save   
    Posta o script save.lua em globalevents, a tag .xml também..
  4. Curtir
    Bagon recebeu reputação de mullino em Erro Script Ajuda   
    Creio que esse movement te ajudaria.. Quando o player passar no tile que tenha a actionid será teletransportado aleatoriamente em umas dessas posições
    <movevent type="StepIn" actionid="6588" event="script" value="SCRIPT.lua"/> local pos = { {x = 1911, y = 1007, z = 7}, {x = 1912, y = 1008, z = 7}, {x = 1911, y = 1009, z = 7}, {x = 1910, y = 1008, z = 7}, } function onStepIn(cid) doTeleportThing(cid, pos[math.random(#pos)]) return true end
  5. Curtir
    Bagon deu reputação a Cat em Mercado no TK e muito mais!   
    Vocês estão perdendo tempo, publiquei essa semana minha última contribuição aqui no tk. 
     
     
  6. Obrigado
    Bagon recebeu reputação de Cat em Mercado no TK e muito mais!   
    Eu como EX (por conta da mudança) membro do TK venho apresentar minha insatisfação.
     
    Vendo a comercialização de script no tibiaking é TOTALMENTE AO CONTRARIO da proposta submetida pelo forum a anos, desde que acompanho o fórum vejo os admnistradores informarem que são totalmente contra a venda de script e agora estão com essas ideias "NOVAS".
     
    Ta, blz fizeram um mercado dentro do fórum.
    1: Quem me garante que ao comprar um script de qualquer membro ele estará 100% funcional e se vou ter um suporte adequado? 
    2: Oq está a venda tenho como pegar em outro fórum que é GRATIS e alem de tudo concorencia de vocês que possivelmente adoraram essas mudanças!
    3:Possivelmente, haverá pessoas trocando autoria de script e trazendo para o fórum, isso é certo ?
     
     
    Em fim, ha muita questões, espero que voltem a atras e parem de ser intolerantes e pensarem em si mesmo, pois pelo oq entendi agora sim vcs irao trabalhar para trazer conteúdo para o forum já que vao ser beneficiados sendo que de uns tempos pra cá como ja foi dito a cima, NÃO TEM OU QUASE NÃO HÁ CONTEUDO POSTADO PELA ADMINISTRAÇÕES SOMENTE MUDANÇA NA PLATAFORMA.
     
    Estou me retirando da comunidade, Boa Sorte.
     
     
    PS: SE QUER AJUDAR A COMUNIDADE A DESENVOLVER SCRIPT OU SISTEMA, ENSINE OS MESMO! 
  7. Curtir
    Bagon deu reputação a antharaz em [AJUDA/EXPLIQUEM] Dificuldade em meu script   
    @Noninhouh @Bagon 
     
    Vamos lá... irei explicar com um diálogo...
     
    Jovem gafanhoto: Qual a diferença do onDeath e o onPrepareDeath?
     
    Tio Antha: Como o próprio nome já diz, um ocorre somente quando ele morre (o onDeath) e o outro ocorre quando ele se prepara para morrer (o onPrepareDeath)
     
    Jovem gafanhoto: Mas tio Anta, então quando o player morre roda somente o script death?
     
    Tio Antha: NEGATIVO, antes do player morrer o servidor executa o script do prepareDeath pois eh quando se prepara para morrer e depois se executa o script death.
     
    Jovem gafanhoto: Nooossa tio Anta, então é uma idiotice os desenvolvedores fazerem as duas functions já que as duas só vão ser executadas quando eles morrerem né?
     
    Tio Antha: NEGATIVO jovem gafanhoto, há casos em que o player "se prepara para morrer" porém ele não morre é executado o script referente ao prepareDeath .
     
    Jovem gafanhoto: Que mentira seu gorducho!! Se for verdade, me dê um exemplo!!
     
    Tio Antha: Simples, em arenas pvps, onde se coloca tile pvp pelo map editor, quando o player "morre" na arena, ele não chega a morrer, pois não perde nada, nem fica corpo e blablabla... logo neste caso por exemplo, será executado SOMENTE o creatureevent correspondente ao prepareDeath e nenhum correspondente ao death iria ser executado.
     
    Jovem gafanhoto: Hmmm, entendi... dessa vez passa, mas na próxima te pego.
     

     
     
    Espero que tenham entendido...
  8. Curtir
    Bagon deu reputação a Noninhouh em [AJUDA/EXPLIQUEM] Dificuldade em meu script   
    Bom, vou falar uma forma, mas não sei se seria a melhor de fazer esse evento.
    Primeiramente eu colocaria um:
     (usará para começar a contar as mortes).
    E isso:
    addEvent(setGlobalStorageValue, 15 * 60 * 1000, storage, -1) addEvent(setGlobalStorageValue, 15 * 60 * 1000, globalStorageTeamRed, -1) addEvent(setGlobalStorageValue, 15 * 60 * 1000, globalStorageTeamBlue, -1) (usará para encerrar a contagem)
     
    Depois eu criaria um arquivo com a função onDeath(cid, corpse, deathList) no creaturescripts.xml para adicionar a contagem. Nele você colocaria algo similar a isso:
     
    Sei que foi uma explicação bem ruim, mas se você tiver um conhecimento básico de lua acho que entenderá.
  9. Curtir
    Bagon deu reputação a xWhiteWolf em Callbacks de creaturescripts   
    Fala galera do TK, hoje eu vim trazer pra vocês uma coisa que se perdeu em todos esses anos de OT e que é uma das coisas mais importantes prum scripter intermediário/avançado. São as explicações dos respectivos callbacks de creaturescripts. Espero que ajude bastante gente

    Créditos: 90% Zonnebloem (um gringo ai que postou isso das sources) e 10% pra mim por completar oque ele não tinha escrito e arrumado umas coisas que ele escreveu errado.
     
        ____________________________     CREATURE EVENTS TIPOS:  _________________

    TFS 0.2
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="think"     function onThink(cid, interval)   type="kill"     function onKill(cid, target)   type="death"     function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)   type="preparedeath"     function onPrepareDeath(cid, killer) TFS 0.3/0.4
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="think"     function onThink(cid, interval)   type="kill"     function onKill(cid, target, lastHit)   type="death"     function onDeath(cid, corpse, deathList)   type="preparedeath"     function onPrepareDeath(cid, deathList)   type="statschange"     function onStatsChange(cid, attacker, type, combat, value)   type="combat"     function onCombat(cid, target)   type="target"     function onTarget(cid, target)   type="look"     function onLook(cid, thing, position, lookDistance)   type="textedit"     function onTextEdit(cid, item, newText)   type="outfit"     function onOutfit(cid, old, current)   type="push"     function onPush(cid, target)   type="follow"     function onFollow(cid, target)   type="attack"     function onAttack(cid, target)   type="areacombat"     function onAreaCombat(cid, tileItem, tilePosition, isAggressive)   type="cast"     function onCast(cid, target)   type="direction"     function onDirection(cid, old, current)   type="reportbug"     function onReportBug(cid, comment)   type="sendmail"     function onSendMail(cid, receiver, item, openBox)   type="receivemail"     function onReceiveMail(cid, sender, item, openBox)   type="traderequest"     function onTradeRequest(cid, target, item)   type="tradeaccept"     function onTradeAccept(cid, target, item, targetItem)   type="joinchannel"     function onJoinChannel(cid, channel, users)   type="leavechannel"     function onLeaveChannel(cid, channel, users) TFS 1.0
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="think"     function onThink(cid, interval)   type="preparedeath"     function onPrepareDeath(cid, killer)   type="death"     function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)   type="kill"     function onKill(cid, target)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="modalwindow"     function onModalWindow(cid, modalWindowId, buttonId, choiceId)   type="textedit"     function onTextEdit(cid, item, text)   type="changehealth"     function onChangeHealth(cid, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType)   type="changemana"     function onChangeMana(cid, attacker, manaChange)   type="extendedopcode"     function onExtendedOpcode(cid, opcode, buffer)     ____________________________     INFORMAÇÃO SOBRE OS TIPOS:  _________________
    antes de tudo tenha em mente que os tipos só serão executados no player ou monstro em que eles forem registrados; Registrar no login.lua vai fazer com que ele seja executado em todos os players assim q eles logarem. Se deve ser executado somente por alguns monstros, registre no monstro em questão no xml dele.

    login

    Quando é executada:
    - Quando um player loga

    Parametros:
    - cid = creatureid do player que logou

    quando está return false:
    - nada

    registra creature event:
    - não

    ~~~~

    logout

    Quando é executada:
    - quando um player desloga pelo logout do próprio cliente. Não acontece se o player morrer, for disconectado ou xlogs

    Parametros:
    - cid = creatureid do player que deslogou

    quando está return false:
    - Player não vai conseguir deslogar

    registra creature event:
    - não

    ~~~~

    advance

    Quando é executado:
    - Toda vez que um player avançar de level, magic level ou qualquer outra skill

    Parametros:
    - cid = creature id do player que avançou
    - skill = tipo da skill que o player avançou vide tabela abaixo (note que vc pode utilizar tanto o nome SKILL_FIST quanto o numero 0)
    SKILL_FIST = 0 SKILL_CLUB = 1 SKILL_SWORD = 2 SKILL_AXE = 3 SKILL_DISTANCE = 4 SKILL_SHIELD = 5 SKILL_FISHING = 6 SKILL__MAGLEVEL = 7 SKILL__LEVEL = 8 - oldlevel = level antes do player avançar
    - newlevel = o novo level após avançar

    quando está return false:
    - ele não vai avançar o nível

    Registra creature event:
    - sim (isso significa que vc pode colocar pra ele registrar um outro creatureevent dentro desse script após alcançar X level)

    ~~~~

    think

    Quando é executada:
    - Pelo tempo

    Parametros:
    - cid = creatureid do monstro ou player
    - interval = intervalo entre cada checagem OU em que intervalo deve ser executada, 500 é 0.5 segundo.

    quando está return false:
    - nada

    Registra creature event:
    - sim

    ~~~~

    kill

    Quando é executada:
    - Ao matar um player/monstro

    Parametros:
    - cid = creatureid do player ou do monstro que mata
    - target = creatureid do player ou monstro que é morto

    quando está return false:
    - O target não morrerá, ele ficará com 0 de vida e a barra sumirá para os inimigos.Ele precisará se curar para que sua barra de vida volte

    registra creature event:
    -sim

    ~~~~

    death

    Quando é executada:
    - Quando um player ou monstro morrem

    Parametros:
    - cid = creatureid do player monstro que morre
    - corpse = corpo do monstro ou player que morre

    exemplo de adicionando 3 crystal coins no corpo que morreu.
    doAddContainerItem(corpse.uid, 2160, 3) - deathlist = uma table com o nome de todos que mataram, sendo na ordem o deathlist[1] oque deu o ultimo hit e o deathlist[2] sendo oque deu mais dano.
    quando está return false:
    - O corpo não será criado

    Registra creature event:
    - Sim

    ~~~~

    preparedeath

    Quando é executada:
    - Quando um monstro ou player está prestes a morrer (pode ser usada em scripts que devem ser executados no segundo antes do player morrer)

    Parameters:
    - cid = creatureid do player ou monstro que está prestes a morrer
    - deathlist = uma tabela com o nome dos atacantes

    quando está return false:
    - o player ou monstro não irá morrer (mesma história do kill)

    Registra creature event:
    - Sim

    ~~~~

    statschange

    quando é executada:
    -Quando um player ou monstro ou ganha ou perde vida/mana de um combat ou uma função (combats não são só os das spells, mas também weapons/fist/melee... vale lembrar também que monstros não possuem mana)

    Parametros:
    - cid = creatureid do player ou monstro q ganha/perde vida/mana
    - attacker = creatureid do player ou monstro que causou a mudança na health/mana
    - type = tipo da mudança, sendo ela:Ganho de vida, perca de vida, ganho de mana e perca de mana vide tabela abaixo:
    STATSCHANGE_HEALTHGAIN = 0 STATSCHANGE_HEALTHLOSS = 1 STATSCHANGE_MANAGAIN = 2 STATSCHANGE_MANALOSS = 3 - combat = o tipo de combat que causou a alteração, sendo esses tipos:
    COMBAT_NONE = 0 COMBAT_PHYSICALDAMAGE = 1 COMBAT_ENERGYDAMAGE = 2 COMBAT_EARTHDAMAGE = 4 COMBAT_POISONDAMAGE = 4 COMBAT_FIREDAMAGE = 8 COMBAT_UNDEFINEDDAMAGE = 16 COMBAT_LIFEDRAIN = 32 COMBAT_MANADRAIN = 64 COMBAT_HEALING = 128 COMBAT_DROWNDAMAGE = 256 COMBAT_ICEDAMAGE = 512 COMBAT_HOLYDAMAGE = 1024 COMBAT_DEATHDAMAGE = 2048 - value = valor da mudança
    quando está return false:
    - O player ou o monstro não ganharão/perderão vida/mana no combat. Pode ser usado pra fazer ele ficar imortal por um certo período ou não ser capaz de tomar dano de certos players/creaturas 

    Registra creature event:
    - Sim

    ~~~~

    combat

    Quando é executado:
    - Quando um player ou monstro starta um combat (qualquer tipo de ataque)

    Parametros:
    - cid = creatureid do player ou monstro que usa o combat
    - target = creatureid do player ou monstro que sofre o combat

    quando está return false:
    - O player ou monstro não será capaz de levar ataques, isso também inclui que ele não poderá dar target em alguém/algo . Isso pode ser usado para criar monstros que não possam levar ataques ou fazer players ficarem imunes a dano por um certo tempo.

    Registra creature event:
    - Sim


    _______________________________________________________________________________________________

    Agora começa a graça da coisa:


    ~~~~

    target

    Quando é executado:
    - Quando um player ou monstro dá target em um player/mostro (follow/attack)

    Parametros:
    - cid = creatureid do player ou monstro que dá o target
    - target = creatureid do player ou monstro que é targeted

    quando está return false:
    - O player/monstro não poderá dar target.. alguns testes com monstros revelaram que o monstro ainda consegue te atacar então acho que essa função só serve para player

    Registra creature event:
    - Sim
     

    ~~~~

    look

    Quando é executado:
    - Quando um player dá look em algo

    Parametros:
    - cid = creatureid do player que dá o look
    - thing = objeto/player/monstro que o player dá look
    - position = não tenho certeza se é a posição do objeto que é dado look ou se é a minha posição.
    - lookDistance = distancia entre esse objeto e eu.

    quando está return false:
    - Não aparece a mensagem de look na tela

    Registra creature event:
    - Sim
     
    ~~~~

    textedit

    Quando é executado:
    - Quando um player edita um texto em algum item writeable (livros por exemplos)

    Parametros:
    - cid = creatureid do player
    - item = item que está sendo modificiado
    - newText = texto novo que foi escrito 

    quando está return false:
    - O player não conseguirá editar o texto, quando ele tentar dar ok o item continuará com o mesmo texto.. Pode ser usado numa quest com muito RPG pra checar se a senha que o player escreveu no livro é a correta.

    Registra creature event:
    - sim
     
    ~~~~

    outfit

    Quando é executado:
    - Quando um player ou monstro muda de outfit

    Parametros:
    - cid = creatureid do player ou monstro que muda de outfit
    - old = outfit antiga
    - current = outfit atual (após ter trocado)

    quando está return false:
    - a troca de outfit será cancelada e o player/monstro voltará para a antiga outfit

    Registra creature event:
    - sim
     
    ~~~~

    push

    Quando é executado:
    - Quando um player tenta empurrar um monstro ou um player

    Parametros:
    - cid = creatureid do player que empurrar
    - target = creatureid do player ou monstro que é empurrado

    quando está return false:
    - O player não conseguirá empurrar (arrastar o oponente com o mouse). É bastante util em eventos para que eles não possam ficar se empurrando

    Registra creature event:
    - sim
     
    ~~~~

    follow

    Quando é executado:
    - Quando um player dá follow em algum monstro ou player ou até num NPC

    Parametros:
    - cid = creatureid do player que dá o follow
    - target = creatureid da criatura (monstro/npc/player) que é seguida

    quando está return false:
    - O follow não irá ocorrer

    Registra creature event:
    - Sim
     
    ~~~~

    attack

    Quando é executado:
    - Quando um player ou monstro ataca (melee, spells não contam)

    Parametros:
    - cid = creatureid do player ou monstro que ataca
    - target = creatureid do player ou monstrp que sofre o ataque

    quando está return false:
    - O player/monstro não irá atacar, é bastante útil em sistemas que vc queira deixar uma certa criatura imune a ataques mas que ela ainda possa morrer pra spells

    Registra creature event:
    - Sim
     
    ~~~~

    areacombat

    Quando é executado:
    - Quando um player ou monstro starta um combat em área (usa uma spell ou dano em área)

    Parametros:
    - cid = creatureid do player ou monstro que usa o combat
    - tileItem = player que está dentro da area
    - tilePosition = posição do player que está dentro da area
    - isAggressive = se esse combat em área é agressivo ou não, lembre-se que magias como exura gran mas res fazem combat em área mas esse combat não é agressivo porque ela cura em área

    quando está return false:
    - o combat é cancelado

    Registra creature event:
    - Sim
     

    ~~~~

    cast

    Quando é executado:
    - Quando um player ou monstro solta uma magia

    Parametros:
    - cid = creatureid do player ou monstro que usa a magia
    - target = creatureid do player ou monstro que sofre o dano da magia

    quando está return false:
    - a magia não é lançada

    Registra creature event:
    - sim
     
    ~~~~

    direction

    Quando é executado:
    - Quando uma criatura (NPC/Player/Monster) muda de direção 

    Parametros:
    - cid = creatureid do player ou monstro que mudará de direção
    - old =  direção antiga
    - current = direção atual, após ter mudado, vide tabela abaixo:
    NORTH = 0EAST = 1 SOUTH = 2 WEST = 3 SOUTHWEST = 4 SOUTHEAST = 5 NORTHWEST = 6 NORTHEAST = 7 atente-se no fato de que não é possível virar pras direções 4,5,6 e 7 mas você utilizá-las num script que cheque a direção entre dois players, daí sim seria possível (como é no caso do exiva)
    quando está return false:
    - A criatura não será capaz de mudar de direção

    Registra creature event:
    - Sim
     
    ~~~~

    reportbug

    Quando é executado:
    - Quando um player reporta um bug

    Parametros:
    - cid = creatureid do player que reportou o bug
    - comment = comentário que ele adicionou ao reportar

    quando está return false:
    - O report será cancelado e não será enviado. Pode ser usado num script avançado de reports onde se o player não tiver escrito nenhum comentário ou tiver escrito determinadas palavras o envio será cancelado (pra evitar spams)

    Registra creature event:
    - Sim
     
    ~~~~

    sendmail

    Quando é executado:
    - Quando um player manda uma carta/parcel para outro

    Parametros:
    - cid = creatureid do player que mandou a correspondencia
    - receiver = creatureid do player que irá receber essa correspondencia
    - item = item que foi enviado (id dele)
    - openBox = conteúdo (no caso de parcel)

    quando está return false:
    - Correspondência não será enviada. É util pra registrar um log de todas as trocas entre players e pegar hackers.

    Registra creature event:
    - Sim
     
    ~~~~

    receivemail

    Quando é executado:
    - Quando um player recebe uma carta/parcel de outro

    Parametros:
    - cid = creatureid do player que recebou a correspondência
    - sender = creatureid do player que enviou a correspondência
    - item =  item recebido
    - openBox =  conteúdo da correspondencia (no caso de ser uma parcel)

    quando está return false:
    - Ele não receberá a correspondência.

    Registra creature event:
    - Sim 

    ~~~~

    traderequest

    Quando é executado:
    - Quando um player dá trade

    Parametros:
    - cid = creatureid do player que deu o trade
    - target = creatureid do player que ele tentou iniciar uma troca
    - item = item que foi iniciada a troca (se for uma backpack cheia de coisas dentro esse item será uma table com todos os itens)

    quando está return false:
    - A troca não será executada. É útil para scripts de itens vip onde o player não possa trocar determinados itens

    Registra creature event:
    - Sim
     
    ~~~~

    tradeaccept

    Quando é executado:
    - Quando um player aceita a troca com outro)

    Parametros:
    - cid = creatureid do player que aceitou a troca (você)
    - target = creatureid do player que aceitou a troca (cara com quem você trocou)
    - item = items que você deu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens
    - targetItem =  items que você recebeu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens

    quando está return false:
    - a troca não será concluída.

    Registra creature event:
    - Sim
     
    ~~~~

    joinchannel

    Quando é executado:
    - Quando um player entra num channel (aqueles canais tipo trade/ help chat/ info/ guild/ etc...)

    Parametros:
    - cid = creatureid do player que entrou no chat
    - channel = canal que o player entrou.. vide lista abaixo:
    CHANNEL_GUILD = 0 CHANNEL_PARTY = 1 CHANNEL_RVR = 3 CHANNEL_HELP = 9 CHANNEL_DEFAULT = 0xFFFE CHANNEL_PRIVATE = 0xFFFF - users = outros usuários do canal.
    quando está return false:
    - O player não conseguirá entrar no channel

    Registra creature event:
    - Sim
     
    OBS: a mesma coisa vale pra função leavechannel, só que o return false o player não conseguirá sair do channel.


    Espero que isso ajude bastante gente, eu não expliquei os types da versão 1.0 porque é basicamente a mesma coisa e pelos parametros dá pra você ter uma ideia doque é oque. :]
  10. Curtir
    Bagon deu reputação a antharaz em ID dos itens ao dar LOOK   
    É porque a função é doPlayerSendCancel com S  maiúsculo, e eu copiei o que você me mandou com o s minúsculo, é só coloca o S maiúsculo no lugar do s minúsculo nesta função no script :D
  11. Obrigado
    Bagon deu reputação a antharaz em ID dos itens ao dar LOOK   
    @Bagon 
     
    Se for tirar do look e deixar só la embaixo deixa o lookid.lua assim:
     
     
     
    Agora se quiser deixar no look normal e lá embaixo também, use o código abaixo:
     
     
  12. Curtir
    Bagon deu reputação a antharaz em ID dos itens ao dar LOOK   
    @Bagon 
     
    Vamos lá
     
    Em data/creaturescripts/scripts crie um arquivo chamado lookid.lua com o código abaixo:
     
     
     
    Em data/creaturescripts/scripts altere o arquivo chamado login.lua adicionando o código abaixo antes do último return true:
     
     
     
    Altere o arquivo data/creaturescripts/creaturescripts.xml colocando o código abaixo na linha acima de </creaturescripts>:
     
     
     
     
    E pronto  seja feliz
  13. Gostei
    Bagon deu reputação a Fir3element em (Resolvido)[PEDIDO] Hp / Mp por porcentagem %%   
    protocolgame.cpp, procure por:
        msg->put<uint16_t>(player->getHealth());     msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MAXHEALTH)); troque por:
        if (player->getPlayerInfo(PLAYERINFO_MAXHEALTH) > 0)     {         msg->put<uint16_t>(uint16_t(player->getHealth() * 100 / player->getPlayerInfo(PLAYERINFO_MAXHEALTH)));         msg->put<uint16_t>(100);     }     else     {         msg->put<uint16_t>(0);         msg->put<uint16_t>(0);       } procure por:
        msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MANA));     msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MAXMANA)); troque por:
        if (player->getPlayerInfo(PLAYERINFO_MAXMANA) > 0)     {         msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MANA) * 100 / player->getPlayerInfo(PLAYERINFO_MAXMANA));         msg->put<uint16_t>(100);     }     else     {         msg->put<uint16_t>(0);         msg->put<uint16_t>(0);     }
  14. Gostei
    Bagon deu reputação a Natanael Beckman em DEV C++ Compilando TFS no Windows   
    DEV C++,  aprenda a compila uma source TFS!
     
    Downloads(Baixe de acordo as configurações do seu windows):
    DEV C++ CONFIGURADO PARA 32BITS
    DEV C++ CONFIGURADO PARA 64BITS
    REV 3884 TFS 0.4
     
    Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
    ======================================
    Abra o DEV C++:
    ======================================

    ======================================
    Abra a Source:
    ======================================

    ======================================
    Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
    ======================================

    =============================================================

    ======================================
    Aguarde carregar todos os arquivos:
    ======================================

    ======================================
    Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
    ======================================

    ======================================
    Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
    ======================================

    ======================================
    Se der tudo certo em Log vai estar como mostra a imagem abaixo:
    ======================================

    ======================================
    Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
    ======================================

    ===========================================
    Só isso galera tutorial rápido resumido e útil!
    Créditos Natanael Beckman!    
    ===========================================     
     
    Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
    Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
     

     
    Abra o DEV-C++, clique em  File> New> Project:
     

     
    Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
     

     
    Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
     

     
    No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
    -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
    -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s   No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK.     Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project:      Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9:         OpenSSL 0.9.8   1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
      Clica aqui \/
  15. Gostei
    Bagon deu reputação a Emersonssss em [C++] Attack Speed   
    Salve Galera, olhando em minhas libs achei um script muito bom !!
     
    Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então ....
     
    Segue a Formula na source que faz essa magica :

    Em Player.cpp Procure : 
    uint32_t Player::getAttackSpeed() const Mude Atualize para esse função :
    uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } }  Explicando :

    Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros.
     
    Simples e Facil !
     
    Creditos ?
    Emerson Henrique
  16. Gostei
    Bagon deu reputação a Bodak Reborn em Erro na distro   
    function onSay(cid , words, param) local textSay = {"Sim", "Não", "Talves", "Não] intendi vc poderia repetir?"} pet = { ["Verminor"]= {stor=78552}, ["cyclops"]= {stor=78553}, ["lion"]= {stor=78554}, ["wolf"]= {stor=78555}, ["rat"]= {stor=78556}, ["demon"]= {stor=78557}, } param = string.lower(param) if words=="!pet" then if #getCreatureSummons(cid) < 1 and pet[param] and getPlayerStorageValue(cid,pet[param].stor) >= 1 then local x = doSummonCreature(param,getCreaturePosition(cid)) doConvinceCreature(cid, x) doCreatureSay(cid,"Go "..getCreatureName(cid) .."",TALKTYPE_ORANGE_1) else doPlayerSendCancel(cid,"sorry no have pet") end if #getCreatureSummons(cid) > 0 then doRemoveCreature(getCreatureSummons(cid)[1]) doCreatureSay(cid,"!pet "..getCreatureName(cid) .." ",TALKTYPE_ORANGE_1) end elseif words=="!conversar" then if #getCreatureSummons(cid) > 0 then doCreatureSay(cid,textSay[math.random(#texteSay)],TALKTYPE_ORANGE_1) else doPlayerSendCancel(cid,"sorry no have pet summoned") end elseif words=="!fale" then doCreatureSay(getCreatureSummons(cid)[1],param,TALKTYPE_ORANGE_1) end return true end  
  17. Gostei
    Bagon deu reputação a Bodak Reborn em {AJUDA} Script broadcast?   
    Como as pessoas entram no evento? TP, andando, etc
  18. Gostei
    Bagon deu reputação a Bodak Reborn em {AJUDA} Script broadcast?   
    O_O
    Estou muito confuso, o script tá dando storage global, logo, todo mundo tem o storage, logo, todo mundo recebe a mensagem..
    Abre um teleport quando vai começar o evento, é isso?
  19. Gostei
    Bagon deu reputação a Bodak Reborn em {AJUDA} Script broadcast?   
    Um minuto.
     
    Testa ai:
    movements/scripts
    nome_arquivo.lua
    movements.xml
    Coloque o action id na saída do teleport, ou na entrada. O importante é que quem for entrar no evento, passe por esse tile.
    Lembrando que tu pode definir um action id no tile à sua frente com o comando /attr action numero
  20. Gostei
    Bagon deu reputação a Bodak Reborn em {AJUDA} Script broadcast?   
    Sobre o script, funcionou?
     
    Storage:
    Já tem no código.
    doPlayerSetStorageValue(pid, 822066, -1)
  21. Gostei
    Bagon deu reputação a Bodak Reborn em {AJUDA} Script broadcast?   
    function onStepIn(cid, item, position, fromPosition) if item.actionid == 5436 then if getPlayerStorageValue(cid, CTF.storages.redFlag) == 1 then setGlobalStorageValue(CTF.storages.greenTeam, getStorageZero(CTF.storages.greenTeam) + 1) if getPlayerStorageValue(pid, 822066) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "O jogador "..getCreatureName(cid).." levou a Bandeira Vermelha até a base verde e marcou um ponto para o time verde!") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Placar:\n Time Verde -> "..getStorageZero(CTF.storages.greenTeam).." ponto(s).\n Time Vermelho: -> "..getStorageZero(CTF.storages.redTeam).." ponto(s).") doPlayerSetStorageValue(cid, CTF.storages.redFlag, -1) doSendMagicEffect(CTF.redFlagPos, 28) if getStorageZero(CTF.storages.greenTeam) == 10 then doPlayerSendTextMessage(cid, 25, "O Time Verde atingiu 10 pontos e venceu o evento! Os membros que ainda estão presentes receberam alguns prêmios!") CTF.removeFlags() for _, pid in pairs(getPlayersOnline()) do if getPlayerStorageValue(pid, CTF.storages.greenTeam) == 1 then local am = {8302, 8306, 8300, 5957} doPlayerAddItem(pid, 2157, 30) doPlayerAddItem(pid, am[math.random(1, 4)], 1) end end for _, pid in pairs(getPlayersOnline()) do if getPlayerStorageValue(pid, CTF.storages.greenFlag) == 1 or getPlayerStorageValue(pid, CTF.storages.redFlag) == 1 then doPlayerSetStorageValue(pid, CTF.storages.greenFlag, -1) doPlayerSetStorageValue(pid, CTF.storages.redFlag, -1) end doTeleportThing(pid, CTF.exit_) doPlayerSetStorageValue(pid, 822066, -1) doPlayerSetStorageValue(pid, CTF.storages.redTeam, -1) doPlayerSetStorageValue(pid, CTF.storages.greenTeam, -1) doRemoveCondition(pid, CONDITION_OUTFIT) end end else local flag = doCreateItem(CTF.redFlag, 1, CTF.redFlagPos) doItemSetAttribute(flag, 'aid', 5435) end end elseif item.actionid == 5437 then if getPlayerStorageValue(cid, CTF.storages.greenFlag) == 1 then setGlobalStorageValue(CTF.storages.redTeam, getStorageZero(CTF.storages.redTeam) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "O jogador "..getCreatureName(cid).." levou a Bandeira Verde até a base vermelha e marcou um ponto para o time vermelho!") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Placar:\n Time Vermelho -> "..getStorageZero(CTF.storages.redTeam).." ponto(s).\n Time Verde: -> "..getStorageZero(CTF.storages.greenTeam).." ponto(s).") doPlayerSetStorageValue(cid, CTF.storages.greenFlag, -1) doSendMagicEffect(CTF.greenFlagPos, 28) if getStorageZero(CTF.storages.redTeam) == 10 then doPlayerSendTextMessage(cid, 25, "O Time Vermelho atingiu 10 pontos e venceu o evento! Os membros que ainda estão presentes receberam alguns prêmios!") CTF.removeFlags() for _, pid in pairs(getPlayersOnline()) do if getPlayerStorageValue(pid, CTF.storages.redTeam) == 1 then local am = {8302, 8306, 8300, 5957} doPlayerAddItem(pid, 2157, 30) doPlayerAddItem(pid, am[math.random(1, 4)], 1) end end for _, pid in pairs(getPlayersOnline()) do if getPlayerStorageValue(pid, 822066) == 1 then if getPlayerStorageValue(pid, CTF.storages.greenFlag) == 1 or getPlayerStorageValue(pid, CTF.storages.redFlag) == 1 then doPlayerSetStorageValue(pid, CTF.storages.greenFlag, -1) doPlayerSetStorageValue(pid, CTF.storages.redFlag, -1) end doTeleportThing(pid, CTF.exit_) doPlayerSetStorageValue(pid, 822066, -1) doPlayerSetStorageValue(pid, CTF.storages.redTeam, -1) doPlayerSetStorageValue(pid, CTF.storages.greenTeam, -1) doRemoveCondition(pid, CONDITION_OUTFIT) end end else local flag = doCreateItem(CTF.greenFlag, 1, CTF.greenFlagPos) doItemSetAttribute(flag, 'aid', 5434) end end end end return true end  
  22. Gostei
    Bagon deu reputação a MaTTch em Adicionar tempo no script   
    Tipo... Isso?
     
    local STORAGE_GUILD_WIN = GRANTOWER.SAVELASTWINNER function isPlayerGuild(cid) if(getPlayerGuildName(cid) ~= "") then return true end return false end local broadTab = { broadcastDelay = 5 -- em segundos } function onStepIn(cid, item, position, fromPosition) if(isPlayer(cid) and isPlayerGuild(cid)) then local cidTime = broadTab[getCreatureName(cid)] or 0 if(getPlayerGuildId(cid) ~= getGlobalStorageValue(STORAGE_GUILD_WIN) and cidTime < os.time()) then doBroadcastMessage("O(a) Jogador "..getCreatureName(cid).." esta tentando invadir o castle da guild \""..getPlayerGuildName(cid) ..".", MESSAGE_STATUS_CONSOLE_BLUE) broadTab[getCreatureName(cid)] = (os.time() + broadTab.broadcastDelay) end doPlayerSendCancel(cid, "Avance") end return true end  
  23. Gostei
    Bagon deu reputação a psychonaut em (Resolvido)Transação inválida   
    Entra na conta do pagseguro, Integrações, Pagamentos via api e desabilita "Quero receber somente pagamentos via API", aperta sim na caixa e pronto. Se é que é disso que você ta falando.
  24. Gostei
    Bagon deu reputação a xWhiteWolf em [EVENT 0.4] MASSIVE TEAM BATTLE   
    globalevents.xml:
     


    creaturescripts.xml:
     
     
  25. Gostei
    Bagon deu reputação a Fir3element em [8.60] The Forgotten Server 0.4 By Fir3Element (SQL and MYSQL)   
    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/

Informação Importante

Confirmação de Termo