Ir para conteúdo
  • 0

Peça Aqui o Seu Sistema/Evento!


Omega

Pergunta

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:

  • Use o bom-senso, não faça pedidos descabíveis
  • Explique o MÁXIMO que você puder sobre o que você quer, seja específico, descreva EXATAMENTE como deve acontecer
  • 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
  • Se alguém mais se disponibilizar a atender um pedido postado nesse tópico, por favor deixe um comentário avisando, para que não seja feito duas vezes
  • Recomendo a leitura desse tópico para qualquer pedido/dúvida, mas tais requisitos são especialmente importantes nesse tópico: Dicas para que seu pedido seja atendido

 

Editado por omega blueheaven
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

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 por WillOliveira
Link para o comentário
Compartilhar em outros sites

  • 0

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 por omega blueheaven
Link para o comentário
Compartilhar em outros sites

  • 0

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 por Lucasyeah
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

@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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

@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 por omega blueheaven
Link para o comentário
Compartilhar em outros sites

  • 0

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.

 

16:58 [sorteio] Teremos um sorteio em um minuto!
16:59 [sorteio] Parabéns Kina Skynis, você ganhou 14 crystal coins.
19:58 [sorteio] Teremos um sorteio em um minuto!
19:49 [sorteio] Parabéns Sabugo, você ganhou 13 crystal coins.
Link para o comentário
Compartilhar em outros sites

  • 0

@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

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...