Boa iniciativa
info
Grupo: Infante
Registrado: 27/01/13
Posts: 1.7k
Reputação: +104
Gênero: Masculino

info
Grupo: Campones
Registrado: 16/09/12
Posts: 88
Reputação: +21

Gostaria de um script de um npc que adicionasse o nome de players numa tabela e quando atingir o numero de 30 players na tabela não será possivel adicionar mais nada na tabela
Editado Setembro 18 por WillOliveira
info
Grupo: Infante
Registrado: 28/01/12
Posts: 1.6k
Reputação: +262
Gênero: Masculino

--RETIRED--
Editado Setembro 19 por FlamesAdmin
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

Boa iniciativa!
Bom, ja q to aki, gostaria de uma coisita
um sistema que o player entrasse em um teleport e nao poderá usar a habilidade Fly, (só Ride) no pokemon em tal lugar.
sistema igual do PxG das outlands, que nao pode dar fly dentro da outland.
Cara, preste atenção antes de postar, por favor:
Embora eu esteja tentando aprender um pouco, eu não gosto e ainda não sei muita coisa específica sobre servidores derivados, então pedidos deste tipo devem ser postados fora desse tópico
Respondendo ao Will, como combinado por Skype, aqui estão as funções que você deve precisar pro evento:
-- Função que retorna a lista como uma tabela (array) function getEventList() if getGlobalStorageValue(85671) == -1 then setGlobalStorageValue(85671, '') end local list = getGlobalStorageValue(85671) if type(list) == 'string' then list = string.explode(list, ', ') end return type(list) == 'table' and list or false end -- Função que adiciona o nome de um jogador à lista function doAddEventPlayerName(name) local list = getEventList() if not list then return false end if #list >= 30 then return false end table.insert(list, name) list = table.concat(list, ', ') setGlobalStorageValue(85671, list) return true end -- Função que checa se já tem um jogador com esse nome na lista function doCheckEventListName(name) local list = getEventList() if type(list) == 'table' then for pos, _name in ipairs(list) do if name:lower() == _name:lower() then return true end end end return false end -- Função que apaga os nomes da lista function doResetEventList() setGlobalStorageValue(85671, '') return true end
Editado Setembro 19 por omega blueheaven
info
Grupo: Campones
Registrado: 16/09/12
Posts: 88
Reputação: +21

Obrigado rep+
Olá eu tenho 2 pedidos acho que simples... 8.60, TFS.
Primeiro pedido:
[Actions]
Uma Alavanca, essa alavanca ficara em uma parte do meu mapa então preciso que ela funcione em ActionID, que quando o player puxa a alavanca ele ganhe 30% a mais de exp (tipo double exp, mas em porcentagem). Essa exp extra duraria 2 horas e o player só poderia puxar a alavanca outra vez depois de 3 horas após ele ter puxado a primeira. Então seriam 2 storages, a da exp extra por 2h, e a da alavanca que só poderia ser puxada de 3 em 3h.
Tenho uma script que pode ser alterada se vc quiser economizar tempo.
function onUse(cid, item, frompos, item2, topos) local pausa = 1800000 -- (1000 = 1 segundos) Tempo que o script durará local texto = 'You receive double the experience to kill a monster for 30 minutes.' -- Texto que irá receber ao usar a potion. textofinal = 'Its just minutes.' -- Texto que irá receber quando o efeito da potion acabar. local exp = 2 -- O quanto que você quer que dobre sua experiencia, por exemplo 2 é 2x as rates do seu server. expfinal = 1 --Não mude, isso é para a experiencia voltar ao normal. if item.itemid == 7443 then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp) doSendMagicEffect(frompos,13) doPlayerSendTextMessage(cid,22,texto) addEvent(potion,pausa,cid) end end function potion(pos, cid) doPlayerSetExperienceRate(pos,expfinal) doPlayerSendTextMessage(pos,22,textofinal) end
Segundo pedido:
[GlobalEvents]
Um Sistema de loteria que sorteasse 1 dia de Premium account para algum player online, mas a loteria só sorteará para quem NÃO tiver premium, ou seja, somente para players free account.
Obrigado.. se puder me ajudar.
Editado Setembro 19 por Lucasyeah
info
Grupo: Banidos
Registrado: 16/10/12
Posts: 596
Reputação: +31
Char no Tibia: Nao Sei

aew manolow parabens pela iniciativa aew bem oq eu vou pedir é tipo um survival: uma arena q para entrar presisa clicar numa alavanca e se alguem entrar n pode mais ninguem entrar ate o player morrer (ele ao morrer n perde nd), tera 20 etapas 1° vinte mosntros, 2° 30 monsters... assim vai ater xegar nos 200 monstros (etapa 20°) tera a cd etapa 5 monstros diferentes (exemplo(dragon, dragon lord, demon , undead dragon, thunder dragon...) e tmbm cd etapa dificutando com monstros mais fortes...; se ele morrer numa etapa ganhas x cristai coins(1°10k, 2° 20k 3° 40k 4° 60k 5° 80k 6°120k 7° 140k 8°200k 9°220k 10°400k 11°450k 12°500k 13°600k 14°700k 15°800k 16°900k 17°1kk 18°1500k 19°2kk 20°3kk) se ele concluiu tds as etapas nasce tp num determinado local para ele sai e ganha a recompenssa. se n intendeu eu te explico melhor.
info
Grupo: Infante
Registrado: 27/01/13
Posts: 1.7k
Reputação: +104
Gênero: Masculino

Survive no NTOBR
info
Grupo: Banidos
Registrado: 16/10/12
Posts: 596
Reputação: +31
Char no Tibia: Nao Sei

Survive no NTOBR
n. qro igual do radbr
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

@Lucasyeah
Seus sistemas: a loteria foi bem tranquilo, agora a alavanca foi bem mais chatinha. Tive que refazer umas funções que eu achava que existia e testar bastante pra não dar problemas sérios (brincar com funções de login é perigoso!)
1. Loteria Premium:
- TAG globalevents.xml
<globalevent name="Loteria Premium" interval="7200000" event="script" value="loteriapremium.lua"/>Esse intervalo é o intervalo em milissegundos entre uma execução da loteria e outra. Do jeito que eu coloquei, são 2hs (1h = 3600000ms)
- Arquivo globalevents/scripts/loteriapremium.lua
-- Loteria premium feito por Omega (http://www.xtibia.com/forum/topic/221228-peca-aqui-o-seu-sistemaevento/) function onThink() local intervalo = {tipo = 'horas' --[[ou 'minutos' ou 'segundos' ou 'dias']], quant = 50 --[[ quantas horas/minutos/segundos/dias a loteria vai demorar pra acontecer de novo]]} local players = getPlayersOnline() local free_players = {} for _, pid in ipairs(players) do if not isPremium(pid) then table.insert(free_players, pid) end end local lucky_guy = 0 if #free_players > 0 then lucky_guy = free_players[math.random(1, #free_players)] doBroadcastMessage(getCreatureName(lucky_guy)..' ganhou 1 dia premium na loteria! Proximo sorteio em '..intervalo.quant..' '..intervalo.tipo..'!') doPlayerAddPremiumDays(lucky_guy, 1) end return true end
2. Alavanca de Experiência Extra:
- TAG actions.xml
<action actionid="ACTIONID" script="extraexplever.lua"/>
- TAG creaturescripts.xml
<event type="login" name="extraExpLogin" event="script" value="extraexplogin.lua"/>
- lib/extraexp.lua
-- Alavanca de experiência extra feita por Omega (lib) extraRate = 0.5 -- 1 = 100%, 0.3 = 30% -- Exhaustion da alavanca exhaustLever = 3 * 3600 -- 1 * 3600 = 1 hora -- Tempo que a exp extra irá durar extraRateTime = 2 * 3600 function getPlayerExtraExpRate(cid) return (getPlayerRates(cid)[8] - 1) end function doPlayerSetExtraExpRate(cid, extraRate) return doPlayerSetRate(cid, 8, 1 + extraRate) end function doRemoveExtraExpRate(cid) if isCreature(cid) then if getPlayerExtraExpRate(cid) > 0 then doPlayerSetRate(cid, 8, 1) doPlayerSendTextMessage(cid, 21, 'Your extra experience rate has ended.') end return true end return false end
- creaturescripts/scripts/extraexplogin.lua
-- Alavanca de experiência extra feita por Omega (creaturescript) function onLogin(cid) if getPlayerStorageValue(cid, 696970) > os.time() then doPlayerSetExtraExpRate(cid, extraRate) addEvent(doRemoveExtraExpRate, (getPlayerStorageValue(cid, 696970) - os.time()) * 1000, cid) end return true end
- actions/scripts/extraexplever.lua
-- Alavanca de experiência extra feita por Omega (action) function onUse(cid, item, fromPos) if getPlayerStorageValue(cid, 696969) <= os.time() then doPlayerSetExtraExpRate(cid, extraRate) doPlayerSendTextMessage(cid, 22, 'You got '..extraRateTime / 3600 ..' hours of '.. extraRate * 100 ..'% extra experience.') setPlayerStorageValue(cid, 696969, os.time() + exhaustLever) doSendMagicEffect(getThingPos(cid), 13) addEvent(doRemoveExtraExpRate, extraRateTime * 1000, cid) setPlayerStorageValue(cid, 696970, os.time() + extraRateTime) if item.itemid % 2 == 1 then doTransformItem(item.uid, item.itemid + 1) else doTransformItem(item.uid, item.itemid - 1) end else doPlayerSendCancel(cid, 'You have to wait '.. math.ceil((getPlayerStorageValue(cid, 696969) - os.time())/60)..' minutes to use this lever again.') doSendMagicEffect(getThingPos(cid), 2) end return true end
As configurações devem ser feitas no arquivo lib. Qualquer dúvida, posta aí. Só achei um bug bem estranho: quando coloquei a extra rate pra 30%, o jogador ficava ganhando experiência quebrada, por exemplo, era pra ganhar 130 e ganhava 129. Quando coloquei pra 50%, passou a ganhar o valor certo.
info
Grupo: Campones
Registrado: 26/12/12
Posts: 68
Reputação: +1
Char no Tibia: Skailord

Tenho um mas eu acho que é um pouco dificil, ai vai, uma script para um monstro que quando ele tiver metade do life ele dá um efeito
e se transforma em outro monstro mais forte e com outros poderes.
é meiu complicado(pelo menos para mim) mas vale a pena tentar.
desde já agradeço pela atenção.
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

@Skailord
O seu é bem tranquilo.
[Testei em 8.6]
1. Você deverá usar dois monstros diferentes, um vai se transformar no outro quando chegar em uma porcentagem de vida configurável. Abra o arquivo .xml do monstro que vai se transformar e adicione
<script> <event name="Transformation"/> </script>
2. TAG creaturescripts.xml:
<event type="statschange" name="Transformation" event="script" value="monstertrans.lua"/>
3. Arquivo monstertrans.lua em creaturescripts/scripts
-- Código feito por Omega (http://www.xtibia.com/forum/topic/221228-peca-aqui-o-seu-sistemaevento) function doSendAreaEffect(pos, effect, radius) for x = pos.x-radius, pos.x+radius do for y = pos.y-radius, pos.y+radius do doSendMagicEffect({x=x, y=y, z=pos.z}, effect) end end return true end function onStatsChange(cid, attacker, type, combat, value) registerCreatureEvent(cid, "empe_dmg") if isPlayer(cid) then return true end if type == 1 then local mhp = getCreatureMaxHealth(cid) local percentChange = 10 local newMonster = 'Demon' if (getCreatureHealth(cid) - value) <= percentChange/100*mhp then local pos = getThingPos(cid) doRemoveCreature(cid) newMonster = doCreateMonster(newMonster, pos) doCreatureAddHealth(newMonster, -math.floor(getCreatureMaxHealth(newMonster) * (100-percentChange) / 100)) doSendAreaEffect(pos, 5, 1) return false end end return true end
OBS.: consertei um erro que deixava invocava o monstro com a vida errada (19/09/13 22:31)
@Vinne
Desculpe por pular a sua vez por enquanto, mas o seu pedido é bem mais complexo
Editado Setembro 19 por omega blueheaven
info
Grupo: Visconde
Registrado: 21/08/11
Posts: 470
Reputação: +5
Char no Tibia: ...

Pedido Lotery system :
O sorteio ocorre a cada 3 horas e 1 minuto antes de sortear ele fala como no exemplo abaixo e o premio é variado somente em crystais coins podendo ganhar de 10 crystal coins até 15.
OBS: essas mensagens aparecem na tela para todos jogadores com a cor branca.
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

@Kenny
TAG globalevents.xml
<globalevent name="Loteria Aleatoria" interval="180000" event="script" value="loteriarandom.lua"/>Arquivo loteriarandom.lua
function doLottery()
local players = getPlayersOnline()
local true_players = {}
for _, pid in pairs(players) do
if getPlayerGroupId(pid) < 3 then
table.insert(true_players, pid)
end
end
if #true_players < 1 then return true end
local prize = 10 + math.random(0,5)
local winner = true_players[math.random(1, #true_players)]
doPlayerAddItem(winner, 2160, prize)
doBroadcastMessage('Parabens '..getCreatureName(winner)..', voce ganhou '..prize..' crystal coins!.', 22)
return true
end
function onThink()
doBroadcastMessage('Teremos um sorteio em um minuto!', 22)
addEvent(doLottery, 60000)
return true
end





info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum
Bom, quero abrir aqui um espaço para pedidos mais complexos, como um evento ou um sistema. Esse tipo de pedido geralmente não é atendido na seção de Pedidos e Dúvidas por ser trabalhoso demais se você for atender todo mundo, mas como eu tô sem ideias, resolvi criar um tópico para atender aos pedidos mais interessantes e publicar no fórum.
Considerações:
Editado Setembro 19 por omega blueheaven