Ptokax-Config: Unterschied zwischen den Versionen

Aus Weimarnetz Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
===wichtige Einstellungen===
+
                                                       
* min.-max. share (freigabe)
+
                                                          Willkommen in der Beat-Box
* min.-max. slots
+
                                                         
* IP-Adresse
+
            ...................................................Hub-Infos ................................................
* Motd - Massage of the Day - Info beim verbinden
 
* Webserver - Info fuer den Hub-betreiber
 
  
 +
                                        Das Kopieren fremder Inhalte zur privaten oder sonstigen, eigener
 +
                                (auch geschäftlichen) Verwendung ist nach deutschem und schweizer
 +
                                Recht zulässig. Laut dem Gesetzestext ist nicht zulässig,
 +
                                die fremden Inhalte ohne Einwilligung des Urhebers wieder zu
 +
                                veröffentlichen. Im Internet (World Wide Web) sind alle Seiten, die
 +
                                nicht durch Paßworte geschützt sind, öffentlich!
 +
                                Wer fremde Inhalte auf seine Web-Seiten stellt, diese
 +
                                unzulässigerweise veröffentlicht dieses kann strafrechtlich verfolgt
 +
werden und kann recht teuer werden. Allein die
 +
        GEMA & Urheberrechtsgesetz - Gebühren können einen arm machen
 +
                                Ich hoffe, das euch das nicht zu sehr abschreckt!
 +
                               
 +
                                UND NOCH EINMAL, ICH DER BETREIBER DIESES HUBs/CHAT ÜBERNEHME
 +
                                KEINE VERANTWORTUNG FÜR EUREN FESTPLATTENINHALT !!!!!!!!
 +
                               
 +
             
  
===zusätzliche skripte (nuetzliches und spass usw.) in der Programmiersprache Lua 5.0.2.===
+
                                         
  
====Trivia Quiz-bot====
+
                                            Fragen zum Partnerhub bitte an Osiris oder die OP's wenden!
<pre>
 
-- Converted to Lua5 By Jelf 15/03/05
 
-- Translated by Psycho Chihuahua 16/03/05
 
  
BotName = "Quiz"
 
ScriptVersion = "WeimarnetzQuiz"
 
BotVersion = BotName.." "..ScriptVersion
 
  
-- This file is not needed it will be created if it not exists
 
strTrivScoreFile = "TriviaScores.dat"
 
  
-- This file is needed unless you want to run a Trivia with only two questions ;)
+
                                                                      Bitte beachtet:
strDefTrivFile = "Trivia Fragen & Antworten.dat"
+
                                                          Wer länger als 3 Wochen nicht im Hub
strTrivFile = strDefTrivFile
+
                                                          war wird gelöscht! Wer länger Abwesend ist
strQFile = "Trivia Fragen & Antworten selfmade.dat"
+
                                                          teilt es bitte ein OP mit, Danke!
 +
             
 +
                                   
 +
                                                                   
 +
.                                                   *Regeln für unseren Hub*
  
-- This char will be the global separator? (Make it one that is not used in nicknames nor questions ;)
 
strGSep = "*"
 
  
-- This char is used to mask the unrevealed chars
+
                      01. Allgemein         • (AD's) und (OP's) haben das letzte Wort....und generell Recht!
strCMask = "•"
+
                                                • max 10 HUbs
 +
• Min. 2 Slots 
 +
                                        • MinShare:  3 GB 
 +
                                                • Kein Nazi, Tier oder Kinderporno im Share.
 +
                                        • Gesaugte Dateien sofort und min 2 Wochen lang sharen
 +
                                                • Entpackte Releases haben nix im Share verloren und sollten entfernt werden.
 +
                                • Dateien anderer P2P Systeme können zu kick führen....!
 +
• säubert euren Share von Torrentnamen
 +
                                • Übersichtlichkeit ist Pflicht. Wirre Strukturen werden entfernt^^
 +
                     
 +
                      03. Wichtig:         • Diskretion wird vorrausgesetzt
 +
                                • Mainchatlogs werden nicht ausserhalb dieses Hubs kopiert.
 +
                                • PMs ebenso
 +
                                • Bereits der erste Verstoss hierzu führt zum Verlust des Accounts!
 +
                                • Wer Werbung vorhat, kann die OPS auch gleich um delreg bitten
 +
                           
 +
                      04. Sonstiges:         • Regelmässige Onlinezeit wird vorrausgesetzt.
 +
                                                • Tragt in den Settings unter Email eure genaue Connection ein.
 +
                                • z.B. DSL1000/128 - DSL2000/192 - DSL3000/384
 +
                                • Freundlichkeit den anderen Gegenüber wird als selbstverständlich angesehen.
 +
                                • Die OPs haben dabei freien Ermessenspielraum
  
-- Default startup mode of Trivia!
 
lngDefMode = 0 -- (0 = game is played in chat!, 1 = game is played in chat but questions only show for players, 2 = game is played in pm with players)
 
lngMode = lngDefMode
 
  
-- Max number of questions to show when a Operator ask to see list Questions 0 = 0, -1 = Disabled
+
°°°°°°°°Wenn ihr euch nicht daran haltet, können warn, kick, ban oder delreg die Folge sein. Diskussionen sind sinnlos°°°°°°°°
lngMaxShowList = 5
+
                                                                                                                                              .##                                                   
 +
                                                                ,##                                                   
 +
                                                        ##-   ###                                                   
 +
                                                        x##+    ;                                                     
 +
                                                    ##.  #+                                                         
 +
                                                    ####      ########                                               
 +
                                                      ;.    .###########                                             
 +
                                                            ####+- ##########=                                        
 +
                                                  ;####.  ##  ,######-  -####                                       
 +
                                                  .##x,    ## ,###= ######+ .##                                       
 +
                                                            #### #  = #######                                       
 +
                                                        -#-  ######;  ###x ###                                         
 +
                                                    -#####  ## #+,  .=##x##                                         
 +
                                                      x.      ##          x##                                         
 +
                                                              ####x.      #######x;                                   
 +
                                                                ######    +############                               
 +
                                                                ;##  ##  #,#      -######                             
 +
                                                              ####x ##  =# ##        =###                           
 +
                                                            +############## ##  ##      ###                           
 +
                                                          ##############  ###  ##        ###                         
 +
                                                          ###  #########-####  ###  -#######                         
 +
                                                        #####  =##### ######    #############                         
 +
                                                      #######.  ###########    +######  ###-                         
 +
                    ;##                              =###. ####  -##########,#####-      ###                         
 +
                  ,###x+                        ,#######  ##### #######.  #####          x###                         
 +
                x######                      X#####,  ##########.        .          x#####                           
 +
                ###=####+                .X#####      +########.##      #    -X########-                           
 +
                ##+#######,          ,#####x    ,######    +##  ##,  .x###############                               
 +
              .+#####; +#####        ####    ; #####;      ###  #####################                               
 +
              #-#####    =#####    .##+    ##==##          ##X    .#####=  #####.###                               
 +
            ##-####;==#-  -####x  ##    #######          ###        ##-#      ## ###                               
 +
          #################  .####; ##x#########          ,###      +####      ## +##                               
 +
          #####+    .#;  +##  #### ####;                ###        #####          ###                             
 +
        #####,      ##  .-###;  ###x                =#######-      #=.##    -########.                             
 +
        #####x,    ;#, -#####X##X  ###x            #######,#####  ######  -###########                             
 +
        #####+..    ## ########  -##  ###= =      #####      -######## #  +##############=                           
 +
        ####        # -######### + ,##;.###X##-  x###X            ;###########  x### ##x####                         
 +
    . ###x        ## ##  ######=###--X#+-##### ####                    ;+;      ##  ###;###  #.##,                 
 +
    .# ###        # ##  #####x#-######X####  ###                                      ,#. ### ##-##                 
 +
    #+##          ## ##  ################ ###-x###                      x#                  ### ##                   
 +
  ## #          #  ######### #-#####+#= #####;##          .#+        +###+              #### ,                     
 +
  ###x####.    ##  ######## ########.# #####= ###          ##=.=+xx+=,  +###            ####              ;#####-   
 +
    x=  =####x  #    ######  #-#####.# ## ###  ###        ## #################.          ####            -########## 
 +
            .#####;;.  =x#  ##x#XX#x,= #####=  ###      ##x ###xx++x########          #####Xx;.      =#############.
 +
              ##+X#####xx######xx+++X. -####;  X##.      ### ###      ####.          ###############################
 +
              =####X-              .;;. ,###    ###    ## ##  ###.    ####        ,=################################,
 +
      =#####    .######  #####  ############.#X    X###  ###+##  ###  #####  X#########################################
 +
    ##########  ######x######  -#####    ##        ####x ,## ###= ########    ###-.  +#################################
 +
  ######, ;###  #############  ########+      ######################## ;############################################,
 +
  ############  #### ### ####  =########      ######x##########################X++x######################      .;-. 
 +
  ############  ####  # #####.  ####.  .##  ###x          .############.            ,#################             
 +
    -########  ######  #######-+###########    ####################################++###################             
 +
                    ,,                  .,      -############=        =###############################+               
  
-- Max no of Hints per word, and always hit on a hidden char
+
                              ***************    So und nun viel Spaß Beat-Box ***************
lngMaxHints = 4
 
boolHintAlwaysHitHidden = nil -- (nil = off, 1 = on)
 
 
 
-- How much time before a question end. Time in Trivia is measured in 15 seconds, 1 = 15 seconds, 2 = 30 seconds etc!
 
-- Rest is how long to rest after a question is solved depening on when the word is solved in the Timer loop it is 15 secs to the setting!
 
lngMaxTime = 8 -- (Needs to be a multiple of 4  i.e. 4 / 8 / 12 / 16)
 
lngRestTime = 2
 
lngHintTime = lngMaxTime / 4
 
 
 
-- How often should the bot autosave the scores
 
boolAutoSaveScores = 1 -- (nil = off, 1 = on)
 
countSaveTurns = 10 -- After how many questions should the scores be saved
 
 
 
-- Should bot reveal the correct answer once time is up?
 
boolRevealAnswer = 1 -- (nil = off, 1 = on)
 
 
 
-- Should the bot display what guess made the word become a little clearer if played in PM!
 
boolShowGuessesInPM = 1 -- (nil = off, 1 = on)
 
 
 
-- Should the bot Auto Reveal Hints?
 
boolAutoHint = 1 -- (nil = off, 1 = on)
 
 
 
-- Should the bot auto login every user on connect ?
 
boolAutoLogin = nil -- (nil = off, 1 = on)
 
 
 
-- Do you want users to be able to add questions ? Operators can always add questions.
 
boolAddQuestion = 1 -- (nil = No, 1 = Yes)
 
 
 
-- TriggStart is what char the commands should begin with I use ! but you can use # or whatever
 
TriggStart = "#"
 
 
 
-- Theese are the different triggers I've tried to name them so that one easily understand what they do!
 
-- I include TriggStart and then the word within "" this word is not casesensitive!
 
JoinTrigg = TriggStart.."qmitmach"
 
PartTrigg = TriggStart.."qraus"
 
StartTrigg = TriggStart.."qstart"
 
StopTrigg = TriggStart.."qstop"
 
WordTrigg = TriggStart.."qwort"
 
QuizTrigg = TriggStart.."qfrage"
 
RestartTrigg = TriggStart.."qneustart"
 
PointTrigg = TriggStart.."qpunkte"
 
ScoreTrigg = TriggStart.."qergebnis"
 
PlayerTrigg = TriggStart.."qspieler"
 
QuestionsTrigg = TriggStart.."qfragen"
 
ReloadTrigg = TriggStart.."qneuladen"
 
HelpTrigg = TriggStart.."qhilfe"
 
ExtraHelpTrigg = TriggStart.."qhilfe+"
 
SaveTrigg = TriggStart.."qsicherergebnis"
 
LoadTrigg = TriggStart.."qladeergebnis"
 
ModeTrigg = TriggStart.."qmodus"
 
HintTrigg = TriggStart.."qtip"
 
TopTrigg = TriggStart.."qtopten"
 
AddTrigg = TriggStart.."qfragedazu"
 
 
 
bcount = 0
 
scount = 0
 
sQuestion = ""
 
sAnswer = ""
 
guessArray = {}
 
lngGuessmax = 0
 
playerArray = {}
 
pointArray = {}
 
lngWord = 0
 
lngPassed = 0
 
lngHinted = 0
 
strWord = ""
 
strQuestion = ""
 
strSolved = ""
 
strBanner = "Schreibe '"..StartTrigg.."' um den Quizzbot zu starten, '"..StopTrigg.."' um den Quizzbot anzuhalten, '"..JoinTrigg.."' um am Quizz teilzunehmen und '"..PartTrigg.."' um das Quizz zu verlassen."
 
strStart = "Quizzbot "..ScriptVersion.." gestartet! "..strBanner
 
strStopp = "Quizzbot "..ScriptVersion.." angehalten! "..strBanner
 
----------------------
 
function Main()
 
frmHub:RegBot(BotName)
 
ReloadQuestions()
 
end
 
------------------------
 
function NewUserConnected(curUser)
 
if (boolAutoLogin) then
 
if (not (playerArray[curUser.sName])) then
 
playerArray[curUser.sName] = 1
 
else
 
playerArray[curUser.sName] = nil
 
end
 
end
 
end
 
------------------------------
 
function OpConnected(curUser)
 
if (boolAutoLogin) then
 
if (not (playerArray[curUser.sName])) then
 
playerArray[curUser.sName] = 1
 
else
 
playerArray[curUser.sName] = nil
 
end
 
end
 
end
 
--------------------------------
 
function UserDisconnected(curUser)
 
playerArray[curUser.sName] = nil
 
end
 
--------------------------------
 
function OpDisconnected(curUser)
 
playerArray[curUser.sName] = nil
 
end
 
--------------------------------
 
function ChatArrival(curUser, data)
 
data = string.sub(data, 1, (string.len(data) - 1))
 
if ((lngMode == 0) or (lngMode == 1)) then
 
boolPlaydata = 1
 
end
 
GotoTriggs(curUser, data)
 
end
 
----------------------------------
 
function ToArrival(curUser, data)
 
data = string.sub(data, 1, (string.len(data) - 1))
 
local _, _, whoTo = string.find(data,"$To:%s+(%S+)")
 
if (whoTo == BotName) then
 
data = string.sub(data, (15 + string.len(BotName) + string.len(curUser.sName)))
 
if (lngMode == 2) then
 
boolPlaydata = 1
 
local _, _, chat = string.find(data, "%b<>%s(.+)")
 
SendChatToOthers(chat, curUser)
 
end
 
end
 
GotoTriggs(curUser, data)
 
end
 
-------------------------------------------
 
function GotoTriggs(curUser, data)
 
  local _, _, firstWord = string.find(data, "%b<>%s+(%S+)")
 
 
 
  if (firstWord ~= nil) then
 
    if ((string.lower(firstWord) == string.lower(HelpTrigg)) or (string.lower(firstWord) == string.lower(ExtraHelpTrigg))) then
 
      showHelp(curUser)
 
    elseif (string.lower(firstWord) == string.lower(SaveTrigg)) then
 
      if (curUser.bOperator) then
 
        SaveScores(curUser)
 
      end
 
    elseif (string.lower(firstWord) == string.lower(LoadTrigg)) then
 
      if (curUser.bOperator) then
 
        LoadScores(curUser)
 
      end
 
    elseif (string.lower(firstWord) == string.lower(TopTrigg)) then
 
  TopTen(user)
 
    elseif (string.lower(firstWord) == string.lower(AddTrigg)) then
 
      if (boolAddQuestion) then
 
s,e,sQuestion,sAnswer = string.find(data, "%b<>%s+%S+%s+(.+)#(.+)")
 
  AddQuestion(curUser,sQuestion,sAnswer)
 
      elseif (curUser.bOperator) then
 
      s,e,sQuestion,sAnswer = string.find(data, "%b<>%s+%S+%s+(.+)#(.+)")
 
  AddQuestion(curUser,sQuestion,sAnswer)
 
      else
 
  SendToPlayers("Fragen koennen jetzt nicht hinzugefuegt werden.")
 
      end
 
    elseif (string.lower(firstWord) == string.lower(ModeTrigg)) then
 
      if (curUser.bOperator) then
 
        local _, _, ModeDigit = string.find(data, "%b<>%s+%S+%s+(%d+)")
 
        if (ModeDigit ~= nil) then
 
          lngMode = tonumber(ModeDigit)
 
          if (lngMode == 0) then
 
            SendToPlayers("Quizz wird im Mainchat gespielt")
 
          elseif (lngMode == 1) then
 
            SendToPlayers("Quizz wird im Mainchat gespielt aber Fragen koennen nur Quizzer sehen")
 
          elseif (lngMode == 2) then
 
            SendToPlayers("Quizz wird ueber PM gespielt")
 
          else
 
            SendToPlayers("Falscher Modus gewaehlt, wurde auf Voreinstellung gesetzt")
 
            lngMode = lngDefMode
 
          end
 
        end
 
      end
 
    elseif (string.lower(firstWord) == string.lower(JoinTrigg)) then
 
      if (not (playerArray[curUser.sName])) then
 
        playerArray[curUser.sName] = 1
 
        SendToPlayers(curUser.sName.." ist jetzt mit dabei!")
 
      else curUser:SendPM(BotName, "Du bist schon Mitspieler. Es kann sein das Du automatisch eingeloggt wurdest.")
 
      end
 
    elseif (string.lower(firstWord) == string.lower(PartTrigg)) then
 
      if (playerArray[curUser.sName]) then
 
        SendToPlayers(curUser.sName.." ist nicht länger Mitspieler!")
 
        playerArray[curUser.sName] = nil
 
      end
 
    elseif (string.lower(firstWord) == string.lower(RestartTrigg)) then
 
      if (curUser.bOperator) then
 
        SendToPlayers("Quizzbot neugestartet. Alle Punkte sind nun weg!")
 
        SendToPlayers("Wenn Du jetzt speicherst wird der alte Punktestand überschrieben!")
 
        pointArray = {}
 
        StopQuiz(1)
 
      end
 
    elseif ((string.lower(firstWord) == string.lower(PointTrigg)) and (playerArray[curUser.sName])) then
 
      if (pointArray[curUser.sName]) then
 
        SendToPlayers(curUser.sName.." Du hast "..pointArray[curUser.sName].." Punkte!")
 
      else
 
        SendToPlayers(curUser.sName.." Du hast 0 Punkte!")
 
      end
 
    elseif ((string.lower(firstWord) == string.lower(HintTrigg)) and (playerArray[curUser.sName])) then
 
      if ((lngWord ~= 0) and string.find(strSolved, strCMask, 1, plain)) then
 
        if (lngHinted < lngMaxHints) then
 
    for nn=1,bcount do
 
              local lngRepChar = math.random(1, string.len(strWord))
 
              while 1 do
 
                if (boolHintAlwaysHitHidden) then
 
                  if (strsub(strSolved, lngRepChar, lngRepChar) == strCMask) then
 
                    break
 
                  end
 
                else
 
                  break
 
                end
 
                lngRepChar = math.random(1, string.len(strWord))
 
              end
 
              local strTurn = ""
 
              for x=1, string.len(strWord) do
 
                if (x == lngRepChar) then
 
                strTurn = strTurn..string.sub(strWord, x, x)
 
                else
 
                  strTurn = strTurn..string.sub(strSolved, x, x)
 
                end
 
      end
 
              strSolved = strTurn
 
  end
 
            lngHinted = lngHinted + 1
 
    lngHintTimeCount = lngHintTimeCount + lngHintTime
 
            SendToPlayers("Hinweis: "..strSolved)
 
    acount = ""
 
        else
 
            SendToPlayers("Alle Hinweise aufgebraucht!")
 
      end
 
      else
 
        SendToPlayers("Kein Hinweis gebraucht!")
 
      end
 
    elseif ((string.lower(firstWord) == string.lower(ScoreTrigg)) and (playerArray[curUser.sName])) then
 
      curUser:SendPM(BotName, "ERGEBNISSE:")
 
      curUser:SendPM(BotName, "---------------------------------------------------------")
 
      for index, value in pointArray do
 
        curUser:SendPM(BotName, index.."'s punkte: "..value)
 
      end
 
      curUser:SendPM(BotName, "---------------------------------------------------------")
 
    elseif ((string.lower(firstWord) == string.lower(PlayerTrigg)) and (playerArray[curUser.sName])) then
 
      curUser:SendPM(BotName, "SPIELER:")
 
      curUser:SendPM(BotName, "---------------------------------------------------------")
 
      for index, value in playerArray do
 
        curUser:SendPM(BotName, index)
 
      end
 
      curUser:SendPM(BotName, "---------------------------------------------------------")
 
    elseif (string.lower(firstWord) == string.lower(QuestionsTrigg)) then
 
      if (curUser.bOperator) then
 
        curUser:SendPM(BotName, "TOP "..lngMaxShowList.." FRAGEN:")
 
        curUser:SendPM(BotName, "---------------------------------------------------------")
 
        local lngShowMax = lngMaxShowList
 
        for index, value in guessArray do
 
          if (lngShowMax == 0) then
 
            break
 
          end
 
          arrTmp = tokenize(guessArray[index], strGSep)
 
          strTmp = arrTmp[1]
 
          curUser:SendPM(BotName, "["..index.."] "..strTmp)
 
          lngShowMax = lngShowMax - 1
 
        end
 
        curUser:SendPM(BotName, "Total # an Fragen: "..lngGuessmax)
 
        curUser:SendPM(BotName, "---------------------------------------------------------")
 
        curUser:SendPM(BotName, " ")
 
      end
 
    elseif (string.lower(firstWord) == string.lower(StartTrigg)) then
 
      if (curUser.sName) then
 
        if (lngWord == 0) then
 
          playerArray[curUser.sName] = 1
 
          SendToAll(BotName, strStart)
 
          if (lngMode == 2) then
 
            SendToPlayers(strStart)
 
          end
 
          StopQuiz(1)
 
        else
 
          SendToAll(BotName, "Da ist ein Quizz im gange, schreibe "..JoinTrigg.." um mitzuspielen!")
 
        end
 
      else
 
curUser:SendPM(BotName, "Nur Op's koennen das Quizz starten.")
 
      end
 
    elseif (string.lower(firstWord) == string.lower(StopTrigg)) then
 
      if (curUser.sName) then
 
        HoldQuiz()
 
        StopQuiz()
 
        SendToAll(BotName, strStopp)
 
        if (lngMode == 2) then
 
          SendToPlayers(strStopp)
 
        end
 
      end
 
    elseif (string.lower(firstWord) == string.lower(WordTrigg)) then
 
      if ((lngWord ~= 0) and (playerArray[curUser.sName] == "Player")) then
 
        SendToPlayers("Die derzeitige Frage lautet: "..strSolved.." ("..strlen(strSolved)..")")
 
      end
 
    elseif (string.lower(firstWord) == string.lower(QuizTrigg)) then
 
      if ((lngWord ~= 0) and (playerArray[curUser.sName])) then
 
        SendToPlayers("Frage: "..strQuestion)
 
      end
 
    elseif (string.lower(firstWord) == string.lower(ReloadTrigg)) then
 
      if (curUser.bOperator) then
 
        local _, _, secondWord = string.find(data, "%b<>%s+%S+%s+(%S+)")
 
        if (secondWord) then
 
        handle = io.open(secondWord, "r")
 
          if (handle) then
 
            handle:close()
 
            strTrivFile = secondWord
 
          end
 
        end
 
       
 
        HoldQuiz()
 
        ReloadQuestions()
 
      end
 
    else
 
if ((lngWord ~= 0) and (boolPlaydata)) then
 
        if (playerArray[curUser.sName]) then
 
          local msg = string.sub(data, (4 + string.len(curUser.sName)))
 
          if (string.len(msg) >= string.len(strWord)) then
 
            local boolDisc = nil
 
           
 
local strTurn = ""
 
  if string.lower(msg) == string.lower(strWord) then
 
    strTurn = strWord
 
    boolDisc = 1
 
  else
 
    strTurn = strSolved
 
  end
 
 
           
 
            if (boolDisc) then
 
              strSolved = strTurn
 
            end
 
            if (boolDisc) then
 
              if (string.lower(msg) ~= string.lower(strWord)) then
 
                SendToOthers(curUser, msg)
 
                SendToPlayers("Die Antwort ist nun: "..strSolved)
 
              end
 
            end
 
            if (string.lower(msg) == string.lower(strWord)) then
 
              if (not (pointArray[curUser.sName])) then
 
                pointArray[curUser.sName] = 0
 
              end
 
if lngHinted == 3 then pointArray[curUser.sName] = pointArray[curUser.sName] + 1
 
elseif lngHinted == 2 then pointArray[curUser.sName] = pointArray[curUser.sName] + 2
 
elseif lngHinted == 1 then pointArray[curUser.sName] = pointArray[curUser.sName] + 3
 
else pointArray[curUser.sName] = pointArray[curUser.sName] + 4
 
end
 
              SendToPlayers("Die Antwort war: "..strSolved)
 
              SendToPlayers("Die Antwort wurde erraten von: "..curUser.sName)
 
              SendToPlayers("Naechste Frage in "..(lngRestTime * 15).." (15) Secs")
 
              lngPassed = lngMaxTime
 
              SendToPlayers(curUser.sName.."'s Punkte: "..pointArray[curUser.sName])
 
              HoldQuiz()
 
            end
 
          end
 
        end
 
      end
 
    end
 
  end
 
end
 
--------------------------------
 
function HoldQuiz()
 
  strWord = ""
 
  strQuestion = ""
 
  strSolved = ""
 
end
 
 
 
function StopQuiz(restart)
 
  lngWord = 0
 
  lngPassed = 0
 
  strWord = ""
 
  strQuestion = ""
 
  strSolved = ""
 
  StopTimer()
 
  if (restart) then
 
    StartQuiz()
 
  end
 
end
 
 
 
function StartQuiz()
 
  lngWord = math.random(1, lngGuessmax)
 
  QWarray = tokenize(guessArray[lngWord], strGSep)
 
  strQuestion = QWarray[1]
 
  strWord = QWarray[2]
 
  strSolved = ""
 
  for x=1, string.len(strWord) do
 
    if (string.sub(strWord, x, x) == " ") then
 
      strSolved = strSolved.." "
 
    else
 
      strSolved = strSolved..strCMask
 
    end
 
  end
 
  lngPassed = 0
 
  lngHinted = 0
 
  lngHintTimeCount = lngHintTime
 
  if string.len(strWord) < 4 then
 
bcount = math.random(1, 2)
 
  elseif string.len(strWord) >= 4 and string.len(strWord) <= 9 then
 
bcount = math.random(1, 3)
 
  elseif string.len(strWord) >= 9 and string.len(strWord) <= 20 then
 
bcount = math.random(2, 4)
 
  else
 
bcount = math.random(3, 5)
 
  end
 
  SetTimer(15000)
 
  StartTimer()
 
  SendToPlayers("Frage: "..strQuestion)
 
  SendToPlayers("Antwort: "..strSolved.." ("..string.len(strSolved)..")")
 
end
 
-----------------------------------------
 
function OnTimer()
 
  lngPassed = lngPassed + 1
 
  if (lngPassed == lngMaxTime) then
 
    scount = scount + 1
 
    if scount == countSaveTurns then
 
  local handle = io.open(strTrivScoreFile, "w")
 
    for index, value in pointArray do
 
    handle:write(index..strGSep..value.."\r\n")
 
  end
 
    handle:close()
 
    scount = 0
 
    end
 
    if (boolRevealAnswer) then
 
      SendToPlayers("Die Antwort war '"..strWord.."' und wurde nicht erraten!")
 
    else
 
      SendToPlayers("Die Antwort wurde nicht erraten!")
 
    end
 
    SendToPlayers("Naechste Frage in "..(lngRestTime * 15).." Sekunden")
 
    HoldQuiz()
 
  elseif (lngPassed >= (lngRestTime + lngMaxTime)) then
 
    StopQuiz(1)
 
  elseif (lngPassed == lngHintTimeCount) then
 
    if (boolAutoHint) then
 
for nn=1,bcount do
 
            local lngRepChar = math.random(1, string.len(strWord))
 
            while 1 do
 
              if (boolHintAlwaysHitHidden) then
 
                if (string.sub(strSolved, lngRepChar, lngRepChar) == strCMask) then
 
                  break
 
                end
 
              else
 
                break
 
              end
 
              lngRepChar = math.random(1, string.len(strWord))
 
            end
 
            local strTurn = ""
 
            for x=1, string.len(strWord) do
 
              if (x == lngRepChar) then
 
              strTurn = strTurn..string.sub(strWord, x, x)
 
              else
 
                strTurn = strTurn..string.sub(strSolved, x, x)
 
              end
 
    end
 
            strSolved = strTurn
 
end
 
            lngHinted = lngHinted + 1
 
    lngHintTimeCount = lngHintTimeCount + lngHintTime
 
            SendToPlayers("Hinweis: "..strSolved)
 
end 
 
  end
 
end
 
---------------------------------------
 
function tokenize (inString,token)
 
  _WORDS = {}
 
  local matcher = "([^"..token.."]+)"
 
  string.gsub(inString, matcher, function (w) table.insert(_WORDS,w) end)
 
  return _WORDS
 
end
 
----------------------------------------
 
function ReloadQuestions()
 
  guessArray = {}
 
  lngGuessmax = 0
 
  local boolRestart = nil
 
  if (lngWord ~= 0) then
 
    SendToPlayers("Lade Fragen neu, Quizz wird beendet!")
 
    StopQuiz()
 
    boolRestart = 1
 
  end
 
  handle = io.open(strTrivFile, "r")
 
  if (handle) then
 
    local line = handle:read()
 
   
 
    while line do
 
      if ((line ~= "") and (string.find(line, strGSep, 1, plain))) then
 
        table.insert(guessArray, line)
 
        lngGuessmax = lngGuessmax + 1
 
      end
 
      line = handle:read()
 
    end
 
  handle:close()
 
  end
 
  if (lngGuessmax < 1) then
 
  guessArray = {
 
    "Wie nennt man ein Boomerang der nicht zurückkommt?"..strGSep.."ein Stock",
 
    "Wie heisst das Rundling-Dorf in der nähe von Weimar?"..strGSep.."Tiefengruben",
 
    "Welcher deutsche Kaiser starb in Memmleben?"..strGSep.."Otto der Erste",
 
    "Welches ist das meistgebaute Auto der Welt?"..strGSep.."VW Kaefer",
 
    "An welchem Wochentag ist meistens das Weimarnetztreffen?"..strGSep.."Dienstag",
 
    "Wieviel Aldi Filialen gibt es in Weimar?"..strGSep.."3",
 
    "Wie heisst der Konstrukteur des VW Käfer?"..strGSep.."Ferdinand Porsche",
 
    "In welcher Stadt ist das grösste Freifunknetz?"..strGSep.."Berlin"
 
  }
 
  lngGuessmax = 2
 
  end
 
  if (boolRestart) then
 
    SendToPlayers("Lade Fragen neu, Quizz wird neugestartet! Derzeitige Anzahl der Fragen: "..lngGuessmax)
 
    StartQuiz()
 
  end
 
  strTrivFile = strDefTrivFile
 
end
 
----------------------------------------
 
function SaveScores(curUser)
 
  local handle = io.open(strTrivScoreFile, "w")
 
  for index, value in pointArray do
 
    handle:write(index..strGSep..value.."\r\n")
 
  end
 
  curUser:SendData(BotName,"Punktestand gesichert")
 
  handle:close()
 
end
 
-----------------------------------------
 
function LoadScores(curUser)
 
local handle = io.open(strTrivScoreFile, "r")
 
if (handle) then
 
local line = handle:read()
 
while line do
 
local arrTmp = tokenize(line, strGSep)
 
if ((arrTmp[1] ~= nil) and (arrTmp[2] ~= nil)) then
 
pointArray[arrTmp[1]] = tonumber(arrTmp[2])
 
end
 
line = handle:read()
 
end
 
curUser:SendData(BotName,"Punktestand geladen")
 
handle:close()
 
end
 
end
 
---------------------------------------------------
 
function AddQuestion(curUser, sQuestion, sAnswer)
 
  local handle = io.open(strQFile, "a")
 
  handle:write("Vorgeschlagen von <"..curUser.sName.."> "..sQuestion..strGSep..sAnswer.."\r\n")
 
  SendToPlayers(curUser.sName.." hat eine Frage hinzufefuegt "..sQuestion)
 
  curUser:SendPM(BotName,curUser.sName.." Du gabst als Antwort "..sAnswer)
 
  handle:close()
 
end
 
--------------------------------------------
 
function SendToPlayers(msg)
 
  if ((lngMode > 2) or (lngMode < 0)) then
 
    lngMode = lngDefMode
 
  end
 
 
 
  if (lngMode == 0) then
 
    SendToAll(BotName, msg)
 
  elseif (lngMode == 1) then
 
    for index, value in playerArray do
 
      SendToNick(index, "<"..BotName.."> "..msg)
 
    end
 
  elseif (lngMode == 2) then
 
    for index, value in playerArray do
 
      SendPmToNick(index, BotName, msg)
 
    end
 
  end
 
end
 
---------------------------------------------
 
function SendToOthers(msg, curUser)
 
  if ((lngMode == 2) and (boolShowGuessesInPM)) then
 
    for index, value in playerArray do
 
      if (index ~= curUser.sName) then
 
        SendPmToNick(index, BotName, "<"..curUser.sName.."> "..msg)
 
      end
 
    end
 
  end
 
end
 
-----------------------------------------------
 
function SendChatToOthers(chat, curUser)
 
  if (lngMode == 2) then
 
    for index, value in playerArray do
 
      if (index ~= curUser.sName) then
 
SendToNick(index, "$To: "..index.." From: "..BotName.." $<"..curUser.sName.."> "..chat)
 
      end
 
    end
 
  end
 
end
 
--------------------------------------------
 
function showHelp(curUser)
 
  curUser:SendData("<Help> ")
 
  curUser:SendData("<Help> "..BotVersion.." Befehle:")
 
  curUser:SendData("<Help> ")
 
  if (lngMode == 0) then
 
    curUser:SendData("<Help>    "..BotVersion.." spielt das Quizz nun im Mainchat")
 
  elseif (lngMode == 1) then
 
    curUser:SendData("<Help>    "..BotVersion.." spielt das Quizz nun versteckt im Mainchat")
 
  else
 
    curUser:SendData("<Help>    "..BotVersion.." spielt das Quizz nun als PM")
 
  end
 
  curUser:SendData("<Help>    "..HelpTrigg.." - Zeigt diese Hilfe")
 
  curUser:SendData("<Help>    "..JoinTrigg.." - damit kannst Du am Quizz teilnehmen")
 
  curUser:SendData("<Help>    "..PartTrigg.." - damit verlaesst Du das Quizz")
 
  curUser:SendData("<Help>    "..WordTrigg.." - zeigt das derzeitig gesuchte Wort (Antwort)")
 
  curUser:SendData("<Help>    "..QuizTrigg.." - zeigt die derzeitige Frage")
 
  curUser:SendData("<Help>    "..PointTrigg.." - zeigt Deine Punkte")
 
  curUser:SendData("<Help>    "..ScoreTrigg.." - zeigt die Ergebnisse von allen")
 
  curUser:SendData("<Help>    "..PlayerTrigg.." - zeigt alle Spieler die am derzeitigen Quizz teilnehmen")
 
  curUser:SendData("<Help>    "..HintTrigg.." - enthuellt einen Buchstaben in der derzeitigen Antwort")
 
  curUser:SendData("<Help>    "..TopTrigg.." - zeigt die Top Ten Ergebnisse")
 
  curUser:SendData("<Help>    "..AddTrigg.." - fuegt ein Frage zum Fragenfile hinzu. Schreibe die Frage und trenne die Antwort von der Frage mit einer #")
 
  curUser:SendData("<Help>    BEISPIEL : qfrage Wie schnell fliegt ein Vogel?#keine Ahnung")
 
  if (curUser.bOperator) then
 
    curUser:SendData("<Help> ")
 
    curUser:SendData("<Help>    "..BotVersion.." Operator Befehle:")
 
    curUser:SendData("<Help>    "..StopTrigg.." - Stoppt den Quizzbot")
 
    curUser:SendData("<Help>    "..RestartTrigg.." - startet den Quizzbot neu, alle Ergebnisse werden zurueckgesetzt!")
 
    curUser:SendData("<Help>    "..QuestionsTrigg.." - zeigt alle Fragen im derzeitigen Quizz")
 
    curUser:SendData("<Help>    "..ReloadTrigg.." (<filename>) - laedt die Fragen von "..strDefTrivFile)
 
    curUser:SendData("<Help>    "..ModeTrigg.." - aendert den Spielmodus (0-2)!")
 
    curUser:SendData("<Help>    "..SaveTrigg.." - speichert die Ergebnisse in "..strTrivScoreFile)
 
    curUser:SendData("<Help>    "..LoadTrigg.." - laedt die Ergebnisse von "..strTrivScoreFile)
 
    curUser:SendData("<Help>    "..StartTrigg.." - startet den Quizzbot und Du nimmst automatisch daran teil")
 
    curUser:SendData("<Help> ")
 
    curUser:SendData("<Help>    "..BotVersion.." Modis:")
 
    curUser:SendData("<Help>    ".."0 = gespielt wird im Mainchat!")
 
    curUser:SendData("<Help>    ".."1 = gespielt wird im Mainchat aber die Fragen sind nur sichtbar fuer Mitspieler")
 
    curUser:SendData("<Help>    ".."2 = gespielt wird komplett als PM")
 
  end
 
end
 
----------------------------------------------
 
function TopTen(user)
 
local index = {n=0}
 
table.foreach(pointArray, function(nick, score) table.insert(index, nick) end)
 
local func = function(a, b) return pointArray[a] > pointArray[b] end
 
table.sort(index, func)
 
 
 
x = x or 10 if x > index.n then x = index.n end
 
local result = "\r\nTop "..x.." Quizz Ergebnisse in diesem Hub..\r\n Pos\t Score\t\t Nick\t\r\n"
 
for i = 1, x do result = result.."\r\n "..i..".\t"..pointArray[index[i]].."\t\t"..index[i] end
 
msg = result
 
SendToPlayers(msg)
 
end
 
</pre>
 
 
 
 
 
====Postman(mailserver)-bot====
 
<pre>
 
-- PostMan Bot 0.3 by bastya_elvtars (the rock n' roll doctor)
 
-- offline message system
 
-- code ripped from law maker bot
 
-- comands can be PMed or typed in main, the bot responds to them according to the environment (sometimes at least :D)
 
-- the commands are case insensitive, the parameters aren't :)
 
 
 
------- 0.2:
 
-- added function so ppl cannot post 2 online users
 
 
 
------- 0.3:
 
-- converted to lua5
 
-- washere is now global, no more CPU spikes
 
 
 
------- 0.4:
 
-- touched by Herodes (optimisation tsunami)
 
-- added : more details on the bot
 
-- added : message privacy ;)
 
-- changed : better way to parseenv ;)
 
-- changed : better way to display messages and inbox
 
-- changed : better way to parsecmds ( thx bastya_elvtars ;)
 
 
 
------- 0.5:
 
-- touched by Skippy84
 
-- fix error: make offline.dat thx goto Herodes for the idea to fix the problem
 
-- fix error: false command !showmsg
 
-- added: commands can edit at the Settings section
 
-- added: shown commands linked to the editable commands (so ther change on the fly)
 
 
 
------- 0.51:
 
-- bastya_elvtars put his hands back on this
 
-- script now creates an empty offline.dat if does not exist... you guys keep ignoring new Lua5 features :P
 
-- thx guys for the features you added, they are really eye-candy
 
 
 
------- 0.6:
 
-- touched again by Skippy84
 
-- added: a little rightclick menu
 
 
 
--------------------------------SETTINGS----------------------------------------
 
 
 
Bot = {
 
      name = "Weimarnetz-Mailserver" , -- bot's name
 
      email = "postman@mail.me", -- bot's email
 
      desc = "Nachrichten senden an User die gerade nicht da sind..", -- bot's desc
 
      }
 
 
 
inboxsize=15 -- the maximum amount of messages users can have in their inbox
 
 
 
cmdpost = "postmsg" -- Shows the Hub Stats
 
cmdread = "readmsg" -- Shows the Hub Stats
 
cmdibox = "inbox" -- Shows the Hub Stats
 
cmddbox = "delmsg" -- Shows the Hub Stats
 
 
 
----------------------END OF SETTINGS-------------------------------------------
 
 
 
 
 
-------------------------------------- Utility Functions
 
 
 
function cls()
 
  collectgarbage()
 
  io.flush()
 
end
 
 
 
function Main()
 
  local function load()
 
  local t = {}; local f = io.open("washere.lst", "r")
 
  if f then for l in f:lines() do t[l] = 1; end; f:close(); end
 
    return t;
 
  end
 
    washere = load()
 
    message = {}
 
if loadfile("offline.dat") then
 
dofile("offline.dat")
 
else
 
io.output("offline.dat")
 
io.write("")
 
io.output()
 
end
 
    frmHub:RegBot(Bot.name, 1, Bot.desc, Bot.email )
 
    Bot = Bot.name
 
end
 
 
 
-------------------------------------- Command Functions
 
 
 
--- post msg
 
 
 
function postmsg( user, data, how )
 
  local _,_,nick,msg = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(.*)")
 
  if nick then
 
    if not GetItemByName(nick) then
 
      if washere[nick] then
 
        local function checksize(n) local cnt = 0; for a,b in message[n] do cnt = cnt + 1; end return cnt; end
 
          if not message[nick] then message[nick] = {}; end
 
            if (checksize(nick) < inboxsize) then
 
                table.insert( message[nick], { ["message"] = msg, ["who"] = user.sName, ["when"] = os.date("%Y. %m. %d. %X"), ["read"] = 0, } )
 
                SendBack( user, "Erfolgreich gesendete Nachricht!", Bot, how )
 
                savemsg()
 
            else
 
                SendBack( user, "Sorry, aber "..nick.." hat eine volle Mailbox. Probier es später.", Bot, how )
 
            end
 
          else
 
            SendBack( user, "User "..nick.." wart nie gesehen in diesem Hub.", Bot, how )
 
          end
 
      else
 
          SendBack( user, nick.." ist online! PM ist doch einfacher...", Bot, how )
 
      end
 
    else
 
      SendBack( user, "Falscher syntax! Schreibe: !"..cmdpost.."  ", Bot, how )
 
    end
 
  cls(); return 1;
 
end
 
 
 
--- del msg
 
 
 
function delmsg( user, data, how )
 
  if message[user.sName] then
 
    local _,_,args = string.find(data,"%b<>%s+%S+%s+(.+)")
 
    if args then
 
      local function checksize(n) local cnt = 0; for a,b in message[n] do cnt = cnt + 1; end return cnt; end
 
      local function resort(t) local r ={}; for i,v in t do table.insert(r, v); end; return r; end
 
      for num in string.gfind( args, "%s-(%d+)%s-" ) do
 
      if num then
 
        num = tonumber(num);
 
          if message[user.sName][num] then
 
            message[user.sName][num] = nil
 
            SendBack( user, "Nachricht #"..num.." erfolgreich gelöscht!", Bot, how )
 
          else
 
            SendBack( user, "Nachricht #"..num.." existiert nicht!", Bot, how )
 
          end
 
      end
 
    end
 
    message[user.sName] = resort(message[user.sName]);
 
    if checksize(user.sName) == 0 then message[user.sName] = nil; end
 
      savemsg()
 
    else
 
      SendBack( user, "Falscher syntax! Schreibe: !"..cmddbox.." . Mehrere Zahlen mit Leerzeichen trennen.", Bot, how )
 
    end
 
  else
 
    SendBack( user, "Deine Mailbox ist leer.", Bot, how )
 
  end
 
    cls(); return 1;
 
end
 
 
 
----------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------- show inbox
 
 
 
function inbox( user, how )
 
  local sep, msg = string.rep( "=", 75 ), "\r\n\r\n\t\t\t\t\t\t\tHere is your inbox:\r\n"
 
  msg = msg..sep.."\r\n Msg#\tSender\tTime of sending\t\tRead\r\n"..sep
 
  if message[user.sName] then
 
    local function numess ( r ) if r == 0 then return "no"; end return "yes"; end
 
    local function checksize ( n ) local cnt = 0; for a,b in message[n] do cnt = cnt + 1; end return cnt; end
 
    local function dcode ( s ) if (string.sub(s,1,3) == "-n#") then s=string.sub(s,4,-1); local res = ""; for num in string.gfind( s, "#?(%d+)") do res = res..string.char(tonumber(num));end;return res;end;return s;end
 
    for num, t in message[user.sName] do
 
    msg=msg.."\r\n "..num.."\t"..dcode(t.who).."\t"..t.when.."\t"..numess(t.read).."\r\n"..sep
 
  end
 
    SendBack( user, msg, Bot, true )
 
    SendBack( user, "Schreibe !"..cmdread.."  um die Nachricht zu sehen. Mehrere Zahlen mit Leerzeichen trennen.", Bot, true )
 
  if checksize(user.sName) >= inboxsize then SendBack( user, "Alarm: Deine Mailbox ist voll!", Bot, true ); end
 
  else
 
    SendBack( user, "Du hast keine Nachrichten.", Bot, how )
 
  end
 
  cls(); return 1;
 
end
 
 
 
--- read msg(s)
 
 
 
function readmsg( user, data, how )
 
  if message[user.sName] then
 
    local _,_,args=string.find(data,"%b<>%s+%S+%s+(.+)")
 
    if args then
 
      local function dcode(s) if (string.sub(s,1,3) == "-n#") then s = string.sub(s,4,-1);local res = ""; for num in string.gfind( s, "#?(%d+)") do res = res..string.char(tonumber(num));end;return res;end;return s;
 
    end
 
    for num in string.gfind( args, "%s-(%d+)%s-" ) do
 
      if num then num = tonumber(num) end
 
      if num and message[user.sName][num] then
 
        local t = message[user.sName][num]
 
        local msg, sep,set = "\r\n\r\n\t\t\t\t\t\t\tMessage #"..num.."\r\n", string.rep( "=", 100 ), string.rep("- ", 85)
 
        msg = msg..sep.."\r\n\r\nFrom: "..dcode(t.who).."\tTime: "..t.when.."\t\tMessage follows\r\n"..set.."[Message start]\r\n"..dcode(t.message).."\r\n"..set.."[Message end]\r\n"..sep
 
        SendBack( user, msg, Bot, true )
 
        if t.read == 0 then t.read = 1; savemsg(); end
 
      else
 
        SendBack( user, "Nachricht #"..num.." existiert nicht!", Bot, how )
 
      end
 
  end
 
  else
 
    SendBack( user, "Falscher syntax! Schreibe: !"..cmdread.." . Mehrere Zahlen mit Leerzeichen trennen.", Bot, how )
 
  end
 
  else
 
    SendBack( user, "Deine Mailbox ist leer.", Bot, how )
 
  end
 
  cls(); return 1;
 
end
 
 
 
--- save msg
 
 
 
function savemsg()
 
  local function parse(tbl)
 
  local str, tab ="", string.rep( "\t", 9)
 
  local function fquot(s) return string.format( "%q", s) end
 
  local function ncode( s ) if (s ~= "") and (string.sub(s,1,3) ~= "-n#") then local t = {}; for i = 1, string.len(s) do t[i] = string.byte(string.sub(s,i,i)); end; return "-n#"..table.concat(t, "#"); end; return s; end
 
  for a, t in tbl do
 
    str = str.."\t\t{ ["..fquot("read").."] = "..t.read..", ["..fquot("who").."] = "..fquot(ncode(t.who))..", ["..fquot("when").."] = "..fquot(t.when)..",\n\t\t["..fquot("message").."] = "..fquot(ncode(t.message)).." },\n"
 
  end
 
  return str
 
  end
 
  local f = io.open ( "offline.dat", "w+" )
 
  local s = "message = {"
 
  for name, t in message do
 
  s = s.."\n\t["..string.format( "%q", string.gsub( name, "\"", "\"")).."] = {\n"..parse(t).."\t},"
 
  end;
 
  f:write(s.."\n}")
 
  f:close()
 
  end
 
 
 
function SendBack( user, msg, who, pm )
 
  if pm then user:SendPM ( who, msg ); else user:SendData( who, msg ); end
 
end
 
 
 
function NewUserConnected(user)
 
if user.bUserCommand then
 
user:SendData("$UserCommand 1 3 :Weimarnetz-Mailserver:\\INBOX$<%[mynick]> !inbox||")
 
user:SendData("$UserCommand 1 3 :Weimarnetz-Mailserver:\\poste eine Nachricht$<%[mynick]> !postmsg %[line:Enter  and :]||")
 
user:SendData("$UserCommand 1 3 :Weimarnetz-Mailserver:\\lese eine Nachricht$<%[mynick]> !readmsg %[line:Enter Nr of Post you would read:]||")
 
user:SendData("$UserCommand 1 3 :Weimarnetz-Mailserver:\\lösche eine Nachricht$<%[mynick]> !delmsg %[line:Enter Nr of Post you would delete:]||")
 
user:SendData(":Weimarnetz-Mailserver:", "Neues Rechts-Click Menu für Weimarnetz-Mailserver steht zur Verfügung..")
 
end
 
 
  if not washere[user.sName] then washere[user.sName] = 1 end
 
  if message[user.sName] then
 
  local cnt=0
 
  for a,b in message[user.sName] do if (b.read == 0) then cnt = cnt+1; end end
 
  if (cnt > 0) then SendBack( user, "Du hast "..cnt.." neue Nachrichten. Schreibe !"..cmdibox.." um in Deine Mailbox zu schauen!", Bot, true ); end
 
  end
 
end
 
 
 
function ChatArrival(user,data)
 
  local data = string.sub( data, 1, -2 )
 
  local _,_,cmd = string.find(data,"%b<>%s+[!+.#?](%S+)")
 
  if cmd then return parsecmds( user, data, string.lower(cmd) ); end
 
end
 
 
 
function ToArrival(user,data)
 
  if (string.sub( data, 1, string.len(Bot)+5) == "$To: "..Bot) then
 
  local data = string.sub( data, 1, -2 )
 
  local _,_,cmd = string.find(data,"%$%b<>%s+[!+.#?](%S+)")
 
  if cmd then return parsecmds( user, data, string.lower(cmd), true ) end
 
    return 1
 
  end
 
end
 
 
 
function parsecmds( user, data, cmd, how )
 
  local t = {
 
    [cmdpost] = { postmsg, { user, data, how } },
 
    [cmdread] = { readmsg, { user, data, how } },
 
    [cmdibox] = { inbox, { user, how } },
 
    [cmddbox] = { delmsg, { user, data, how } },
 
    }
 
  if t[cmd] then
 
    return t[cmd][1]( unpack(t[cmd][2]) )
 
  end
 
end
 
 
 
function UserDisconnected(user)
 
  if not washere[user.sName] then washere[user.sName] = 1; end
 
end
 
 
 
function OnExit()
 
  savemsg()
 
  local f = io.open( "washere.lst", "w+")
 
  for a,b in washere do f:write(a.."\n"); end
 
  f:close()
 
end
 
 
 
OpDisconnected=UserDisconnected
 
OpConnected=NewUserConnected
 
</pre>
 
 
 
====Voting(VotePoll-bot)====
 
<pre>
 
--Vote Poll v1.0
 
--Made by nErBoS
 
--Converted to Lua 5 by jiten
 
--Changed Visual Design / Translated to german / Added Rightclick by pulsar
 
 
 
Bot = "Vote Poll"
 
 
 
vt = {}
 
nr = {}
 
 
 
votetext = "voting.txt"
 
oldpolls = "voting-old.txt"
 
 
 
function Main()
 
frmHub:RegBot(Bot)
 
end
 
 
 
function NewUserConnected(user, data)
 
if (vt[user.sName] == nil) then
 
vt[user.sName] = 0
 
end
 
if (nr[user.sName] == nil) then
 
nr[user.sName] = 0
 
end
 
 
 
end
 
 
 
function NewUserConnected(user,data)
 
UserCmds(user)
 
if user.bOperator then
 
OpCmds(user)
 
end
 
end
 
 
 
OpConnected = NewUserConnected
 
rcmenue = "Voting"
 
 
 
function UserCmds(user)            -- User Befehle
 
        user:SendData("$UserCommand 1 3 "..rcmenue.."\\Zeige aktuelle Umfragen$<%[mynick]> +votefor&#124;|")
 
user:SendData("$UserCommand 1 3 "..rcmenue.."\\Zeige beendete Umfragen$<%[mynick]> +votelist&#124;|")
 
user:SendData("$UserCommand 0 3 |") -- separator
 
user:SendData("$UserCommand 1 3 "..rcmenue.."\\Bei einer aktuellen Umfrage abstimmen$<%[mynick]> +vote %[line:Welche Zuordnungsnummer?] %[line:y / n ?  (Yes or No)]&#124;|")
 
user:SendData("$UserCommand 0 3 |") -- separator
 
user:SendData("$UserCommand 1 3 "..rcmenue.."\\Abstimmungsergebnisse\\PM\\aktuelle Umfragen$<%[mynick]> +showvote %[line:Welche Zuordnungsnummer?] new&#124;|")
 
        user:SendData("$UserCommand 1 3 "..rcmenue.."\\Abstimmungsergebnisse\\PM\\beendete Umfragen$<%[mynick]> +showvote %[line:Welche Zuordnungsnummer?] old&#124;|")
 
user:SendData("$UserCommand 1 3 "..rcmenue.."\\Abstimmungsergebnisse\\Main\\aktuelle Umfragen$<%[mynick]> +svmain %[line:Welche Zuordnungsnummer?] new&#124;|")
 
user:SendData("$UserCommand 1 3 "..rcmenue.."\\Abstimmungsergebnisse\\Main\\beendete Umfragen$<%[mynick]> +svmain %[line:Welche Zuordnungsnummer?] old&#124;|")
 
end
 
function OpCmds(user)              -- OP Befehle
 
-- leer
 
if (user.iProfile == 0) then        -- Master Befehle
 
user:SendData("$UserCommand 1 3 "..rcmenue.."\\Admin\\Umfrage erstellen$<%[mynick]> +createvote %[line:Welche Zuordnungsnummer?] %[line:Welche Umfrage?]&#124;|")
 
user:SendData("$UserCommand 1 3 "..rcmenue.."\\Admin\\Umfrage beenden$<%[mynick]> +stopvote %[line:Welche Zuordnungsnummer?]&#124;|")
 
user:SendData("$UserCommand 1 3 "..rcmenue.."\\Admin\\Umfrage löschen$<%[mynick]> +delvote %[line:Welche Zuordnungsnummer?]&#124;|")
 
end
 
end
 
 
 
function ChatArrival(user, data)
 
data=string.sub(data,1,string.len(data)-1)
 
s,e,cmd = string.find(data,"%b<>%s+(%S+)")
 
if (cmd=="+votehelp") then
 
local msg = ""
 
if (user.iProfile == 0) then
 
msg = msg.."Befehle für das Voting:\r\n"
 
msg = msg.."\r\n"
 
msg = msg.."+createvote <nr> <q>\tErstellt eine Umfrage (nr = Zuordnungsnummer für die Umfrage) (q = Umfrage)\r\n"
 
msg = msg.."+stopvote <nr>\t\tBeendet die Umfrage\r\n"
 
msg = msg.."+showvote <nr> <old/new>\tZeigt die Abstimmungsergebnisse der Umfrage (old = alte Umfragen) oder (new = Umfragen die noch nicht beendet worden sind)\r\n"
 
msg = msg.."+svmain <nr> <old/new>\tZeigt die Abstimmungsergebnisse im Main (old = alte Umfragen) oder (new = Umfragen die noch nicht beendet worden sind)\r\n"
 
msg = msg.."+votelist\t\t\tZeigt alle Umfragen\r\n"
 
msg = msg.."+votefor\t\t\tZeigt die Umfragen bei denen du abstimmen kannst\r\n"
 
msg = msg.."+vote <nr> <y/n>\t\tUm bei einer Umfrage abzustimmen (y = ja) (n = nein) (nr = Nummer der Umfrage)\r\n"
 
msg = msg.."+delvote <nr>\t\tUm alte Umfragen zu löschen (nr = Nummer der zu löschenden Umfrage)\r\n"
 
msg = msg.."\r\n"
 
user:SendPM(Bot, msg)
 
else
 
msg = msg.."Befehle für das Voting:\r\n"
 
msg = msg.."\r\n"
 
msg = msg.."+votefor\t\t\tZeigt die Umfragen bei denen du abstimmen kannst\r\n"
 
msg = msg.."+vote <nr> <y/n>\t\tUm bei einer Umfrage abzustimmen (y = ja) (n = nein) (nr = Nummer der Umfrage)\r\n"
 
msg = msg.."\r\n"
 
user:SendPM(Bot, msg)
 
end
 
return 1
 
elseif (cmd=="+createvote") then
 
if (user.iProfile == 0) then
 
local s,e,number,question = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(.*)")
 
if (tonumber(number) == nil) then
 
user:SendPM(Bot, "Syntax error, +createvote <nr> <q>, nr muss eine Nummer sein!")
 
else
 
number = tonumber(number)
 
        if (question == nil or question == "") then
 
user:SendPM(Bot, "Syntax error, +createvote <nr> <q>, du musst schon auch ne Frage erstellen worüber abgestimmt werden soll!")
 
else
 
        if (CreatePoll(user, number, question) == 1) then
 
user:SendPM(Bot, "Die Abstimmung bzw. Umfrage wurde erstellt.")
 
else
 
user:SendPM(Bot, "Es existiert bereits eine Abstimmung bzw. Umfrage mit der Nummer  "..number..".")
 
end
 
end
 
end
 
else
 
user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!")
 
end
 
return 1
 
elseif (cmd=="+stopvote") then
 
if (user.iProfile == 0) then
 
local s,e,number = string.find(data,"%b<>%s+%S+%s+(.*)")
 
if (tonumber(number) == nil or number == "") then
 
user:SendPM(Bot, "Syntax error, +stopvote <nr>, nr muss eine Nummer sein!")
 
else
 
number = tonumber(number)
 
if (OldPoll(user, number) == 1) then
 
user:SendPM(Bot, "Die Abstimmung bzw. Umfrage wurde beendet und gespeichert in der  "..oldpolls..".")
 
else
 
user:SendPM(Bot, "Es gibt keine Abstimmung bzw. Umfrage mit der Nummer  "..number..".")
 
end
 
end
 
else
 
user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!")
 
end
 
return 1
 
elseif (cmd=="+showvote") then
 
if (user.iProfile == 0) then
 
local s,e,number, opt = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(%S+)")
 
if (tonumber(number) == nil) then
 
user:SendPM(Bot, "Syntax error, +showvote <nr> <old/new>, nr muss eine Nummer sein!")
 
else
 
number = tonumber(number)
 
if (opt == "old") then
 
if (CheckPoll(user, number, oldpolls) == "") then
 
user:SendPM(Bot, "Es gibt keine beendete Umfrage mit der Nummer  "..number..".")
 
else
 
user:SendPM(Bot, CheckPoll(user, number, oldpolls))
 
end
 
elseif(opt == "new") then
 
if (CheckPoll(user, number, votetext) == "") then
 
user:SendPM(Bot, "Es gibt keine Umfrage mit der Nummer  "..number..".")
 
else
 
user:SendPM(Bot, CheckPoll(user, number, votetext))
 
end
 
else
 
user:SendPM(Bot, "Syntax error, +showvote <nr> <old/new>, muss sein (old = alte Umfragen) oder (new = Umfragen die noch nicht beendet worden sind)")
 
end
 
end
 
else
 
user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!")
 
end
 
return 1
 
elseif (cmd=="+svmain") then
 
if (user.iProfile == 0) then
 
local s,e,number, opt = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(%S+)")
 
if (tonumber(number) == nil) then
 
user:SendPM(Bot, "Syntax error, +svmain <nr> <old/new>, nr muss eine Nummer sein!")
 
else
 
number = tonumber(number)
 
if (opt == "old") then
 
if (CheckPoll(user, number, oldpolls) == "") then
 
user:SendPM(Bot, "Es gibt keine beendete Umfrage mit der Nummer  "..number..".")
 
else
 
SendToAll(Bot, CheckPoll(user, number, oldpolls))
 
end
 
elseif(opt == "new") then
 
if (CheckPoll(user, number, votetext) == "") then
 
user:SendPM(Bot, "Es gibt keine Umfrage mit der Nummer  "..number..".")
 
 
 
        else
 
SendToAll(Bot, CheckPoll(user, number, votetext))
 
end
 
else
 
user:SendPM(Bot, "Syntax error, +svmain <nr> <old/new>, muss sein (old = alte Umfragen) oder (new = Umfragen die noch nicht beendet worden sind)")
 
end
 
end
 
else
 
user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!")
 
end
 
return 1
 
elseif (cmd=="+votelist") then
 
if (user.iProfile == 0) then
 
local l = io.open(oldpolls, "r")
 
if (ReadPoll(user, oldpolls) == "") then
 
user:SendPM(Bot, "Es gibt keine beendeten Umfragen")
 
else
 
user:SendPM(Bot, ReadPoll(user, oldpolls))
 
end
 
else
 
user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!")
 
end
 
return 1
 
elseif (cmd=="+votefor") then
 
if (ReadPoll(user, votetext) == "") then
 
user:SendPM(Bot, "Es gibt keine Abstimmungen bzw. Umfragen")
 
else
 
user:SendPM(Bot, ReadPoll(user, votetext))
 
end
 
return 1
 
elseif (cmd=="+vote") then
 
local s,e,number,opt = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(%S+)")
 
if (tonumber(number) == nil) then
 
user:SendPM(Bot, "Syntax error, +vote <nr> <y/n>, nr muss eine Nummer sein!")
 
else
 
number = tonumber(number)
 
if (opt == nil or opt == "" or opt ~= "n" and opt ~= "y") then
 
user:SendPM(Bot, "Syntax error, +vote <nr> <y/n>, du musst schreiben (y = ja) oder (n = nein).")
 
else
 
if (Vote(user, number, opt) == 1) then
 
user:SendPM(Bot, "Deine Abstimmung wurde registriert.")
 
vt[user.sName] = 1
 
nr[user.sName] = number
 
elseif(Vote(user, number, opt) == 2) then
 
user:SendPM(Bot, "Du hast bei dieser Umfrage bereits abgestimmt")
 
else
 
user:SendPM(Bot, "Es gibt keine Umfrage mit der Nummer  "..number..".")
 
end
 
end
 
end
 
return 1
 
elseif (cmd=="+delvote") then
 
if (user.iProfile == 0) then
 
local s,e,number = string.find(data,"%b<>%s+%S+%s+(%S+)")
 
if (tonumber(number) == nil) then
 
user:SendPM(Bot, "Syntax error, +delvote <nr>, nr muss eine Nummer sein!")
 
else
 
number = tonumber(number)
 
if (DelOldPoll(user, number) == 0) then
 
user:SendPM(Bot, "Es gibt keine beendete Umfrage mit der Nummer  "..number)
 
else
 
user:SendPM(Bot, "Die alte Umfrage wurde gelöscht.")
 
end
 
end
 
else
 
user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!")
 
end
 
return 1
 
end
 
end
 
 
 
ToArrival = ChatArrival
 
 
 
function CreatePoll(user, number, question)
 
local tmp = ""
 
local time = 0
 
local a = io.open(oldpolls, "r")
 
if a then
 
while 1 do
 
local line = a:read()
 
if (line == nil) then
 
break
 
else
 
local s,e,num = string.find(line,"Nr:%s+(%S+)%s+")
 
if (tonumber(num) ~= nil and tonumber(num) == number) then
 
time = 2
 
else
 
end
 
end
 
end
 
a:close()
 
else
 
dofile(oldpolls)
 
-- return a.." doesnt exist"
 
end
 
 
 
local b = io.open(votetext,"r")
 
if b then
 
while 1 do
 
local line = b:read()
 
if (line == nil) then
 
if (time == 2) then
 
break
 
else
 
tmp = tmp.."Nr: "..number.." Umfrage: "..question.." Ja: 0 Nein: 0 Active: Ja\r\n"
 
time = 1
 
break
 
end
 
else
 
local s,e,num = string.find(line,"Nr:%s+(%S+)%s+")
 
if (tonumber(num) ~= nil and tonumber(num) == number) then
 
tmp = tmp..line.."\r\n"
 
time = 2
 
else
 
tmp = tmp..line.."\r\n"
 
end
 
end
 
end
 
 
 
b:close()
 
local l = io.open(votetext,"w+")
 
l:write(tmp)
 
l:flush()
 
l:close()
 
return time
 
else
 
dofile(votetext)
 
-- return b.." doesnt exist"
 
end
 
return time
 
end
 
 
 
function OldPoll(user, number)
 
local tmp = ""
 
local tmp2 = ""
 
local time = 0
 
local c = io.open(votetext,"r")
 
if c then
 
while 1 do
 
local line = c:read()
 
if (line == nil) then
 
break
 
else
 
local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:")
 
if (tonumber(num) ~= nil and tonumber(num) == number) then
 
tmp2 = tmp2.."Nr: "..number.." "..question.."Ja: "..ny.." Nein: "..nn.." Active: Nein\r\n"
 
time = 1
 
else
 
tmp = tmp..line.."\r\n"
 
end
 
end
 
end
 
c:close()
 
local d = io.open(votetext,"w+")
 
d:write(tmp)
 
d:flush()
 
d:close()
 
if (time == 0) then
 
else
 
local e = io.open(oldpolls, "a+") -- "a+"
 
e:write(tmp2)
 
e:close()
 
end
 
return time
 
else
 
dofile(votetext)
 
-- return c.." existiert nicht"
 
 
 
end
 
end
 
 
 
function CheckPoll(user, number, file)
 
local tmp = ""
 
local f = io.open(file,"r")
 
if f then
 
while 1 do
 
local line = f:read()
 
if (line == nil) then
 
break
 
else
 
local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:")
 
if (tonumber(num) ~= nil and tonumber(num) == number) then
 
tmp = tmp.."\r\n________________________________________________"
 
tmp = tmp.."\r\n------------------------------------------ Voting ------------------------------------------"
 
tmp = tmp.."\r\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r\n\r\n"
 
tmp = tmp.."Ergebnis von Umfrage Nr:  "..num.." "
 
tmp = tmp.."\r\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r\n\r\n"
 
tmp = tmp..""..question.."\r\n"
 
tmp = tmp.."------------------------------\r\n"
 
tmp = tmp.."Ja:    "..ny.."\r\n"
 
tmp = tmp.."Nein: "..nn.."\r\n"
 
tmp = tmp.."------------------------------\r\n"
 
if (tonumber(ny) > tonumber(nn)) then
 
tmp = tmp.."Ja liegt vorne"
 
elseif (tonumber(ny) < tonumber(nn)) then
 
tmp = tmp.."Nein hat gewonnen."
 
elseif (tonumber(ny) == tonumber(nn)) then
 
tmp = tmp.."unentschieden."
 
end
 
break
 
else
 
end
 
end
 
end
 
f:close()
 
return tmp
 
else
 
dofile(file)
 
-- return f.." existiert nicht"
 
end
 
end
 
 
 
function ReadPoll(user, file)
 
local tmp = ""
 
local g = io.open(file,"r")
 
if g then
 
while 1 do
 
local line = g:read()
 
if (line == nil or line == "") then
 
              break
 
else
 
local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:")
 
if (num == nil) then
 
else
 
tmp = tmp.."\r\n________________________________________________"
 
tmp = tmp.."\r\n------------------------------------------ Voting ------------------------------------------"
 
tmp = tmp.."\r\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r\n\r\n"
 
tmp = tmp.."Ergebnis von Umfrage Nr:  "..num.." "
 
tmp = tmp.."\r\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r\n\r\n"
 
tmp = tmp..""..question.."\r\n"
 
tmp = tmp.."------------------------------\r\n"
 
tmp = tmp.."Ja:    "..ny.."\r\n"
 
tmp = tmp.."Nein: "..nn.."\r\n"
 
tmp = tmp.."------------------------------\r\n"
 
if (file == oldpolls) then
 
tmp = tmp.."Umfrage beendet\r\n"
 
elseif (file == votetext) then
 
tmp = tmp.."Umfrage läuft noch\r\n"
 
end
 
end
 
end
 
end
 
g:close()
 
return tmp
 
else
 
dofile(file)
 
-- return g.." existiert nicht"
 
end
 
end
 
 
 
function Vote(user, number, opt)
 
local tmp = ""
 
local time = 0
 
if (vt[user.sName] == 1 and nr[user.sName] == number) then
 
time = 2
 
else
 
 
 
local h = io.open(votetext,"r")
 
if h then
 
while 1 do
 
local line = h:read()
 
if (line == nil) then
 
break
 
else
 
local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:")
 
if (tonumber(num) ~= nil and tonumber(num) == number) then
 
if (opt == "y") then
 
ny = tonumber(ny) + 1
 
elseif (opt == "n") then
 
nn = tonumber(nn) + 1
 
end
 
tmp = tmp.."Nr: "..number.." "..question.."Ja: "..ny.." Nein: "..nn.." Active: Ja\r\n"
 
time = 1
 
else
 
tmp = tmp..line.."\r\n"
 
end
 
end
 
end
 
h:close()
 
else
 
dofile(votetext)
 
-- return h.." existiert nicht"
 
end
 
local i = io.open(votetext,"w+")
 
i:write(tmp)
 
i:flush()
 
i:close()
 
end
 
return time
 
end
 
 
 
function DelOldPoll(user, number)
 
local tmp = ""
 
local time = 0
 
local j = io.open(oldpolls,"r")
 
if j then
 
while 1 do
 
local line = j:read()
 
if (line == nil) then
 
break
 
else
 
local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:")
 
if (tonumber(num) ~= nil and tonumber(num) == number) then
 
time = 1
 
else
 
tmp = tmp..line.."\r\n"
 
end
 
end
 
end
 
j:close()
 
else
 
        dofile(oldpolls)
 
-- return j.." existiert nicht"
 
end
 
local k = io.open(oldpolls,"w+")
 
k:write(tmp)
 
k:flush()
 
k:close()
 
return time
 
end
 
</pre>
 

Version vom 16. April 2007, 22:23 Uhr

                                                         Willkommen in der Beat-Box 
                                                         
            ...................................................Hub-Infos ................................................
                                       Das Kopieren fremder Inhalte zur privaten oder sonstigen, eigener
                                	(auch geschäftlichen) Verwendung ist nach deutschem und schweizer
                               	 Recht zulässig. Laut dem Gesetzestext ist nicht zulässig,
                                	die fremden Inhalte ohne Einwilligung des Urhebers wieder zu 
                                	veröffentlichen. Im Internet (World Wide Web) sind alle Seiten, die
                                	nicht durch Paßworte geschützt sind, öffentlich! 
                                	Wer fremde Inhalte auf seine Web-Seiten stellt, diese 
                                	unzulässigerweise veröffentlicht dieses kann strafrechtlich verfolgt 

werden und kann recht teuer werden. Allein die

        			 	GEMA & Urheberrechtsgesetz - Gebühren können einen arm machen
                                	Ich hoffe, das euch das nicht zu sehr abschreckt!
                               
                                	UND NOCH EINMAL, ICH DER BETREIBER DIESES HUBs/CHAT ÜBERNEHME
                                	KEINE VERANTWORTUNG FÜR EUREN FESTPLATTENINHALT !!!!!!!!
                               
              


                                           Fragen zum Partnerhub bitte an Osiris oder die OP's wenden!


                                                                      Bitte beachtet:
                                                         Wer länger als 3 Wochen nicht im Hub 
                                                         war wird gelöscht! Wer länger Abwesend ist 
                                                         teilt es bitte ein OP mit, Danke! 
             
                                    
                                                                    
.                                                   *Regeln für unseren Hub*


                      01. Allgemein	        • (AD's) und (OP's) haben das letzte Wort....und generell Recht!
                                               • max 10 HUbs 

• Min. 2 Slots • MinShare: 3 GB

                                               • Kein Nazi, Tier oder Kinderporno im Share.

• Gesaugte Dateien sofort und min 2 Wochen lang sharen

                                               • Entpackte Releases haben nix im Share verloren und sollten entfernt werden.

• Dateien anderer P2P Systeme können zu kick führen....! • säubert euren Share von Torrentnamen • Übersichtlichkeit ist Pflicht. Wirre Strukturen werden entfernt^^

                      03. Wichtig:	        • Diskretion wird vorrausgesetzt

• Mainchatlogs werden nicht ausserhalb dieses Hubs kopiert. • PMs ebenso • Bereits der erste Verstoss hierzu führt zum Verlust des Accounts! • Wer Werbung vorhat, kann die OPS auch gleich um delreg bitten

                      04. Sonstiges:	        • Regelmässige Onlinezeit wird vorrausgesetzt. 
                                               • Tragt in den Settings unter Email eure genaue Connection ein. 

• z.B. DSL1000/128 - DSL2000/192 - DSL3000/384 • Freundlichkeit den anderen Gegenüber wird als selbstverständlich angesehen. • Die OPs haben dabei freien Ermessenspielraum


°°°°°°°°Wenn ihr euch nicht daran haltet, können warn, kick, ban oder delreg die Folge sein. Diskussionen sind sinnlos°°°°°°°°

                                                                                                                                              .##                                                     
                                                               ,##                                                     
                                                        ##-    ###                                                     
                                                        x##+    ;                                                      
                                                    ##.   #+                                                           
                                                    ####      ########                                                 
                                                      ;.    .###########                                               
                                                           ####+-  ##########=                                         
                                                  ;####.   ##   ,######-  -####                                        
                                                  .##x,    ## ,###= ######+ .##                                        
                                                            #### #   = #######                                         
                                                       -#-  ######;  ###x ###                                          
                                                    -#####   ## #+,   .=##x##                                          
                                                     x.      ##          x##                                           
                                                              ####x.      #######x;                                    
                                                               ######     +############                                
                                                               ;##  ##   #,#      -######                              
                                                              ####x ##  =# ##         =###                             
                                                           +############## ##  ##       ###                            
                                                         ##############   ###  ##        ###                           
                                                         ###   #########-####  ###   -#######                          
                                                        #####  =##### ######    #############                          
                                                      #######.  ###########    +######   ###-                          
                   ;##                              =###. ####  -##########,#####-       ###                           
                 ,###x+                        ,#######  ##### #######.  #####          x###                           
                x######                      X#####,   ##########.        .          x#####                            
                ###=####+                .X#####      +########.##       #     -X########-                             
                ##+#######,           ,#####x    ,######    +##  ##,  .x###############                                
             .+#####; +#####         ####    ; #####;       ###   #####################                                
             #-#####    =#####     .##+    ##==##           ##X     .#####=   #####.###                                
            ##-####;==#-  -####x   ##    #######           ###        ##-#       ## ###                                
         #################  .####; ##x#########           ,###       +####       ## +##                                
         #####+     .#;  +##   #### ####;                 ###        #####           ###                               
        #####,      ##   .-###;  ###x                 =#######-      #=.##     -########.                              
        #####x,    ;#, -#####X##X  ###x             #######,#####   ######   -###########                              
       #####+..    ## ########  -##  ###= =       #####       -######## #  +##############=                            
       ####        # -######### + ,##;.###X##-  x###X            ;###########   x### ##x####                           
    . ###x        ## ##  ######=###--X#+-##### ####                     ;+;       ##  ###;###  #.##,                   
   .# ###         # ##   #####x#-######X####  ###                                      ,#. ### ##-##                   
   #+##          ## ##  ################ ###-x###                       x#                  ### ##                     
  ## #           #  ######### #-#####+#= #####;##           .#+         +###+              #### ,                      
  ###x####.     ##  ######## ########.# #####= ###           ##=.=+xx+=,  +###            ####              ;#####-    
    x=  =####x  #    ######  #-#####.# ## ###  ###        ## #################.          ####            -##########   
           .#####;;.  =x#   ##x#XX#x,= #####=   ###       ##x ###xx++x########          #####Xx;.      =#############. 
              ##+X#####xx######xx+++X. -####;   X##.      ### ###       ####.          ############################### 
              =####X-               .;;. ,###    ###    ## ##  ###.    ####         ,=################################,
     =#####    .######  #####  ############.#X    X###   ###+##  ###  #####   X#########################################
   ##########   ######x######  -#####    ##        ####x ,## ###= ########    ###-.   +#################################
  ######, ;###  #############   ########+       ######################## ;############################################,
  ############  #### ### ####   =########      ######x##########################X++x######################      .;-.   
  ############  ####  # #####.   ####.  .##   ###x          .############.             ,#################              
   -########   ######  #######-+###########    ####################################++###################               
                    ,,                  .,      -############=         =###############################+                 
                              ***************    So und nun viel Spaß Beat-Box ***************