ForunsBB.com

Sempre à frente... agora na Web 2.1!
Data/Hora: Quinta Set 09, 2010 4:33 pm

Todos os horários são GMT



Esclarece as tuas dúvidas de informática em tempo real no nosso chat!


Regras do fórum


Coloca apenas ARTIGOS teus ou TUTORIAIS teus. Notícias e perguntas serão apagadas.



Criar Novo Tópico Responder a este Tópico  [ 1 mensagem ] 
Autor Mensagem
 Assunto da Mensagem: [mIRC Bot] Sistema de Sorteio
MensagemEnviado: Domingo Out 07, 2007 4:35 pm 
Offline
Level 0
Level 0

Registado: Quinta Abr 19, 2007 3:39 pm
Mensagens: 47
Introdução: Este código tem como função gerir um sistema que consiga efectuar um sorteio que comece com N nicks e que no fim encontre os dois finalistas. Basicamente, iniciando o sorteio com 8 nicks, o sistema vai guardando os nicks que vão perdendo (e automaticamente vê quem passa à próxima ronda) e vai atribuindo a pontuação respectiva a cada nick. De 8 nicks passará para um sorteio com 4 nicks e depois automaticamente indicará os finalistas. De frisar que em todas as rondas (excepto a final) é necessário fazer o comando !sorteio para visualizar os próximos jogos, mas só será possivel passar à próxima ronda quando tiverem sido detectados todos os perdedores e vencedores de cada ronda.

Code:

Código:
;============================================================================
;Aliases e Identificadores
;Sintaxe: $rsort ; $rsort2 ; /sortear <#Canal> <Nicks>
;Função: Retornar a localização de 2 ficheiros. Sortear os nicks em causa
;============================================================================

alias rsort { return $findfile($mircdir,rsort.txt,1).shortfn }
alias rsort2 { return $findfile($mircdir,rsort2.txt,1).shortfn }

alias sortear {
  .write -c $rsort2
  var %com = msg $1 »

  if (!$4) && (!%sorteio) {
    %com Por favor, tem de especificar pelo menos 3 nicks para sorteio.
    halt
  }
  if ($numtok(%sorteio,32) > 1) && (!$2) {
    if (!%perder) || (%perder < %tot) {
      var %f = $calc(%tot - %perder)
      %com Ainda não é possível sortear outra ronda. Falta definir os derrotados ( $+ %f $+ )
      halt
    }
    else { var %n = $strip(%sorteio) }
  }
  elseif ($numtok(%sorteio,32) <= 1) && ($4) {
    unset %sorteio
    var %n = $strip($2-)
  }
  elseif ($numtok(%sorteio,32) > 1) && ($2) {
    %com Erro! Faça !sorteio para sortear os nicks actuais.
    %com Nicks actuais para sorteio: %sorteio
    halt
  }

  var %c = 1, %t = $round($calc($numtok(%n,32) / 2),0), %sorteio2
  while (%c <= %t) {
    var %1 = $gettok(%n,$rand(1,$numtok(%n,32)),32), %n = $remtok(%n,%1,1,32)   
    var %2 = $gettok(%n,$rand(1,$numtok(%n,32)),32), %n = $remtok(%n,%2,1,32)
    var %sorteio2 = $addtok(%sorteio2,$iif(%2,%1 %2,%1),32)
    set %sorteio %sorteio2
    inc %c 1
  }

  %com $iif($numtok(%sorteio,32) == 2,Final:,Resultados:)
  %com

  set %tot 0
  set %perder 0
  unset %isento

  var %c = 1, %r = %sorteio2, %t = $numtok(%r,32)
  while (%c <= %t) {
    var %1 = $gettok(%r,1,32), %2 = $gettok(%r,2,32)

    if (%2) {
      inc %tot
      %com $+($chr(2),%c,.,$chr(2)) %1 vs %2
      .write $rsort2 %1 %2
      var %r = $deltok(%r,1-2,32)   
    }
    elseif (%1) {
      %com   
      %com %1 está isento nesta ronda.
      set %isento %1
      break
    }

    inc %c
  }
}

;============================================================================
;Eventos
;Sintaxe: !Sorteio ; !Acabar ; !Resetop ; !Top ; !Derrota [Nick]
;============================================================================

on 100:text:!sorteio*:#:{
  sortear # $2-
}

on 100:text:!acabar:#:{
  var %com = msg # »
  if (!%res) || ($numtok(%res,32) == 1) {
    unset %sorteio %tot %perder
    %com O sorteio actual foi terminado. Faça !sorteio <nicks> para iniciar outro.
  }
  else { %com Não há nenhum sorteio iniciado. Faça !sorteio <nicks> para iniciar um. }
}

on 100:text:!resetop:#:{
  var %com = msg # »
  .write -c $rsort2
  %com O ranking dos nicks foi apagado por completo.
}

on *:text:!top:#:{
  if ($lines($rsort) == 0) || (!$exists($rsort)) {
    msg # (Info): Não há Registos no Top.
    halt
  }

  filter -ffcteu 2 32 $rsort $rsort

  var %c = 1, %top
  while (%c <= 10) {
    var %l = $read($rsort, %c)

    if ($gettok(%l,2,32) > 0) { var %top = %top $+(,%c,.) $gettok(%l,1,32) $+ ( $+ $gettok(%l,2,32) $+ ) }

    if (%c == 10) || (!%l) {
      $iif(%top,msg # %msg %top)
      break
    }

    inc %c 1
  }
}

on *:text:!derrota*:#:{
  if (!%res) || ($numtok(%res,32) == 1) {
    var %com = msg # »
    var %nick = $iif($2,$2,$nick)

    if  (%perder < %tot) {
      if ($istok(%sorteio,%nick,32)) {
        if ($numtok(%sorteio,32) > 1) {
          if (%nick == %isento) {
            %com O nick %nick está isento nesta ronda. Não pode ser derrotado.
            halt
          }

          var %read = $read($rsort2, w, * $+ %nick $+ *), %line = $readn

          if ($numtok(%read,32) == 2) {
            var %pos = $findtok(%read,%nick,1,32)
            var %pos2 = $iif(%pos == 1,2,$iif(%pos == 2,1)), %nick2 = $gettok(%read,%pos2,32)

            if (%pos) && (%pos2) && (%nick2) {
              .write -l $+ %line $rsort2 %nick2

              var %x = $read($rsort,w,* $+ %nick $+ *), %y = $readn
              if (%y) { .write -l $+ %y $rsort %nick $calc($gettok(%x,2,32) + 1) }
              else { .write $rsort %nick 1 }

              var %x = $read($rsort,w,* $+ %nick2 $+ *), %y = $readn
              if (%y) { .write -l $+ %y $rsort %nick2 $calc($gettok(%x,2,32) + 3) }
              else { .write $rsort %nick2 3 }

              inc %perder
              var %f = $calc(%tot - %perder)
              set %sorteio $remtok(%sorteio,%nick,1,32)

              if ($numtok(%sorteio,32) == 1) {
                %com O Grande Vencedor é: $+($chr(2),%sorteio,$chr(32))
                unset %sorteio
                halt
              }
              else {
                %com O nick %nick não será incluído na próxima ronda.
                %com Nicks actuais para sorteio: %sorteio

                if ($numtok(%sorteio,32) == 2) { sortear # }
                else { %com $iif(%f >= 1,Faltam sair $+($chr(2),%f,$chr(2)) para o próx. sorteio,Já pode sortear a próxima ronda. Faça !sorteio) }
              }
            }
          }
          else { %com O nick %nick não pode ser derrotado, porque foi o vencedor do seu duelo. }
        }
      }
      else { %com O nick %nick não se encontra na lista de nicks. }
    }
    else { %com De momento não é possivel indicar a derrota, porque a próxima ronda não foi sorteada. }
  }
  else { %com Não há nenhum sorteio iniciado. Faça !sorteio <nicks> para iniciar um. }
}


Comandos:

- !Sorteio [Nicks] (Quando não há nenhum sorteio iniciado é preciso indicar pelo menos 3 nicks para sorteio. Caso contrário basta fazer !sorteio para ir para a próxima ronda)

- !Acabar (Termina as condições do sorteio actual)

- !Resetop (Limpa o ranking actual - nicks e pontos)

- !Top (Mostra os 10 primeiros nicks do ranking, ordenados por pontos)

- !Derrota [Nick] (Indica o estado de derrotado do nick em causa. O campo [Nick] é opcional. Este comando é obrigatório para se passar à próxima ronda. O sistema avisa quantos nicks são precisos fazer este comando para avançar. Não actua no caso do nick ser vencedor)

Notas:

- Para instalar este sistema, copiar e colar o código nos Remotes (Alt+R)

- Para fazer os comandos !Sorteio, !Acabar e !Derrota é necessário ter nível 100 no mIRC Bot, para isso fazer no Bot, /auser 100 nick

_________________
Hoje seamaster, Amanhã uma lenda..


Topo
   
 
Mostrar mensagens anteriores:  Ordenar por  
Criar Novo Tópico Responder a este Tópico  [ 1 mensagem ] 

Todos os horários são GMT


Quem está ligado

Utilizadores a navegar neste fórum: Nenhum utilizador registado e 1 visitante


Criar Tópicos: Proibído
Responder Tópicos: Proibído
Editar mensagens: Proibído
Apagar mensagens: Proibído
Enviar anexos: Proibído

Pesquisar por:
Ir para:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group. Color scheme by ColorizeIt.
Car Insurance Quote | Breast Enlargement | DVD rental | Fridges | Breast Enlargement