Jump to content

Search the Community

Showing results for tags 'creatureevent'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sou

  1. Introdução Ele simplesmente manda um efeito para o Top Level caso ele estiver online, além disso, ele checa quando o top é ultrapassado e o efeito passa automaticamente ao novo top. Instalação: Em data/creaturescripts/creaturescripts.xml adicione: <event type="login" name="TopEffect" event="script" value="topeffect.lua"/> <event type="advance" name="CheckTop" event="script" value="topeffect.lua"/>Agora crie um arquivo em data/creaturescripts/scripts com o nome topeffect.lua e adicione: --[[ Script by Bruno Minervino para o Tibia King Caso for postar, colocar os créditos ]] local config = { tempo = 10, --tempo em segundos mensagem = { texto = "[TOP]", --não use mais de 9 caracteres efeito = TEXTCOLOR_LIGHTBLUE --efeito para a função doSendAnimatedText }, efeito = 30, --efeito da função doSendMagicEffect globalstr = 5687 -- uma global storage qualquer q esteje vazia } --[[ Não mexa em nada abaixo ]] local topPlayer = getGlobalStorageValue(config.globalstr) > 0 and getGlobalStorageValue(config.globalstr) or 0 function onLogin(cid) local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1") if (query:getID() ~= -1) then local pid = query:getDataString("id") local name = query:getDataString("name") if getPlayerName(cid) == name then if topPlayer ~= getPlayerID(cid) then topPlayer = getPlayerID(cid) end setGlobalStorageValue(config.globalstr, pid) TopEffect(cid) end end registerCreatureEvent(cid, "CheckTop") return true end function onAdvance(cid, skill, oldlevel, newlevel) if skill == 8 then local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1") if (query:getID() ~= -1) then local level = tonumber(query:getDataString("level")) if level < newlevel and topPlayer ~= getPlayerID(cid) then doBroadcastMessage("O jogador " .. getPlayerName(cid) .. " tornou-se o novo Top Level. Parabens!", 22) topPlayer = getPlayerID(cid) doSaveServer() setGlobalStorageValue(config.globalstr, getPlayerID(cid)) TopEffect(cid) end end end return true end function TopEffect(cid) if not isPlayer(cid) then return true end if topPlayer == getPlayerID(cid) then doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito) doSendMagicEffect(getCreaturePosition(cid), config.efeito) addEvent(TopEffect, config.tempo * 1000, cid) end end function getPlayerNameById(id) local query = db.getResult("SELECT `name` FROM `players` WHERE `id` = " .. db.escapeString(id)) if query:getID() ~= -1 then return query:getDataString("name") end return 0 end function getPlayerIdByName(name) local query = db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name)) if query:getID() ~= -1 then return tonumber(query:getDataString("id")) end return 0 end function getPlayerID(cid) return getPlayerIdByName(getPlayerName(cid)) end Espero que gostem
  2. Bom galera, quis fazer o script pra ajudar um membro da comunidade.. Espero que gostem! É um script simples, que a cada 1 hora online, dá um item para o player. Esse tempo online será salva num espaço na sua database, e depois vou aprimorar o script para criar um rank dos mais online. De qualquer forma, modificações desse script viram, então aguardem. Em creaturescript.xml adicione: <event type="login" name="tempo_on_reward" event="script" value="rewardON.lua"/> <event type="logout" name="tempo_on_reward2" event="script" value="rewardON.lua"/> Em login.lua adicione: registerCreatureEvent(cid, "tempo_on_reward2") Agora, na pasta scripts, cria um arquivo chamado rewardON.lua e adicione dentro: -- Script made by GstavoLiber -- -- Config -- storage = 2001 -- storage que vai salvar o tempo online temporariamente. item = 2160 -- id do item que será dado como presente hora = 3600 -- tempo em segundos a ficar online para receber o premio count = 50 -- qntidade do item premio -- Config -- function onLogin(cid) if(getPlayerStorageValue(uid, storage) >= hora )then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já está logado a 1 hora! Você receberá seu prêmio em breve. " ) doPlayerAddItem(uid, item, count) local rest = getPlayerStorageValue(uid, storage) - hora local query = db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";") setPlayerStorageValue(uid, storage, 0) setPlayerStorageValue(uid, storage, rest) return TRUE else setPlayerStorageValue(uid, storage, getPlayerStorageValue(uid, storage) + os.time()) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Fique logado por 1 hora para ganhar premio! Lembre-se de deslogar e logar para recebe-lo. " ) end return TRUE end function onLogout(cid) setPlayerStorageValue(uid, storage, getPlayerStorageValue(uid, storage) + os.time()) return TRUE -- return false impede o jogador de dar logout end Pessoal, tenho uma leve impressão que eu errei na lógica, então caso não funcione o de cima, testa esse de baixo: -- Script made by GstavoLiber -- -- Config -- storageInit = 2001 -- storage que vai salvar o tempo online temporariamente. storageFinish = 2002 -- storage que vai salvar o tempo online temporariamente. storageTotal = 2003 item = 2160 -- id do item que será dado como presente hora = 3600 -- tempo em segundos a ficar online para receber o premio count = 50 -- qntidade do item premio -- Config -- function onLogin(cid) setPlayerStorageValue(uid, storageInit, os.time()) if(getPlayerStorageValue(uid, storageTotal) >= hora )then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já está logado a 1 hora! Você receberá seu prêmio em breve. " ) doPlayerAddItem(uid, item, count) local rest = getPlayerStorageValue(uid, storageTotal) - hora local query = db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";") if(rest > 0) then setPlayerStorageValue(uid, storageTotal, rest) else setPlayerStorageValue(uid, storageTotal, 0) end return TRUE else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Fique logado por 1 hora para ganhar premio! Lembre-se de deslogar e logar para recebe-lo. " ) end return TRUE end function onLogout(cid) setPlayerStorageValue(uid, storageFinish, os.time()) setPlayerStorageValue(uid, storageTotal, getPlayerStorageValue(uid, storageTotal) + (getPlayerStorageValue(uid, storageFinish) - getPlayerStorageValue(uid, storageInit))) return TRUE -- return false impede o jogador de dar logout end Obrigado pela atenção, Já ia esquecendo, tem que adicionar na sua database em MYSQl, o seguinte query: ALTER TABLE players ADD total_time_on int(16) not null AFTER frags; Mude a palavra frags, para o nome da ultima coluna da sua table players. Se Possível +REP -GstavoLiber
  3. Script: Monstro após a morte Função: Ao morrer o cadaver do player se torna em um zombie! (ps. Você pode configurar o monstro que ele vai se tornar, e talz) Print: Script: Primeiro vai em creaturescripts/creaturescript.xml e dentro coloque isso: <event type="death" name="Zombie" event="script" value="zombiedeath.lua"/> <event type="look" name="ZombieLook" event="script" value="zombiedeath.lua"/> Depois, em creaturescript, crie um arquivo chamado zombiedeath.lua e dentro coloque isso: Após feito isso, registre o script em login.lua: Antes que venha esta pergunta, que eu sei que viria: - O que aconteçe se morrer envenenado na protection zone? Simplesmente o monstro não irá nascer.
  4. O script consiste em quando você der look no player irá aparecer se ele é VIP ou FREE e quantas pessoas ele já matou (frags). SS: lookplayer.lua (data/creaturescripts/scripts) function getPlayerFrags(cid) local time = os.time() local times = {today = (time - 86400), week = (time - (7 * 86400))} local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(result:getID() ~= -1) then repeat local content = {date = result:getDataInt("date")} if(content.date > times.today) then table.insert(contents.day, content) elseif(content.date > times.week) then table.insert(contents.week, content) else table.insert(contents.month, content) end until not result:next() result:free() end local size = { day = table.maxn(contents.day), week = table.maxn(contents.week), month = table.maxn(contents.month) } return size.day + size.week + size.month end function onLook(cid, thing, position, lookDistance) local string = 'You see yourself.' if isPlayer(thing.uid) and thing.uid ~= cid then if getPlayerPremiumDays(thing.uid) > 0 then doPlayerSetSpecialDescription(thing.uid,'[Frags: '..getPlayerFrags(thing.uid)..'][VIP]') else doPlayerSetSpecialDescription(thing.uid,'[Frags: '..getPlayerFrags(thing.uid)..'][FREE]') end elseif thing.uid == cid then if getPlayerPremiumDays(cid) > 0 then doPlayerSetSpecialDescription(cid,'[Frags: '..getPlayerFrags(cid)..'][VIP]') else doPlayerSetSpecialDescription(cid,'[Frags: '..getPlayerFrags(cid)..'][FREE]') end if getPlayerFlagValue(cid, PLAYERFLAG_SHOWGROUPINSTEADOFVOCATION) then string = string..' You are '.. getPlayerGroupName(cid) ..'.' elseif getPlayerVocation(cid) ~= 0 then string = string..' You are '.. getPlayerVocationName(cid) ..'.' else string = string..' You have no vocation.' end string = string..getPlayerSpecialDescription(cid)..'' if getPlayerNameByGUID(getPlayerPartner(cid), false, false) ~= nil then string = string..' You are '.. (getPlayerSex(cid) == 0 and 'wife' or 'husband') ..' of '.. getPlayerNameByGUID(getPlayerPartner(cid)) ..'.' end if getPlayerGuildId(cid) > 0 then string = string..' You are ' .. (getPlayerGuildRank(cid) == '' and 'a member' or getPlayerGuildRank(cid)) ..' of the '.. getPlayerGuildName(cid) string = getPlayerGuildNick(cid) ~= '' and string..' ('.. getPlayerGuildNick(cid) ..').' or string..'.' end if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEECREATUREDETAILS) then string = string..'\nHealth: ['.. getCreatureHealth(cid) ..' / '.. getCreatureMaxHealth(cid) ..'], Mana: ['.. getCreatureMana(cid) ..' / '.. getCreatureMaxMana(cid) ..'].' string = string..'\nIP: '.. doConvertIntegerToIp(getPlayerIp(cid)) ..'.' end if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEEPOSITION) then string = string..'\nPosition: [X:'.. position.x..'] [Y:'.. position.y..'] [Z:'.. position.z..'].' end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string) return false end return true end creaturescripts.xml <event type="look" name="LookPlayer" event="script" value="lookplayer.lua"/> login.lua (data/creaturescripts) registerCreatureEvent(cid, "LookPlayer") Créditos: Taag - Suicide
  5. Mods: NPC Como configurar?
  6. Eae galera do xtibia beleza? hoje venho trazer o Death System um sisteminha que um amigo meu fez, é bem utilizado atualmente. Antes de tudo gostaria de deixar bem claro que não fui eu que fiz. Créditos no final do tópico. Testado em OTX Server 8.60 e TheForgottenServer 0.4 8.60... Como funciona? O Death System em alguns servidores possui um channel chamado "Mortes" ou "Death Channel", mas há alguns servidores que preferem que seja anunciado no default mesmo e a função é informar quem matou quem, ou quem foi morto por certo monstro. O que há de novo? Bom, agora quem matar x jogadores(configurável) e essa quantia for uma consecutiva, será anunciado isso : E se algum jogador derrotá-lo dentro a consecutiva, será anunciado isso : Vamos ao sistema : em data/XML/channels.xml, adicione isso : <channel id="15" name="Death Channel"/> em data/creaturescripts/creaturescripts.xml : <event type="death" name="deathchannel" event="script" value="deathchannel.lua"/> em data/creaturescripts/login.lua, adicione isso antes do último return true : registerCreatureEvent(cid, "deathchannel") em data/creaturescripts/scripts, crie um arquivo deathchannel.lua e cole isso dentro : TFS: OTX: Há uma única configuração, que é as consecutivas : local frags = {10, 15, 20, 25, 30, 35, 40, 45, 50} completou 10 frags? anuncia! e assim sucessivamente.. Créditos: Zoom
  7. Bom, uma amigo pedi o para mim fazer esse script porque o serve dele tem xp muito alta e depois de muitos leveis o hp e mana volta e nao da pra saber exato quanto de mana e life tem então resolvi isso para ele com esse script. *E bem simples mais não tinha aqui no forum. Oque faz ?: Assim que loga ele pucha os dados de mana e life do player e mostra para ele. creatures add esse código em uma arquivo lua, info.lua Toda vez que ele logar vai da a info do life e mana. * Uma Print de como ficou.* local config = {life = MESSAGE_STATUS_CONSOLE_BLUE,mana = MESSAGE_STATUS_CONSOLE_RED,vipstatus = MESSAGE_STATUS_CONSOLE_RED};function onLogin(cid)doPlayerSendTextMessage(cid, (config.life), "Your health is: " .. getCreatureHealth(cid) .. "/".. getCreatureMaxHealth(cid) .." hp.")doPlayerSendTextMessage(cid, (config.mana), "Your mana is: " .. getCreatureMaxMana(cid) .. "/" .. getCreatureMaxMana(cid) .." mana.")if getPlayerPremiumDays(cid) > 0 thendoPlayerSendTextMessage(cid, (config.vipstatus), "You are premium and you have: " .. getPlayerPremiumDays(cid) .. " days left.")elsedoPlayerSendTextMessage(cid, (config.vipstatus), "You are no premium.")endreturn trueend lembrar de registrar o evento: no login.lua registerCreatureEvent(cid, "info") -- NEWWW agora vai em creaturescripts.xml e add essa tag: <event type="login" name="info" event="script" value="info.lua"/> Se ajudei + rep. bjs =*
  8. Créditos à nookia. Tutorial Vá na pasta creaturescripts, abre o creaturescripts.xml e adicione a seguinte tag: <event type="login" name="DoubleXP" event="script" value="DoubleXP.lua"/> Agora vá em creaturescripts/scripts e crie um arquivo chamado DoubleXP.lua e adicione: -- Monday = Segunda -- Tuesday = Terça -- Wednesday = Quarta -- Thursday = Quinta -- Friday = Sexta -- Saturday = Sabado -- Sunday = Domingo function onLogin(cid) DoubleDays = {"Saturday", "Sunday"} if isInArray(DoubleDays, os.date("%A")) then doPlayerSetRate(cid, SKILL__LEVEL, 2.0) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Double XP]\nHoje estamos em evento de Double XP!\nAproveite.") end return true end
  9. Descrição: Cada player que você matar você ganha 1 level, e tem um limite máximo de level que é 500. A ideia desse script foi tirada do FoxWorld Server, achei muito interessante e vim postar aqui no fórum, espero que vocês curtem também. otserv => data -> creaturescripts -> scripts -> killplayer.lua: function onKill(cid, target, lastHit) if isPlayer(cid) and isPlayer(target) and getPlayerLevel(cid) < 500 then local expForUp = getExperienceForLevel(getPlayerLevel(cid)+1) - getPlayerExperience(cid) doPlayerAddExp(cid, expForUp) end return true end Também tem outra versão do script, que na qual só upará +1 level se o player adversário for level maior que o seu, evitando makers: local max_lvl = 500 function onKill(cid, target, lastHit) if isPlayer(cid) and isPlayer(target) and getPlayerLevel(cid) < max_lvl and getPlayerLevel(cid) < getPlayerLevel(target) then local expForUp = getExperienceForLevel(getPlayerLevel(cid) + 1) - getPlayerExperience(cid) doPlayerAddExp(cid, expForUp) end return true end Créditos dessa versão a luanluciano93 Explicação < 500 then 500 no caso é o level máximo que o player pode alcançar. otserv => data -> creaturescripts -> creaturescripts.xml: <event type="kill" name="KillPlayer" event="script" value="killPlayer.lua"/> otserv => data -> creaturescripts -> scripts -> login.lua: registerCreatureEvent(cid, "KillPlayer") Créditos: Thiagobji Jhon992 FoxWorld Testado e funcionando 100%
  10. boss ressereition é um sistema simples,de facil edição,pratico e leve. mas para que ele serve? ele fas como na queles jogos que quando você mata um boss ele volta numa senguda forma mais forte,o boss poden ter mais de duas formas (ele vai cria outro boss selecionado no script, no mesmo lugar que vc mato esse boss) va em data/creaturescript e abra o arquivo creaturescript.xml e adicione essa tag <event type="death" name="br" event="script" value="bossressuretion.lua"/> va em creaturescript/script e crie uma um arquivo lua com nome bossressuretion colocque isto dentro function onDeath(cid, corpose, lastHitKiller, mostDamageKiller) boss = {["bossname"] = "sencond form name" } --configure aki ef = 42 --efeito que solta no locau onde ele morrer monster = string.lower(getCreatureName(cid)) pos = getCreaturePos(cid) doRemoveCreature(cid) doCreateMonster(boss[monster], pos) doSendMagicEffect(pos, 22) return FALSE end agora va em data/monster procure pelo arquivo xml do mostro que que adionar ao evento abra-o e adicione essa tag <script> <event name="br"/> </script> caso ja exista a tag <script> </script> apenas adione isso dentro <event name="br"/> configurando simplesmente configure a tabela boss da seguinte forma boss = {["nome do boss"] = "nome da segunda forma do boss",["outro boss"] = "segunda forma do outro boss" } deve ser igual ao que consta no arquivo xml da creatura e deve estar em letras minusculas(o nome que aparce para o player) deve ser igual ao que consta no arquivo monsters.xml(é o mesmo nome que usa para summonar, em algums caso esse nome é diferente do que aparece aos player) exemplo: boss = {["demon"] = "apocalypse", ["orshabaal"] = "morgaroth", ["ghazbaran"] = "orshabaal" } no exemplo se você matase um demon ele viraria um apocalypse,se matase um Ghazbaran ele viraria um orshabaal e se matase o orshabaal ele viraria um morgaroth obs: os nomes sempre devem estar entre aspas
  11. Créditos à Anonimo e Animal Park. Objetivo O script consiste em criar um log .txt em data/logs/trades mostrando quais itens foram passados entre os jogadores dentro do seu servidor Tutorial Em data/creaturescripts/scripts/ crie um arquivo .lua chamado: checktrades.lua e dentro coloque: local servers = {[0] = 'server1', [1] = 'server2', [2] = 'server3'} local function getType(item) return (item.type > 0) and item.type or 1 end Log = {} Log.__index = Log function Log.create() local t = {} setmetatable(t, Log) t.file = servers[getConfigValue("worldId")] .. "/" .. os.date("%B-%d-%Y", os.time()) .. ".txt" t.str, t.cstr, t.con = '', '', 0 return t end function Log:write() local f = io.open("data/logs/trades/" .. self.file, "a+") if not f then return false end f:write(self.str) f:close() end function Log:containerString() self.cstr = '' for i = 1, self.con do self.cstr = self.cstr .. '-> ' end end function Log:addContainer() self.con = self.con + 1 self:containerString() end function Log:closeContainer() self.con = self.con - 1 self:containerString() end function Log:setLine(txt) self.str = self.str .. self.cstr .. txt .. '\n' end function Log:kill() self.file, self.cstr, self.str, self.con = "", "", "", -1 end function onTradeAccept(cid, target, item, targetItem) local this = Log.create() local name, tname = getCreatureName(cid), getCreatureName(target) this:setLine("Trade between " .. name .. " and " .. tname .. " || [" .. os.date("%d/%m/%Y %H:%M:%S") .. "]") local function logging(cid, item) this:setLine(getCreatureName(cid) .. " traded:") local function scanContainer(cid, uid) for k = (getContainerSize(uid) - 1), 0, -1 do local tmp = getContainerItem(uid, k) this:setLine(getItemNameById(tmp.itemid) .. " x " .. getType(tmp) .. " || itemid: " .. tmp.itemid) if isContainer(tmp.uid) then this:addContainer() scanContainer(cid, tmp.uid) this:closeContainer() end end end this:setLine(getItemNameById(item.itemid) .. " x " .. getType(item) .. " || itemid: " .. item.itemid) if isContainer(item.uid) then this:addContainer() scanContainer(cid, item.uid) this:closeContainer() end end logging(cid, item) logging(target, targetItem) this:setLine("END OF THIS TRADE --------------\n") this:write() this:kill() return true end Em data/creaturescripts adicione no creaturescripts.xml a seguinte linha: <event type="trade" name="tradeCheck" event="script" value="checktrades.lua"/> Em data/creaturescripts/scripts/ abra o arquivo login.lua e adicione: registerCreatureEvent(cid, "tradeCheck") Pronto, agora você poderá monitorar os trades em seu servidor!
  12. Bom, eu tava vendo uns links sobre o os.date e lembrei que no login você recebe a mensagem de ultimo login, Eu fui ver como funciona e coloquei uma forma de mandar a mensagem totalmente em português, É um script bem inútil kk Mas para quem quiser usar ta aí Primeiramente vá em creaturescripts/scripts/login.lua Abra o arquivo e procure por: str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "." E substitua por: str = "Seu último login foi em "..os.date("%d", getPlayerLastLoginSaved(cid)).."/"..os.date("%m", getPlayerLastLoginSaved(cid)).."/".. os.date("%Y", getPlayerLastLoginSaved(cid)).." ás "..os.date("%H", getPlayerLastLoginSaved(cid))..":"..os.date("%M", getPlayerLastLoginSaved(cid)).."." Não esqueça de mudar o login.lua de UTF-8 para ANSI. Se não vai aparecer várias letras embaralhadas onde tiver acento! Para quem não sabe converter para ANSI e usa o Notepad++ faça assim: Caso não use Notepad++, Você terá que ir no bloco de notas Como ficará:
  13. Esse sistema/script/sei lá o que foi desenvolvido por Karain que quis trazer um 'ar' mais moderno ao tibia.. Com esse script conversar com o npc será mais uma experiência mais amigável, continua sendo customizável mas de uma forma mais fácil! Como instalar Em data/creaturescripts/creaturescrips.xml adicione <event type="modalWindow" name="Dialogue" script="dialogue.lua"/> Em data/creaturescripts/scripts/login.lua adicione isso antes do "return true" player:registerEvent("Dialogue") Crie em data/creaturescripts o arquivo dialogue.lua e adicione player_choices = {} defaultButtons = {{id = 0x00, text = "Select", enter = true, escape = false}, {id = 0x01, text = "End", enter = false, escape = true}} function Player:getChoiceText(choice_id) if player_choices and player_choices[self:getId()] then return player_choices[self:getId()][choice_id].text else return false end end function Player:createDialogueWindowWithButtons(modalWindowId, headerText, bodyText, buttonTable, choiceTable, sendToPlayer, priority) local var = ModalWindow(modalWindowId, headerText, bodyText) for i = 1, #buttonTable do var:addButton(buttonTable[i].id, buttonTable[i].text) if buttonTable[i].enter then var:setDefaultEnterButton(buttonTable[i].id) end if buttonTable[i].escape then var:setDefaultEscapeButton(buttonTable[i].id) end end player_choices[self:getId()] = choiceTable for i = 0, #choiceTable do if choiceTable[i] ~= nil and (choiceTable[i].storage == false or self:getStorageValue(choiceTable[i].storage[1]) == choiceTable[i].storage[2]) then var:addChoice(i, choiceTable[i].text) end end if not priority then var:setPriority(false) end if sendToPlayer then var:sendToPlayer(self) end end function onModalWindow(player, modalWindowId, buttonId, choiceId) -- be careful here if you have other modalwindow scripts if buttonId == 0x00 then player:say(player:getChoiceText(choiceId),TALKTYPE_SAY) elseif buttonId == 0x01 then player:say("Good Bye.",TALKTYPE_SAY) end return true end Crie em data/npc/scripts o arquivo dialogue.lua e adicione local npc_dialogue = { [1] = { message="This is the message that shows up before the choices, make sure it's long enough if you are having long choices.", choices= { [1]={text="Choice 1", storage=false, dialogue=1, script="end"}, [2]={text="Choice 2",storage=false, dialogue=2, script="script1"}, [3]={text="Choice 3",storage={1234,1}, dialogue=3, script="trade"}, [4]={text="Choice 4",storage=false, dialogue=3, script="quest"}, [5]={text="Choice 5",storage=false, dialogue=false, script="quest2"}}}, [2] = { message="Bla bla bla bla bla bla bla.", choices= { [1]={text="Choice 1",storage=false, dialogue=1, script="end"}, [2]={text="Choice 2",storage=false, dialogue=2, script="end"}, [3]={text="Choice 3",storage={1234,1}, dialogue=false, script="end"}, [4]={text="Choice 4",storage=false, dialogue=false, script="end"}, [5]={text="Choice 5",storage=false, dialogue=3, script="end"}}}, [3] = { message="Brought to you by Matt Shadowwing.", choices= { [1]={text="Choice 1",storage={1245,2}, dialogue=false, script="end"}, [2]={text="Choice 2",storage=false, dialogue=false, script="end"}, [3]={text="Choice 3",storage={1234,1}, dialogue=false, script="end"}, [4]={text="Choice 4",storage=false, dialogue=1, script="end"}, [5]={text="Choice 5",storage=false, dialogue=2, script="end"}}} } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) 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 onThink() npcHandler:onThink() end local talkstate = {} local function greetCallback(cid) local player = Player(cid) local npc = Npc(getNpcCid()) npcHandler:setMessage(MESSAGE_GREET, npc_dialogue[1].message) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[1].message, defaultButtons, npc_dialogue[1].choices, true, false) talkstate[player:getId()] = 1 return true end local function creatureSayCallback(cid, type, msg) local player = Player(cid) local npc = Npc(getNpcCid()) if not npcHandler:isFocused(cid) then return false elseif talkstate[player:getId()] then for _, v in pairs(npc_dialogue[talkstate[player:getId()]].choices) do if msgcontains(msg, v.text) and (v.storage == false or player:getStorageValue(v.storage[1]) == v.storage[2]) then if v.script == "end" then talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) elseif v.script == "trade" then -- trading script here talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) elseif v.script == "quest" then -- quest script here talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) end end end end return true end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Em data/npc/lib/npcsystem/npchandler.lua altere todos os TALKTYPE_PRIVATE_PN para TALKTYPE_SAY Depois é só criar seu npc.xml referenciar o lua e seja feliz.. Qualquer problema eu terei que repassar para o criador pois não sou apto a dar suporte.. Estou somente trazendo para cá!
  14. Eu tava pesquisando na net como fasso para que os mages do meu server começem com skills de ml 15/15 e os knights com club axe e sword 45/40 e os pallys com 50/40 de dist ... Achei milhares de resultados, e todos davam bug de : *Ou eu ganhava muito skills ou eu ganhava muito pouco ou vinha tudo bugadao nada a ver... *Bom meu ot é um Snowz V13 e eu precisso muito deste script por favor me ajudem !!!11! 2 REP + (um a cada dia) PRA QUEM CONSEGUIR!
  15. Boa noite galera Como levantei no tópico: http://www.xtibia.com/forum/topic/238784-monstros-se-matando/monstros selvagens são todos tratados como amigos e, portanto, não é possível setar target neles com funções de target normal. Além disso, o callBack onTarget() não funciona para monstros. Desde então estou em busca de uma forma de fazer monstros lutarem entre si sem mexer na source e, com algumas sugestões do Lobo @Night Wolf eu consegui chegar a algo bem satisfatório para o que eu precisava. Portanto, compartilho com você a base do sistema (fiz outras coisas para o meu objetivo que acho bobeira postar aqui, mas a base do sistema de luta está aqui). Então vamos lá. Primeiramente, esse sistema é baseado em dois eventos: onThink (que repete de x em x segundos) e onAttack(para evitar que o monstro ataque players quando estiver atacando monstros. Vá em creaturescripts e crie as seguintes tags em creaturescripts.xml: <event type="think" name="monsters" event="script" value="monsters.lua"/> <event type="attack" name="monstersatt" event="script" value="monsters.lua"/> Feito isso, vá na pasta lib (data/lib) e crie um arquivo chamado monsterslib.lua. La dentro coloque: Feito isso, agora crie um arquivo chamado monsters.lua dentro de creaturescripts/scripts, e cole isso dentro Pronto é isso, você tem um pequeno framework configurável para fazer seus monstros se matarem. Para implementar o script no monstro basta ir no arquivo .xml dos monstros que deseja incluir esse sistema e colocar, logo após as defense, a tag: <script> <event name="minionatt"/> <event name="minion"/> </script> Abaixo um exemplo de utilização do framework, simulando uma luta de "raças" entre dwarfs e orcs de diferentes tipos: O código está bem auto explicativo. Qualquer dúvida me avisem. Espero que gostem. Abraços,
  16. Já que tô de bobeira nessa madrugada, não custa nada refazer uns sistemas né. O sistema consiste em não permitir o uso do Magebomb ou fazer (o famoso) MC. antimagemc.lua (data/creaturescripts/scripts) Creaturescripts.xml (data/creaturescripts) <event type="login" name=antimagemc" event="script" value="antimagemc.lua"/> PS: Tirei os acentos do script para evitar futuros bugs. PS²: Eu tirei o script de um fórum gringo e reformulei. Créditos: Gringo desconhecido.
  17. Créditos a GodFather. Objetivo Você normalmente começa com a wand of vortex nos servidores. Daí, quando pega nível suficiente pra usar a próxima wand (wand of dragonbreath), ganha ela automaticamente. Assim por diante até a wand of voodoo. Funciona em Druids também! Tutorial Vá até data/creaturescripts/scripts/ e crie o arquivo evoluirwand.lua, coloque: local items = { {13,2191,2186,-1}, {19,2188,2185,0}, {22,8921,8911,1}, {26,2189,2181,2}, {33,2187,2183,3}, {37,8920,8912,4}, {45,8922,8910,5}, {99999999999} } local stuff = {2190,2182,2191,2188,8921,2189,2187,8920,8922,2186,2185,8911,2181,2183,8912,8910} function onAdvance(cid, skill, oldlevel, newlevel) local place = 0 local st = 23636 local blala = newLevel if isInArray({1,2,5,6},getPlayerVocation(cid)) then if skill == 8 then for x = 1, #items do if newlevel >= items[x][1] and newlevel < items[x+1][1] then place = x end end if place > 0 then if getPlayerStorageValue(cid,st) <= items[place][4] then local byvoc = getPlayerVocation(cid) if getPlayerVocation(cid) > 4 then byvoc = getPlayerVocation(cid)-4 end if isInArray(stuff,getPlayerSlotItem(cid,5).itemid) then doRemoveItem(getPlayerSlotItem(cid,5).uid) elseif isInArray(stuff,getPlayerSlotItem(cid,6).itemid) then doRemoveItem(getPlayerSlotItem(cid,6).uid) end doPlayerAddItem(cid,items[place][byvoc+1],1) doPlayerSendTextMessage(cid,4,"Você evoluiu e ganhou uma nova wand: "..getItemNameById(items[place][byvoc+1])..".") setPlayerStorageValue(cid,st,items[place][4]+1) end end end end return TRUE end Agora vá em data/creaturescripts, abra o arquivo creaturescripts.xml e adicione a seguinte linha: <event type="advance" name="EvoluirStaff" event="script" value="evoluirwand.lua"/> Por último, vá em data/creaturescripts/scripts, abra login.lua e adicione a seguinte linha após onLogin(cid): registerCreatureEvent(cid, "EvoluirStaff")
  18. Olá xTibianos, hoje trago à vocês um sistema meio simples, e que talvez muitos queiram... Bom, o sistema é Held Machine ! Sim, é aquela máquina que funde os Tokens e transforma em Helds. Irei deixar as informações sobre O sistema de Held Machine, Tokens e Helds abaixo ! http://spoilerspxg.blogspot.com.br/p/held-items.html Bom, vamos logo ao que interessa ! Em data/XML/channels.xml, você deverá criar canais relativos a cada opção de troca, seguindo o modelo: <channel id="ID_do_canal" name="Nome_do_canal"> <vocation id="10"/> </channel> Exemplos: <channel id="22" name="20 Devoted Token (Tier 1-2)"> <vocation id="10"/> </channel> <channel id="23" name="70 Mighty Token (Tier 1-3)"> <vocation id="10"/> </channel> Depois, na mesma pasta, vocations.xml: <vocation id="10" name="Held Machine" description="a pokemon trainer" needpremium="0" gaincap="0" gainhp="15" gainmana="0" gainhpticks="2" gainhpamount="3" gainmanaticks="0" gainmanaamount="0" manamultiplier="1.1" attackspeed="-1" soulmax="251" gainsoulticks="-1" fromvoc="1"> <formula meleeDamage="0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.0" club="1.0" sword="1.0" axe="1.0" distance="1.0" shielding="1.0" fishing="3.0" experience="1.0"/> </vocation> data/actions/scripts, código da máquina de troca: function onUse(cid) doPlayerSetVocation(cid, 10) openChannelDialog(cid) return true end data/creaturescripts/scripts: local trade_options = { --[channel_id] = {token = {token_itemid, amount}, results = {held_itemid, held_itemid, held_itemid, ...}}, } function onJoinChannel(cid, channelId, users, isTv) local option = trade_options[channelId] if not option then return false end doPlayerSetVocation(cid, 1) if doPlayerRemoveItem(cid, option.token[1], option.token[2]) then local result = option.results[math.random(#option.results)] doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "In trade of "..option.token[2].."x "..getItemNameById(option.token[1])..", you received: "..getItemNameById(result)..".") doPlayerAddItem(cid, result, 1) else doPlayerSendTextMessage(cid, 27, "You do not have "..option.token[2].."x "..getItemNameById(option.token[1])..".") end return false end Configure na tabela trade_options as opções de troca, seguindo o modelo: [iD_do_canal] = {token = {ID_do_token, quantidade}, results = {IDs_dos_helds}}, Tag: <event type="joinchannel" name="Held_Machine" event="script" value="nome_do_arquivo.lua"/> Em login.lua: registerCreatureEvent(cid, "Held_Machine") Créditos: Zipter98 ( pelo sistema ); Eu ( por trazer ).
  19. Isso não é inédito em OTS, mas fiz o meu sistema de Caçador de Recompensa (Bounty Hunter) 1. Informações sobre o sistema Sistema de pontos por recompensa incluído (configurável) Rank de maiores caçadores Rank de maiores recompensas Lista de jogadores com recompensa online 2. Funcionamento Você fala com o NPC, que oferece várias opções Você pode colocar uma recompensa para a morte de alguém (post), pegar seu dinheiro por caçar alguém (reward), checar as maiores recompensas (most wanted), checar seus pontos de caçador (points) ou obter informações gerais sobre o funcionamento (information) Para colocar uma recompensa, você deve fornecer um nome. Se esse jogador existir, você deverá oferecer um valor (mínimo configurável). Depois, desse valor será descontada a taxa da guilda dos assassinos (configurável). Se você tiver esse dinheiro, ele será removido e o nome dessa pessoa estará na lista de procurados, para que o jogador que a matar (não funciona para o jogador que colocou a recompensa) ganhe a recompensa devida Quando um jogador mata outro procurado, ele é avisado de que ganhou a recompensa e os pontos (se estiver ativado). Para pegar a recompensa, ele deve falar com o NPC Para saber quais jogadores procurados estão online e quais são suas recompensas, foi adicionado um quadro especial que lista esses jogadores, assim como um outro quadro que lista os maiores caçadores do servidor 3. Códigos 3.1. Tags Creaturescripts.xml: <event type="kill" name="bountykill" event="script" value="bountykill.lua"/> <event type="look" name="bountyboard" event="script" value="bountyboard.lua"/> talkactions.xml: <talkaction words="/installbounty" access="5" event="script" value="bountyinstall.lua"/> 3.2. NPC Crie um arquivo: npcs/Tyrion.xml 3.3. Códigos lua Adicionar em creaturescripts/login.lua, junto com os demais registerCreatureEvent registerCreatureEvent(cid, "bountyboard") registerCreatureEvent(cid, "bountykill") lib/bountylib.lua creaturescripts/scripts/bountykill.lua creaturescripts/scripts/bountyboard.lua npcs/scripts/assguild.lua talkactions/scripts/bountyinstall.lua 4. Configuração / Instalação Você deve usar o comando /installbounty pelo GOD para que o sistema adicione a coluna necessária no seu banco de dados As configurações disponíveis estão no bountylib.lua O sistema de pontos apenas adiciona e conta os pontos. Cabe a sua imaginação/habilidade fazer algo a partir deles Para adicionar o rank de melhores caçadores e a lista de procurados online, você deve criar dois itens (eu recomendo o quadro negro - id 1810, por exemplo) e colocar os actionids 3550 e 3551. Assim, quando alguém der look, aparecerão as respectivas listas [óbvio] O sistema depende de que você adicione o NPC no mapa [/óbvio] 5. Bugs Apesar de ter testado bastante, ainda há espaço para alguns bugs. Caso você os encontre, por favor poste DETALHADAMENTE qual é o erro para que eu possa consertar 6. Considerações Finais Espero críticas/sugestões/elogios sobre o código e seu funcionamento
  20. Boa noite, venho aqui postar esse script que achei em um tópico de 2011 que um membro abriu pedindo o script. Vamos lá! Primeiro vá em creaturescripts/scripts/login.lua e adicione isso: registerCreatureEvent(cid, "LevelMax") Depois adicione essa tag em creaturescripts.xml: <event type="advance" name="LevelMax" event="script" value="levelmax.lua"/> Agora crie um arquilo .lua com o nome de levelmax e adicione este código dentro: local LevelMax = 180 function onAdvance(cid, skill, oldLevel, newLevel) if skill == 8 then if newLevel >= LevelMax then doPlayerAddExp(cid, getExperienceForLevel(LevelMax)-getPlayerExperience(cid)) return false end end return true end Para trocar o level máximo basta editar em: local LevelMax = 180 Espero que ajude! Créditos a MatheusMkalo
  21. No meu dbo q eu baixei tem um bug muito escroto os players do nada viram outras vocações alguém poderia me ajudar eu ja vi kaio virando bardork shenron viriando buu reborn ,buu virando goku black reborn oq poderia esta acontecendo?
  22. Olá, este é um script que adiciona todas as bless em jogadores que tiverem o level menor que o configurado em creaturescripts/scripts crie um arquivo chamado autoBless.lua e cole isso: local blessings = {1, 2, 3, 4, 5}local level = 150function onLogin(cid) if getPlayerLevel(cid) <= level then for cont = 1, table.maxn(blessings) do doPlayerAddBlessing(cid, blessings[cont]) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu todas as blessings por causa que é nivel menor que "..level.."!") endend em creaturescripts.xml adicione a seguinte tag: <event type="death" name="autoBless" event="script" value="autoBless.lua"/> em creaturescripts/scripts no arquivo login.lua adicione a seguinte tag: registerCreatureEvent(cid, "autoBless")
  23. Ola galera. tenho com script de amuleto para red skull. Mas olhe bem, quando o cara morre ele volta pra lvl 1, sera que alguém pode modificar pra que quando o cara morra não aconteça isso ? AGRADEÇO DESDE JA ! id = 10718 --id do aol function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isPlayer(cid) == true then if (getPlayerSlotItem(cid, 2).itemid == id) then pos = getCreaturePos(cid) doCreatureSetDropLoot(cid, false) doPlayerSetLossPercent(cid, experience, 0) doSendMagicEffect(pos, 49) end return TRUE end end
  24. Fala Galera BLZ Vim Trazer Uma Script Feita Port Min De Msg QUando Vc Logar Na Sua Conta Vai Em Creaturescipt e crie Uma Arquivo Chama Admlg Ficnado Admlg.lua e ADD Dps Vai em creaturescript.xml e add SE Gosta Deixe seu REP+ Creditos A Minha pela Script
  25. Créditos ao Critico e tev. Prévia Tutorial Crie um arquivo KillsandDeath.lua function onLook(cid, thing, position, lookDistance) function getDeathsAndKills(cid, type) -- by vodka local query,d = db.getResult("SELECT `player_id` FROM "..(tostring(type) == "kill" and "`player_killers`" or "`player_deaths`").." WHERE `player_id` = "..getPlayerGUID(cid)),0 if (query:getID() ~= -1) then repeat d = d+1 until not query:next() query:free() end return d end if isPlayer(thing.uid) then doPlayerSetSpecialDescription(thing.uid, "\n"..(getPlayerSex(thing.uid) == 0 and "She" or "He").." has Killed: ["..getDeathsAndKills(thing.uid, "kill").."] Players.\n"..(getPlayerSex(thing.uid) == 0 and "She" or "He").." has Died: ["..getDeathsAndKills(thing.uid, "death").."] Times") end return true end No creaturescript.xml, coloque: <event type="look" name="showKD" event="script" value="KillsandDeath.lua"/> Em creaturescript/script/login.lua, coloque: registerCreatureEvent(cid, "showKD")
×
×
  • Create New...