Ir para conteúdo
  • Cadastre-se

Posts Recomendados

ArenaUp System

 

Ola pessoal venho por meio deste topico disponibilizar um sistema de arenaup que eu desenvolvi para meu server!

 

O sistema funciona da seguinte maneira:

"!arenaup enter,<monster>" -> Player entra na arena, apartir disto será sumonado 9 monstros a cada 5 segundos

 

Condições:

Necessario item e level minimo para entrar.

O player fica dentro da arena no maximo 1h configuravel.

Caso morrer a arena é limpa e setada como livre.

Player so pode entrar na arena com algum montro preselecionado configuravel.

 

"!arenaup leave" -> Player sai da arena.

 

Instalação do Script

Explicações das variaveis na lib, configurações do script tb na lib

Em data/lib crie um arquivo chamado ArenaLib.lua e coloque isso dentro:

-- posini = sqm superior esquerdo da arena
-- posfim = sqm inferior direito da arena
-- center = posição central da arena
arenasLib = { 
  {posini = {x=235,y=46,z=15},posfim = {x=241,y=52,z=15}, center = {x=238,y=49,z=15}, ocupado = 0},
  {posini = {x=243,y=46,z=15},posfim = {x=249,y=52,z=15}, center = {x=246,y=49,z=15}, ocupado = 0},
  {posini = {x=251,y=46,z=15},posfim = {x=257,y=52,z=15}, center = {x=254,y=49,z=15}, ocupado = 0},
  {posini = {x=259,y=46,z=15},posfim = {x=265,y=52,z=15}, center = {x=262,y=49,z=15}, ocupado = 0},
  {posini = {x=267,y=46,z=15},posfim = {x=273,y=52,z=15}, center = {x=270,y=49,z=15}, ocupado = 0},
  {posini = {x=275,y=46,z=15},posfim = {x=281,y=52,z=15}, center = {x=278,y=49,z=15}, ocupado = 0},
  {posini = {x=283,y=46,z=15},posfim = {x=289,y=52,z=15}, center = {x=286,y=49,z=15}, ocupado = 0},
  {posini = {x=291,y=46,z=15},posfim = {x=297,y=52,z=15}, center = {x=294,y=49,z=15}, ocupado = 0},
  {posini = {x=299,y=46,z=15},posfim = {x=305,y=52,z=15}, center = {x=302,y=49,z=15}, ocupado = 0},
  {posini = {x=307,y=46,z=15},posfim = {x=313,y=52,z=15}, center = {x=310,y=49,z=15}, ocupado = 0},
  {posini = {x=235,y=54,z=15},posfim = {x=241,y=60,z=15}, center = {x=238,y=57,z=15}, ocupado = 0},
  {posini = {x=243,y=54,z=15},posfim = {x=249,y=60,z=15}, center = {x=246,y=57,z=15}, ocupado = 0},
  {posini = {x=251,y=54,z=15},posfim = {x=257,y=60,z=15}, center = {x=254,y=57,z=15}, ocupado = 0},
  {posini = {x=259,y=54,z=15},posfim = {x=265,y=60,z=15}, center = {x=262,y=57,z=15}, ocupado = 0},
  {posini = {x=267,y=54,z=15},posfim = {x=273,y=60,z=15}, center = {x=270,y=57,z=15}, ocupado = 0},
  {posini = {x=275,y=54,z=15},posfim = {x=281,y=60,z=15}, center = {x=278,y=57,z=15}, ocupado = 0},
  {posini = {x=283,y=54,z=15},posfim = {x=289,y=60,z=15}, center = {x=286,y=57,z=15}, ocupado = 0},
  {posini = {x=291,y=54,z=15},posfim = {x=297,y=60,z=15}, center = {x=294,y=57,z=15}, ocupado = 0},
  {posini = {x=299,y=54,z=15},posfim = {x=305,y=60,z=15}, center = {x=302,y=57,z=15}, ocupado = 0},
  {posini = {x=307,y=54,z=15},posfim = {x=313,y=60,z=15}, center = {x=310,y=57,z=15}, ocupado = 0}
}

-- monstros disponiveis para a arena, serão mostrados quando usar !arenaup monsters
arenaMonsters = {
  "Demon",
  "Dragon Lord",
  "Frost Dragon",
  "Dark Torturer",
  "Fury",
  "Behemoth",
  "Destroyer",
  "Draken Warmaster",
  "Draken Elite",
  "Draken Abomination",
  "Draken Spellweaver",
  "Warlock",
  "Wyrm",
  "Hydra",
  "Medusa",
  "Serpent Spawn",
  "Giant Spider",
  "Hellfire Fighter",
  "Infernalist",
  "Lizard Chosen",
  "Grim Reaper",
  "Nightmare",
  "Hellhound",
  "Undead Dragon",
  "Sea Serpent",
  "Defiler",
  "Ghastly Dragon",
  "Juggernaut"
}
-- configurações
arenaConfig = {
  lvlmin = 200, -- level minimo para entrar na arena
  item_id = 6536, -- item q o player precisa ter para poder entrar na arena
  tempo = 60, -- tempo em minutos que o player pode ficar upando na arena
  temple = {x=161,y=53,z=7} -- posição do templo da ciadade principal do server
}


----------------------------- Não mexa abaixo a menos que saiba o que esta fazendo ------------------------------
arenaStorages = {
  arena = 96353,
  tempo = 96354
}


function limparArena(posInicial,posFinal)
  for i = posInicial.x, posFinal.x do
    for j = posInicial.y, posFinal.y do
      creature = getThingFromPos({x=i,y=j,z=15,stackpos=253})
      if isMonster(creature.uid) then
        doRemoveCreature(creature.uid)
      end
      doCleanTile({x=i,y=j,z=15})
    end
  end
end

function arenaSummon(cid, monster, arena)
  if getPlayerStorageValue(cid, arenaStorages.tempo) < os.time() then
    doTeleportThing(cid,arenaConfig.temple)
    doSendMagicEffect(getThingFromPos(cid),10)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu tempo se esgotou!")
    setPlayerStorageValue(cid,arenaStorages.arena,0)
  end
  cont = 0
  for i = arenasLib[arena].posini.x, arenasLib[arena].posfim.x do
    for j = arenasLib[arena].posini.y, arenasLib[arena].posfim.y do
      creature = getThingFromPos({x=i,y=j,z=15,stackpos=253})
      if isPlayer(creature.uid) then
        cont = cont +1
      end
    end
  end
  if cont ~= 0 then
    for i = 0 , 8 do
      px = math.random(arenasLib[arena].posini.x,arenasLib[arena].posfim.x)
      py = math.random(arenasLib[arena].posini.y,arenasLib[arena].posfim.y)
      pz = 15
      if getTopCreature({x=px,y=py,z=pz,stackpos=253}).uid > 0 then
      else
        doCreateMonster(monster, {x=px,y=py,z=pz})
      end
    end
    addEvent(arenaSummon,5000,cid,monster,arena)
  else
    arenasLib[arena].ocupado = 0
    limparArena(arenasLib[arena].posini,arenasLib[arena].posfim)
  end
end

 

Em creaturescripts.xml:

<event type="PrepareDeath" name="arenaup" script="arenaup.lua"/>

Em creaturescripts/script/login.lua abaixo de function onLogin(cid) coloque:

registerCreatureEvent(cid, "arenaup")

Na mesma pasta cria um arquivo chamado arenaup.lua e coloque:

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
	if getPlayerStorageValue(cid,arenaStorages.arena) ~= 0 then
		setPlayerStorageValue(cid,arenaStorages.arena,0)
	end
return true
end

 

Em talkactions.xml coloque:

<talkaction words="!arenaup" event="script" value="arenaup.lua"/>

em talkactions/scripts crie um arquivo arenaup.lua e coloque dentro:

function onSay(cid, words, param, channel)
	if(param == '') then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "*** Arena Up Configuracoes ***.")
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Para saber os possiveis monstros para se cacar na arena up diga !arenaup monsters.")
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Para entrar na arena diga !arenaup enter,<monster> eh preciso 1 jalapeno pepper para poder entrar.")
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Para sair da arena diga !arenaup leave ou entao vc sera kikado apos uma hora de hunt dentro da arena")
		return true
	end

	if(param == "monsters") then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Monstros disponiveis:")
		msg = ""
		for a,b in ipairs(arenaMonsters) do
			if a == 1 then
				msg = b
			else
				msg = msg .. ", " .. b
			end
		end
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg)
	end

	local t = string.explode(param, ",")

	if (t[1] == 'enter') then
		if getPlayerLevel(cid) > arenaConfig.lvlmin then
			if getTilePzInfo(getCreaturePosition(cid)) == true then
				for a,b in ipairs(arenaMonsters) do
					if string.lower(t[2]) == string.lower(b) then
						pass = true
						break
					else
						pass = false
					end
				end
				if pass == true then
					if doPlayerRemoveItem(cid, arenaConfig.item_id, 1) then
						for a,b in ipairs(arenasLib) do
							if b.ocupado == 0 then
								setPlayerStorageValue(cid,arenaStorages.arena,a)
								doTeleportThing(cid, b.center)
								doSendMagicEffect(getThingPos(cid),10)
								setPlayerStorageValue(cid,arenaStorages.tempo,(os.time() + (arenaConfig.tempo * 60)))
								b.ocupado = 1
								arenaSummon(cid,t[2],a)
								doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem vindo a arena up bom up!")
								break
							else
								doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Todas as arenas estao cheias!")
							end
						end
					else
						doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa de um countess sorrow's frozen tear para poder entrar na arena.")
					end
				else
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Monstro invalido.")
				end
			else
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Eh necessario estar em uma area PZ.")	
			end
		else
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Necessario level 200 para upar na arena.")
		end
	end

	if (t[1] == 'leave') then
		if getPlayerStorageValue(cid,arenaStorages.arena) ~= 0 then
			doTeleportThing(cid,arenaConfig.temple)
			doSendMagicEffect(getThingPos(cid),10)
			sto = getPlayerStorageValue(cid,arenaStorages.arena)
			arenasLib[sto].ocupado = 0
			limparArena(arenasLib[sto].posini,arenasLib[sto].posfim)
			setPlayerStorageValue(cid,arenaStorages.arena,0)
		else
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa estar na arenaup para usar este comando.")
		end
	end
end

 

Após feito isso o script esta instalado!

Editado por Kolisium (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Bagon
      Bom, hoje venho trazer á vocês um sistema de Pet System DIFERENCIADO de alguns presentes no fórum. Este sistema tem diversos comandos diferenciados, como: 
       
      !pet nomedopet este comando irá sumonar o pet. 
      !remove irá remover o pet.
      !fale eu sou lindo o pet falará "eu sou lindo"
      !conversar o pet irá conversar com vc. 
       
      Então sem mais delongas vamos ao script.
       
      OBS: SCRIPT TESTADO SOMENTE EM TFS 0.4/0.3, e este script foi feito com a intenção de ser vendido no site do ot ou em poderá usar como quest usando o item selecionado como premio. fique ao seu critério.
       
      Primeiro vá até a pasta talkaction/script e crie um arquivo chamado petsystem.lua, depois coloque o seguinte script:
       
       
      Agora em talkactions/talkactions.xml adicione a seguinte tag:
       
      <talkaction words="!pet;!remove;!fale;!conversar" event="script" value="petsystem.lua" />  
      EXPLICAÇÂO:
      As partes em Negrito, são os pets. Você pode alterar ou criar monstros para fazer eles como pets. (Recomendo criar um monstro para que seja somente pet.)
       
      Exemplo: ["dog"]= {stor=78552},      
       
       
      Lembrando que é necessário mudar esta parte no script do monstro colocado a cima.
       
      <flag attackable="1" /> para :
       
      <flag attackable="0" />  
      agora vá em action/script e crie um arquivo chamado pet com o seguinte script:
       
       
      e vá em action.xml e adiciona a seguinte tag:
       
      <action itemid="10063" script="pet.lua"/> Explicação: Na tag da action o itemid é o item que deverá ser usado para ganhar a storage 78552, e assim podera sumonar o monstro com esta storage.
       
                                              
                                                         CRIE UMA ACTION COM A TAG A CIMA PARA CADA MONSTRO COLOCADO NA TALKACTION,
                                                         BASTA VC ALTERAR A STORAGE DO SCRIPT DA ACTION
                                                         EXEMPLO: em action altere as storage que estão em vermelho, como mostra abaixo
       
                                                              if getPlayerStorageValue(cid, 78552) < 1 then
                                                              setPlayerStorageValue(cid, 78552, 1)
       
                                                         aonde tem 78552 altere para 78553 que no caso é a storage do cyclops escolhido lá no script da talkaction
                                                         e assim susecivelmente.
       
       
       
      CREDITOS:
      Mulizeu
      Smartbox
      Bagon 
       
    • Por Imperius
      Olá, pessoal! Acabei encontrando um script que tinha feito a um tempo atrás. Estou compartilhando aqui para quem quiser usar ou melhorar.
       
      É bem parecido com os outros sistemas de roleta, igual deste tópico: https://tibiaking.com/forums/topic/101557-action-cassino-roleta-de-items/
       
      Como funciona?
       
      O "Treasure Chest" é um item custom, onde o jogador têm a possibilidade de ganhar itens raros ou bem meia boca. Tudo dependerá da sorte.
       
      O jogador precisa tacar o treasure chest na bancada e acionar a alavanca. O treasure chest irá se transformar em vários itens de forma randômica no qual o jogador poderá ou não ganhar. No final, apenas um item é entregue ao jogador.
       
      Para entender melhor o seu funcionamento, segue o GIF abaixo:
       

       
       
      em data > actions > actions.xml
       
       
      em data > actions > scripts > crie um arquivo chamado leverTreasureChest.lua
       
       
      no banco de dados do servidor, adicione o seguinte código em "SQL":
       
       
       

      Também estou disponibilizando uma página PHP, para quem quiser usar no site do servidor. Na página tem informações sobre o funcionamento, quais são os possíveis prêmios e a lista de jogadores que ganharam os itens raros.
       

       
       
      Espero ter ajudado de alguma forma! : )
       
      treasure_chest.php
    • Por Linus
      Você  pode configurar se quer que o preço aumente a cada reset, se quer que o level pra resetar aumente e se vc quer que a vida resete junto (e quanto % da vida atual será a vida após resetar).
       
       
      Testado em tfs 1.1, Versão 10.77
       
       
       
       
      Vá em data/npc/lib/ crie npc_resets.lua :
       



       
      Você pode editar mexendo aqui. no script acima :
      config = { minlevel = 150, --- Level inical para resetar price = 10000, --- Preço inicial para resetar newlevel = 20, --- Level após reset priceByReset = 0, --- Preço acrescentado por reset percent = 30, ---- Porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total) maxresets = 50, ---- Maximo de resets levelbyreset = 0 --- Quanto de level vai precisar a mais no próximo reset } agora em data/npc/ crie reseter.XML :
       



       
       
       
      Agora em data/npc/scripts crie reseter.lua :
       



       
       
       
      Img : 
       

    • Por Sekk
      Bom, procurei esse Castle por MUITO TEMPO, mas não achei em NENHUM LUGAR DA INTERNET. Ontem, eu estava vendo alguns mapas do @Deathrocks, e vi nos prints, que o mapa possuia o evento que eu queria!
       
      Então baixei o mapa e extrai o evento, então venho lhes trazer!
       
       
      Nome: Castle 24H
      Cliente: 8.6
      Versão TFS: 0.4
      Tipo: Evento
       
      Bom, para começar, vamos em actions/scripts e crie 2 arquivos:
       
      castledoor1.lua
       
      castlewar1.lua
       
        Agora em actions.xml adicione as tags:
       
      Agora em monster/traps crie 3 arquivos:
       
      porta.xml
       
      protectcastle.xml  
      statue.xml  
      Agora em monsters.xml adicione as tags:    
      Vamos para movements/scripts e crie 2 arquivos:
       
      castlewar2.lua
       
      level.lua  
      Agora em movements.xml adicione as tags:  
       
      Pronto. Agora você só precisa baixar o mapa, inserir o mesmo ao seu servidor, configurar os teleports, e as hunts dentro do castle etc.
       
      PRINTS:
      1ª parte
       
      2ª parte:
       
      Obs.: Todos os ActionID e monsters já estão no mapa! Você só precisa configurar as coordenadas dos teleports, e o que possui no castle!
       
      Obs².: Tudo o que você pode configurar, já está escrito em cada script!
       
       
      Créditos:
      @DeathRocks
      PC98
      mapa.rar
    • Por MySticaL
      Como funciona esse sistema?
      R-> Simples caso seu otServ for para todos os players, de todos continentes e você não
      queira deixar as funções em lua apenas em uma língua, você pode utilizar esse sistema.
       
      Como usar?
      R-> Após o sistema estar instalado 100%, vai ter 3 comandos: !lang en (setar a linguagem para english), !lang pt (setar a linguagem portuguese) &
      !lang es (setar a linguagem espanõl).

      Vamos começar, vai em data/lib/ e crie um arquivo chamado lang system.lua e coloque isto dentro:
      function getPlayerLanguage(cid) local Lang = db.getResult("SELECT `language` FROM `accounts` WHERE `id` = " .. getPlayerAccountId(cid) .. " LIMIT 1") if Lang:getID() ~= LUA_ERROR then local langid = Lang:getDataInt("language") Lang:free() return langid end return LUA_ERROR end function doPlayerSetLanguage(cid, new) local acc = getPlayerAccountId(cid) if new == 2 then db.executeQuery("UPDATE `accounts` SET language = 2 WHERE `id` = " .. acc) elseif new == 1 then db.executeQuery("UPDATE `accounts` SET language = 1 WHERE `id` = " .. acc) else db.executeQuery("UPDATE `accounts` SET language = 0 WHERE `id` = " .. acc) end end Ainda em data/lib encontre o arquivo 000-constant.lua e coloque ao final dele isto:
      ENGLISH = 2 SPANISH = 1 PORTUGUES = 0 Agora execute este código na sua SQL:
      ALTER TABLE `accounts` ADD `language` INT( 11 ) NOT NULL DEFAULT '0' Pronto, o sistema está pronto agora vamos criar um comando para que troque a linguagem, vá em data/talkactions/scripts
      e crie um arquivo chamado lang.lua e coloque isto dentro:
      function onSay(cid, words, param) if(param == '') then return true end if(param == 'en') then if getPlayerLanguage(cid) == 2 then doPlayerSendTextMessage(cid, 20, "[Language System (Beta)] Your language is alredy set to english.") return true else doPlayerSendTextMessage(cid, 27, "[Language System (Beta)] You have set english as your language.") doPlayerSetLanguage(cid, 2) return true end end if(param == 'pt') then if getPlayerLanguage(cid) == 0 then doPlayerSendTextMessage(cid, 20, "[Language System (Beta)] Sua língua já está definida como português.") return true else doPlayerSendTextMessage(cid, 27, "[Language System (Beta)] Você definiu o português como sua língua.") doPlayerSetLanguage(cid, 0) return true end end if(param == 'es') then if getPlayerLanguage(cid) == 1 then doPlayerSendTextMessage(cid, 20, "[Language System (Beta)] Su lengua ya esta definida como español.") return true else doPlayerSendTextMessage(cid, 27, "[Language System (Beta)] Tu definistes el español como tu lengua.") doPlayerSetLanguage(cid, 1) return true end end end E em data/talkactions abra o talkactions.xml e coloque está tag:
      <talkaction log="yes" words="!lang" event="script" value="lang.lua"/> Vou dar um exemplo de como usa-la em .lua:
      if getPlayerLanguage(cid) == 2 then doPlayerSendTextMessage(cid, 25, "This message will be displayed in English if the language of the player is in -en!") end if getPlayerLanguage(cid) == 0 then doPlayerSendTextMessage(cid, 25, "Está mensagem será exibida em português se a linguagem do jogador estiver em -pt!") end if getPlayerLanguage(cid) == 1 then doPlayerSendTextMessage(cid, 25, "Usted mensaje se mostrará en Espanõl si el jugador está en el lenguaje -es!") end Outro Exemplo:
      function onLogin(cid) local langmsg = { [ENGLISH] = {"This message will be displayed in English if the language of the player is in -en!"} [SPANISH] = {"Usted mensaje se mostrará en Espanõl si el jugador está en el lenguaje -es!"}, [PORTUGUES] = {"Está mensagem será exibida em português se a linguagem do jogador estiver em -pt!"}, } doPlayerSendTextMessage(cid, 25, langmsg[getPlayerLanguage(cid)][1]) return true end Pronto, agora o sistema está perfeito, os comandos estão no começo do tópico em "Como usar?"
       
      créditos:
      Acubens 
      Drazyn1291 
      MySticaL
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo