Converter-Errors
 

News:

29 December 2022 - PtokaX 0.5.3.0 (20th anniversary edition) released...
11 April 2017 - PtokaX 0.5.2.2 released...
8 April 2015 Anti child and anti pedo pr0n scripts are not allowed anymore on this board!
28 September 2015 - PtokaX 0.5.2.1 for Windows 10 IoT released...
3 September 2015 - PtokaX 0.5.2.1 released...
16 August 2015 - PtokaX 0.5.2.0 released...
1 August 2015 - Crowdfunding for ADC protocol support in PtokaX ended. Clearly nobody want ADC support...
30 June 2015 - PtokaX 0.5.1.0 released...
30 April 2015 Crowdfunding for ADC protocol support in PtokaX
26 April 2015 New support hub!
20 February 2015 - PtokaX 0.5.0.3 released...
13 April 2014 - PtokaX 0.5.0.2 released...
23 March 2014 - PtokaX testing version 0.5.0.1 build 454 is available.
04 March 2014 - PtokaX.org sites were temporary down because of DDOS attacks and issues with hosting service provider.

Main Menu

Converter-Errors

Started by B@B?, 13 May, 2005, 11:52:07

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

B@B?

I converted this script with NightLitch?s Converter.

The Error-Message from Hub-Soft was this:

49: attempt to concatenate global `bot' (a nil value)

Maybe somebody can help? I?ll understand what "a nil value" means...what action had happend?

Here we go: (Part 1)

-- Connect 4

sBotName = "Connect 4";
frmHub:RegBot(sBotName);

VGScoresFile = "VGScores.txt"   --The Scores File
VGFolder = "Games"      --The Games Folder
Max1 = 3         -- How many topscorers are shown

--       ************* MAIN SCRIPT *************

VGPlayers = {}
curGames = {}
tInvite = {}
gameTrigs = {}
VGChat = {}
Matrix = {
   TL = {
      [1] = 6,[2] = 6,[3] = 5,[4] = 4,[5] = 3,[6] = 2,[7] = 1,
      [8] = 5,[15] = 4,[22] = 3,[29] = 2,[36] = 1,
   },
   DL = {
      [1] = 1,[8] = 2,[15] = 3,[22] = 4,[29] = 5,
      [36] = 6,[37] = 6,[38] = 5,[39] = 4,[40] = 3,[41] = 2,[42] = 1,
   },
}
timersets = { 0,0,0 }

VGScores = {}
dofile(VGFolder.."/"..VGScoresFile)

playchar1 = "X"
playchar2 = "O"

VGHelp = "--- Connect 4-Hilfe ---\r\n\r\n"..
   "\t  Main Chat\r\n"..
   "\t-----------------------------------\r\n"..
   "\tinvite "..bot.."    - Herausforderung eines Users\r\n"..
   "\ttopscore "..bot.."    - TOP-Scorer\r\n"..
   "\tmyscore "..bot.."    - Dein Score\r\n"..
   "\thelp "..bot.."    - Diese Hilfe\r\n\r\n"..
   "\t  PM to "..bot.."\r\n"..
   "\t-----------------------------------\r\n"..
   "\tinvite    - Herausforderung eines Users\r\n"..
   "\tquit    - Quit\r\n"..
   "\ttopscore    - TOP-Scorer\r\n"..
   "\tmyscore    - Dein Score\r\n"..
   "\thelp    - Diese Hilfe\r\n"

function Main()
   for _ = 1,7 do
      table.insert(gameTrigs,1)
   end
   if RegC4Bot == 1 then
      frmHub:RegBot(bot)
   end
   SetTimer(10*1000)
   StartTimer()
end

function OnTimer()
   table.foreachi(timersets,function(i,_) timersets = timersets + 1 end)
   table.foreach(tInvite, function(i,_)
      tInvite[1] = tInvite[1] + 1
      if tInvite[1] >= 6 then
         tInvite = nil
      end
   end)
   if timersets[1] == 30 then
      timersets[1] = 0
      WriteTable(VGScores,"VGScores",VGFolder.."/"..VGScoresFile)
   end
   if timersets[2] == 60 then
      timersets[2] = 0
      table.foreach(curGames, function(i,_)
         curGames.timeout = curGames.timeout + 1
         if curGames.timeout == 6 then
            VGPlayers[curGames.players[1]] = nil
            VGPlayers[curGames.players[2]] = nil
            curGames = nil
         end
      end)
   end
   if timersets[3] == 6 then
      timersets[3] = 0
      table.foreach(VGChat, function(i,_)
         if not VGPlayers then
            VGChat[2] = VGChat[2] + 1
            if VGChat[2] == 5 then
               DelChat(i)
            end
         end
      end)
   end
end

function UserDisconnected(curUser)
   if VGPlayers[string.lower(curUser.sName)] then
      local curUser1 = GetItemByName(VGPlayers[string.lower(curUser.sName)].PlaysWith)
      if curUser1 then
         curUser1:SendPM(bot,"Dein Gegner ging OFF!")
      end
      DelGame(curUser)
      DelChat(string.lower(curUser.sName))
   end
end
OpDisconnected = UserDisconnected

function DataArrival(curUser,data)
   if string.sub(data,1,1) == "<" then
      if string.sub(data,string.len(data)-string.len(bot),string.len(data)-1) == bot then
         local _,_,word1 = string.find(data,"^%b<>%s+(%S+)")
         if word1 and VGFUNCS[string.lower(word1)] then
            VGFUNCS[string.lower(word1)](curUser,string.sub(data,4+string.len(curUser.sName),string.len(data)-1),1)
            return 1
         end
      end
   elseif string.sub(data,1,4) == "$To:" then
      if string.sub(data,6,5+(string.len(bot))) == bot then
         pmmsg = string.sub(data,(18+string.len(bot)+2*string.len(curUser.sName)),(string.len(data)-1))
         local _,_,word1 = string.find(pmmsg,"^(%S+)")
         if word1 and VGFUNCS[string.lower(word1)] then
            VGFUNCS[string.lower(word1)](curUser,pmmsg)
         elseif (VGPlayers[string.lower(curUser.sName)]) and tonumber(word1) and gameTrigs[tonumber(word1)] then
            Play4G(curUser,tonumber(word1))
         elseif word1 and VGChat[string.lower(curUser.sName)] and VGFUNCS[string.lower(word1)] then
            VGFUNCS[string.lower(word1)](curUser)
         elseif VGChat[string.lower(curUser.sName)] then
            local curUser1 = GetItemByName(VGChat[string.lower(curUser.sName)][1])
            if curUser1 then
               curUser1:SendData("$To: "..curUser1.sName.." von: "..bot.." $<"..curUser.sName.."> "..pmmsg)
               ResetChat(string.lower(curUser.sName))
            else
               curUser:SendPM(bot,"Dein Gegner ging OFF!")
               DelChat(string.lower(curUser.sName))
            end
         end
      end
   end
end

function OnExit()
   WriteTable(VGScores,"VGScores",VGFolder.."/"..VGScoresFile)
end

--       ************* GAME FUNCTIONS *************

--    RESET A CHAT SESSION

function ResetChat(curNick1)
   VGChat[VGChat[curNick1][1]][2] = 0
   VGChat[curNick1][2] = 0
end

--    DELETE A CHAT SESSION

function DelChat(curNick1)
   VGChat[VGChat[curNick1][1]] = nil
   VGChat[curNick1] = nil
end

--    SHOW CURRENT GAME

function GetCurGame(table)
   local VierGewinntFeld = "\r\n\r\n"..
   "\t\t        1               2              3               4              5               6              7\r\n\r\n"
   local count = 0
   for i = 1,6 do
      count = count + 1
      VierGewinntFeld = VierGewinntFeld.."\t\t        "..table[count][1]
      for i2 = 1,7 do
         if i2 == 7 then
            VierGewinntFeld = VierGewinntFeld.."\r\n\t\t______________________________________________________\r\n\r\n"
         else
            count = count + 1
            VierGewinntFeld = VierGewinntFeld.."       l       "..table[count][1]
         end
      end
   end
   return(VierGewinntFeld)
end

--    CREATE A GAME

function CreateGame(curNick1,curNick2)
   curGames[curNick1.."$"..curNick2] = {
      players = { curNick1,curNick2 },
      toPlay = { curNick2,playchar1 },
      game = {},
      plays = 0,
      timeout = 0,
   }
   VGPlayers[curNick1] = {
      PlaysWith = curNick2,
      curGame = curNick1.."$"..curNick2,
   }
   VGPlayers[curNick2] = {
      PlaysWith = curNick1,
      curGame = curNick1.."$"..curNick2,
   }
   VGChat[curNick1] = { curNick2,0 }
   VGChat[curNick2] = { curNick1,0 }
   for _ = 1,42 do
      table.insert(curGames[curNick1.."$"..curNick2].game,{ "  ",0 })
   end
end
THE DAY AFTER...  

...is >>>>>>>> NOW!




Btw:
Plz excuse my english...
It?s not the best, i?m sure...but it?s funny...isn?t it?

B@B?

and Part 2:



--    DELETE A GAME

function DelGame(curUser)
   local nick2 = VGPlayers[string.lower(curUser.sName)].PlaysWith
   local game = VGPlayers[string.lower(curUser.sName)].curGame
   curGames[game] = nil
   VGPlayers[string.lower(curUser.sName)] = nil
   VGPlayers[nick2] = nil
end

--    CHECK IF SOMEONE HAS WON

function doCheckForWin(curGame,char,index,line,chink)

   --Up --> Down
   local count = 0
   for i = 0,5 do
      if curGame[(chink+7*i)][1] == char then
         count = count + 1
         if count == 4 then
            return("WON")
         end
      else
         count = 0
      end
   end

   --Left --> Right
   local count = 0
   local begin = 7*line
   for i = 1,7 do
      if curGame[(begin+i)][1] == char then
         count = count + 1
         if count == 4 then
            return("WON")
         end
      else
         count = 0
      end
   end

   --UpLeft --> DownRight
   local diffline = line
   local diffchink = chink - 1
   local mult = 0
   if diffchink <= diffline then
      mult = diffchink
   else
      mult = diffline
   end
   local sindex = index - mult*8
   local count = 0
   for _ = 1,Matrix.TL[sindex] do
      if (curGame[sindex][1] == char) then
         count = count + 1
         if count == 4 then
            return("WON")
         end
      else
         count = 0
      end
      sindex = sindex + 8
   end

   --DownLeft --> UpRight
   local diffline = 5 - line
   local diffchink = chink - 1
   local mult = 0
   if diffchink <= diffline then
      mult = diffchink
   else
      mult = diffline
   end
   local sindex = index + mult*6
   local count = 0
   for _ = 1,Matrix.DL[sindex] do
      if (curGame[sindex][1] == char) then
         count = count + 1
         if count == 4 then
            return("WON")
         end
      else
         count = 0
      end
      sindex = sindex - 6
   end
end

--    INSERT X

function doInsertX(game,chink,char)
   local mult = 5
   for _ = 0,5 do
      if game[(chink+7*mult)][2] == 0 then
         game[(chink+7*mult)] = { char,1 }
         if doCheckForWin(game,char,(chink+7*mult),mult,chink) == "WON" then
            return game,"WON"
         else
            return game,"PLAY"
         end         
      end
      mult = mult - 1
   end
   return("FAILED")
end

--    PLAY ONE ROUND

function Play4G(curUser,num1)

   local sGame = curGames[VGPlayers[string.lower(curUser.sName)].curGame].game
   if (string.lower(curUser.sName) == curGames[VGPlayers[string.lower(curUser.sName)].curGame].toPlay[1]) then
      if GetItemByName(VGPlayers[string.lower(curUser.sName)].PlaysWith) then
         ResetChat(string.lower(curUser.sName))
         local curUser1 = GetItemByName(VGPlayers[string.lower(curUser.sName)].PlaysWith)
         local char = curGames[VGPlayers[string.lower(curUser.sName)].curGame].toPlay[2]
         local sGame,wp = doInsertX(sGame,num1,char)
         if (sGame ~= "FAILED") then
            curGames[VGPlayers[string.lower(curUser.sName)].curGame].game = sGame
            curGames[VGPlayers[string.lower(curUser.sName)].curGame].timeout = 0
            if char == playchar1 then
               curGames[VGPlayers[string.lower(curUser.sName)].curGame].toPlay = { string.lower(curUser1.sName),playchar2 }
            else
               curGames[VGPlayers[string.lower(curUser.sName)].curGame].toPlay = { string.lower(curUser1.sName),playchar1 }
            end
            curUser:SendPM(bot,GetCurGame(sGame))
            curUser1:SendPM(bot,curUser.sName.." Fertig... "..num1..", DU bist d?ran!"..GetCurGame(sGame))
            if wp == "WON" then
               curUser:SendPM(bot,"******  SIEG! ********")
               VGScores[curUser.sName] = VGScores[curUser.sName] or { wins = 0, losses = 0, lstreak = 0, cstreak = 0, }
               VGScores[curUser.sName].wins = VGScores[curUser.sName].wins + 1
               VGScores[curUser.sName].cstreak = VGScores[curUser.sName].cstreak + 1
               if VGScores[curUser.sName].cstreak > VGScores[curUser.sName].lstreak then
                  VGScores[curUser.sName].lstreak = VGScores[curUser.sName].cstreak
               end
               curUser:SendPM(bot,"Dein aktueller Status: Siege = "..VGScores[curUser.sName].wins..", Niederlagen = "..VGScores[curUser.sName].losses..", L?ngster Kampf: "..VGScores[curUser.sName].lstreak)
               curUser:SendPM(bot,"Du willst ein neues Spiel beginnen? Schreib? \"newgame\"")

               curUser1:SendPM(bot,"****** NIEDERLAGE! ********")
               VGScores[curUser1.sName] = VGScores[curUser1.sName] or { wins = 0, losses = 0, lstreak = 0, cstreak = 0, }
               VGScores[curUser1.sName].losses = VGScores[curUser1.sName].losses + 1
               VGScores[curUser1.sName].cstreak = 0
               curUser1:SendPM(bot,"Dein aktueller Status: Siege = "..VGScores[curUser1.sName].wins..", Niederlagen = "..VGScores[curUser1.sName].losses..", L?ngster Kampf: "..VGScores[curUser1.sName].lstreak)
               curUser1:SendPM(bot,"Du willst ein neues Spiel beginnen? Schreib? \"newgame\"")

               DelGame(curUser)
               return
            elseif wp == "PLAY" then
               curGames[VGPlayers[string.lower(curUser.sName)].curGame].plays = curGames[VGPlayers[string.lower(curUser.sName)].curGame].plays + 1
               if curGames[VGPlayers[string.lower(curUser.sName)].curGame].plays == 42 then

                  curUser:SendPM(bot,"******  UNENTSCHIEDEN  ********")
                  curUser:SendPM(bot,"Dein aktueller Status: Siege = "..VGScores[curUser.sName].wins..", Niederlagen = "..VGScores[curUser.sName].losses..", L?ngster Kampf: "..VGScores[curUser.sName].lstreak)
                  curUser:SendPM(bot,"Du willst ein neues Spiel beginnen? Schreib? \"newgame\"")
                  
                  curUser1:SendPM(bot,"******  GAME ENDED EVEN ********")
                  curUser1:SendPM(bot,"Dein aktueller Status: Siege = "..VGScores[curUser.sName].wins..", Niederlagen = "..VGScores[curUser.sName].losses..", L?ngster Kampf: "..VGScores[curUser.sName].lstreak)
                  curUser:SendPM(bot,"Du willst ein neues Spiel beginnen? Schreib? \"newgame\"")

                  DelGame(curUser)
                  return
               end
            end
         end
      else
         curUser:SendPM(bot,"Dein Gegner ging OFF!")
         DelGame(curUser,curUser1)
         DelChat(string.lower(curUser.sName))
      end
   end
end

--   Write Tables


function WriteTable(table,tablename,ffile)
   local handle = io.open(ffile,"w")
   Serialize(table,tablename,handle)
     io.close(handle)
end

function Serialize(tTable,sTableName,hFile,sTab)
   sTab = sTab or "";
   write(hFile,sTab..sTableName.." = {\n");
   for key,value in tTable do
      local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
      if(type(value) == "table") then
         Serialize(value,sKey,hFile,sTab.."\t");
      else
         local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
         write(hFile,sTab.."\t"..sKey.." = "..sValue);
      end
      write(hFile,",\n");
   end
   write(hFile,sTab.."}");
end

function doInvite(curUser,invited,ret)
   if invited and (not VGPlayers[string.lower(curUser.sName)]) and GetItemByName(invited) and (not VGPlayers[string.lower(invited)]) then
      tInvite[string.lower(invited)] = { 0,string.lower(curUser.sName) }
      curUser:SendPM(bot,"Sende Herausforderung an "..invited.."!")
      GetItemByName(invited):SendPM(bot,curUser.sName.." L?dt ein zu einer Session *Vier Gewinnt*, Schreib?: ja oder nein...")
   else
      if ret then
         curUser:SendData(tbot,"Entweder spielst Du bereits oder dein gew. Partner ist OFF!")
      else
         curUser:SendPM(tbot,"Entweder spielst Du bereits oder dein gew. Partner ist OFF!")
      end
   end
end

--    VG TABLE FUNCS

VGFUNCS = {
   ["invite"] = function(curUser,sdata,ret)
      local _,_,invited = string.find(sdata,"^%S+%s+(%S+)")
      local invited = invited or "$"
      doInvite(curUser,invited,ret)
      
   end,
   ["quit"] = function(curUser)
      if VGPlayers[string.lower(curUser.sName)] then
         curUser:SendPM(bot,"! Game Over !")
         local curUser2 = GetItemByName(VGPlayers[string.lower(curUser.sName)].PlaysWith)
         curUser2:SendPM(bot,curUser.sName.." verl?sst das Spiel...")
         DelGame(curUser)
      end
   end,
   ["ja"] = function(curUser)
      if tInvite[string.lower(curUser.sName)] then
         if GetItemByName(tInvite[string.lower(curUser.sName)][2]) and (not VGPlayers[tInvite[string.lower(curUser.sName)][2]]) then
            local curUser2 = GetItemByName(tInvite[string.lower(curUser.sName)][2])
            CreateGame(string.lower(curUser.sName),string.lower(curUser2.sName))
            curUser2:SendPM(bot,curUser.sName.." nimmt an...")
            curUser2:SendPM(bot,GetCurGame(curGames[VGPlayers[string.lower(curUser2.sName)].curGame].game))
            curUser:SendPM(bot,"Warte auf "..curUser2.sName.." um zu starten...")
         else
            curUser:SendPM(bot,"Entweder der Andere ist OFF oder spielt bereits!")
         end
         tInvite[string.lower(curUser.sName)] = nil
      end
   end,
   ["nein"] = function(curUser)
      if tInvite[string.lower(curUser.sName)] then
         curUser:SendPM(bot,"Herausforderung abgelehnt!")
         GetItemByName(tInvite[string.lower(curUser.sName)][2]):SendPM(bot,"Herausforderung abgelehnt! ^^")
         tInvite[string.lower(curUser.sName)] = nil
      end
   end,
   ["topscore"] = function(curUser,_,ret)
      --local ATable = {}
      table.foreach(VGScores, function(i,v) table.insert(ATable, { i,v }) end)
      local msg = "--- TOP "..Max1.." Connect 4 Status ---\r\n"

      table.sort(ATable, function(a,b) return(a[2].wins > b[2].wins) end)
      local msg = msg.."\r\n\t--- TOP-SIEGER ---\r\n\r\n"
      for i = 1,Max1 do
         if ATable then
            msg = msg.."\t# "..i.."  -  "..ATable[1].."    mit: "..ATable[2].wins.." Siegen, "..ATable[2].losses.." Niederlagen, "..ATable[2].lstreak.." K?mpfen\r\n"
         end
      end

      table.sort(ATable, function(a,b) return(a[2].lstreak > b[2].lstreak) end)
      local msg = msg.."\r\n\t--- TOP-K?mpfer ---\r\n\r\n"
      for i = 1,Max1 do
         if ATable then
            msg = msg.."\t# "..i.."  -  "..ATable[1].."    mit: "..ATable[2].lstreak.." K?mpfen, "..ATable[2].wins.." Siegen, "..ATable[2].losses.." Niederlagen\r\n"
         end
      end

      table.sort(ATable, function(a,b) return(a[2].losses > b[2].losses) end)
      local msg = msg.."\r\n\t--- TOP-Loser ---\r\n\r\n"
      for i = 1,Max1 do
         if ATable then
            msg = msg.."\t# "..i.."  -  "..ATable[1].."    mit: "..ATable[2].losses.." Niederlagen, "..ATable[2].wins.." Siegen, "..ATable[2].lstreak.." K?mpfen\r\n"
         end
      end
      if ret then
         curUser:SendData(bot,msg)
      else
         curUser:SendPM(bot,msg)
      end
   end,
   ["myscore"] = function(curUser,_,ret)
      VGScores[curUser.sName] = VGScores[curUser.sName] or { wins = 0, losses = 0, lstreak = 0, cstreak = 0, }
      if ret then
         curUser:SendData(bot,"Dein Status: ".. VGScores[curUser.sName].wins.." Siege, ".. VGScores[curUser.sName].losses.." Niederlagen, ".. VGScores[curUser.sName].lstreak.." K?mpfe")
      else
         curUser:SendPM(bot,"Dein Status: ".. VGScores[curUser.sName].wins.." Siege, ".. VGScores[curUser.sName].losses.." Niederlagen, ".. VGScores[curUser.sName].lstreak.." K?mpfe")
      end
   end,
   ["newgame"] = function(curUser)
      doInvite(curUser,VGChat[string.lower(curUser.sName)][1])
   end,
   ["help"] = function(curUser,_,ret)
      if ret then
         curUser:SendData(bot,VGHelp)
      else
         curUser:SendPM(bot,VGHelp)
      end
   end,
}
THE DAY AFTER...  

...is >>>>>>>> NOW!




Btw:
Plz excuse my english...
It?s not the best, i?m sure...but it?s funny...isn?t it?

Dessamator

#2
next time use "[ code ] " before the script and "[ /code ] " after, or highlight the text and click "#"  its easier to read when thats done :), anyhow here goes the script :

part 1
--Lua 5 by Dessamator
--script by chill , i guess, :)
-- Connect 4 

bot = "Connect4"; 
RegC4Bot = 1

VGScoresFile = "VGScores.txt" --The Scores File 
VGFolder = "Games" --The Games Folder 
Max1 = 3 -- How many topscorers are shown 

-- ************* MAIN SCRIPT ************* 

VGPlayers = {} 
curGames = {} 
tInvite = {} 
gameTrigs = {} 
VGChat = {} 
Matrix = { 
TL = { 
[1] = 6,[2] = 6,[3] = 5,[4] = 4,[5] = 3,[6] = 2,[7] = 1, 
[8] = 5,[15] = 4,[22] = 3,[29] = 2,[36] = 1, 
}, 
DL = { 
[1] = 1,[8] = 2,[15] = 3,[22] = 4,[29] = 5, 
[36] = 6,[37] = 6,[38] = 5,[39] = 4,[40] = 3,[41] = 2,[42] = 1, 
}, 
} 
timersets = { 0,0,0 } 

VGScores = {} 
dofile(VGFolder.."/"..VGScoresFile) 

playchar1 = "X" 
playchar2 = "O" 

VGHelp = "--- Connect 4-Hilfe ---\r\n\r\n".. 
"\t Main Chat\r\n".. 
"\t-----------------------------------\r\n".. 
"\tinvite  "..bot.." - Herausforderung eines Users\r\n".. 
"\ttopscore "..bot.." - TOP-Scorer\r\n".. 
"\tmyscore "..bot.." - Dein Score\r\n".. 
"\thelp "..bot.." - Diese Hilfe\r\n\r\n".. 
"\t PM to "..bot.."\r\n".. 
"\t-----------------------------------\r\n".. 
"\tinvite  - Herausforderung eines Users\r\n".. 
"\tquit - Quit\r\n".. 
"\ttopscore - TOP-Scorer\r\n".. 
"\tmyscore - Dein Score\r\n".. 
"\thelp - Diese Hilfe\r\n" 

function Main() 

	for _ = 1,7 do 
		table.insert(gameTrigs,1) 
	end 
	if RegC4Bot == 1 then 
		frmHub:RegBot(bot) 
	end 
		SetTimer(10*1000) 
	StartTimer() 
end 

function OnTimer() 
	table.foreachi(timersets,function(i,_) timersets[i] = timersets[i] + 1 end) 
	table.foreach(tInvite, function(i,_) 
	tInvite[i][1] = tInvite[i][1] + 1 
	if tInvite[i][1] >= 6 then 
		tInvite[i] = nil 
	end 
	end) 
	if timersets[1] == 30 then 
		timersets[1] = 0 
		WriteTable(VGFolder.."/"..VGScoresFile,VGScores,"VGScores") 
	end 
		if timersets[2] == 60 then 
			timersets[2] = 0 
			table.foreach(curGames, function(i,_) 
			curGames[i].timeout = curGames[i].timeout + 1 
			if curGames[i].timeout == 6 then 
				VGPlayers[curGames[i].players[1]] = nil 
				VGPlayers[curGames[i].players[2]] = nil 
				curGames[i] = nil 
			end 
	end) 
end 
	if timersets[3] == 6 then 
		timersets[3] = 0 
		table.foreach(VGChat, function(i,_) 
		if not VGPlayers[i] then 
			VGChat[i][2] = VGChat[i][2] + 1 
			if VGChat[i][2] == 5 then 
				DelChat(i) 
			end 
		end 
	end) 
end 
end 

function UserDisconnected(curUser) 
	if VGPlayers[string.lower(curUser.sName)] then 
		local curUser1 = GetItemByName(VGPlayers[string.lower(curUser.sName)].PlaysWith) 
		if curUser1 then 
			curUser1:SendPM(bot,"Dein Gegner ging OFF!") 
		end 
			DelGame(curUser) 
			DelChat(string.lower(curUser.sName)) 
	end 
end 
OpDisconnected = UserDisconnected 

function ChatArrival(curUser,data) 
	if string.sub(data,string.len(data)-string.len(bot),string.len(data)-1) == bot then 
		local _,_,word1 = string.find(data,"^%b<>%s+(%S+)") 
		if word1 and VGFUNCS[string.lower(word1)] then 
			VGFUNCS[string.lower(word1)](curUser,string.sub(data,4+string.len(curUser.sName),string.len(data)-1),1) 
	return 1 
		end 
	end
end
function ToArrival(curUser,data)
	if string.sub(data,6,5+(string.len(bot))) == bot then 
		pmmsg = string.sub(data,(18+string.len(bot)+2*string.len(curUser.sName)),(string.len(data)-1)) 
		local _,_,word1 = string.find(pmmsg,"^(%S+)") 
		if word1 and VGFUNCS[string.lower(word1)] then 
			VGFUNCS[string.lower(word1)](curUser,pmmsg) 
		elseif (VGPlayers[string.lower(curUser.sName)]) and tonumber(word1) and gameTrigs[tonumber(word1)] then 
			Play4G(curUser,tonumber(word1)) 
		elseif word1 and VGChat[string.lower(curUser.sName)] and VGFUNCS[string.lower(word1)] then 
			VGFUNCS[string.lower(word1)](curUser) 
		elseif VGChat[string.lower(curUser.sName)] then 
			local curUser1 = GetItemByName(VGChat[string.lower(curUser.sName)][1]) 
			if curUser1 then 
				curUser1:SendData("$To: "..curUser1.sName.." von: "..bot.." $<"..curUser.sName.."> "..pmmsg) 
				ResetChat(string.lower(curUser.sName)) 
			else 
				curUser:SendPM(bot,"Dein Gegner ging OFF!") 
				DelChat(string.lower(curUser.sName)) 
				 
			end 
		end 
	end 
end 

function OnExit() 
WriteTable(VGFolder.."/"..VGScoresFile,VGScores,"VGScores") 
end 

-- ************* GAME FUNCTIONS ************* 

-- RESET A CHAT SESSION 

function ResetChat(curNick1) 
VGChat[VGChat[curNick1][1]][2] = 0 
VGChat[curNick1][2] = 0 
end 

-- DELETE A CHAT SESSION 

function DelChat(curNick1) 
VGChat[VGChat[curNick1][1]] = nil 
VGChat[curNick1] = nil 
end 

-- SHOW CURRENT GAME 

function GetCurGame(table) 
local VierGewinntFeld = "\r\n\r\n".. "\t\t 1 2 3 4 5 6 7\r\n\r\n" 
local count = 0 
	for i = 1,6 do 
		count = count + 1 
		VierGewinntFeld = VierGewinntFeld.."\t\t "..table[count][1] 
		for i2 = 1,7 do 
			if i2 == 7 then 
			VierGewinntFeld = VierGewinntFeld.."\r\n\t\t______________________________________________________\r\n\r\n " 
		else 
			count = count + 1 
			VierGewinntFeld = VierGewinntFeld.." l "..table[count][1] 
			end 
		end 
	end 
return(VierGewinntFeld) 
end 

-- CREATE A GAME 

function CreateGame(curNick1,curNick2) 
curGames[curNick1.."$"..curNick2] = { 
players = { curNick1,curNick2 }, 
toPlay = { curNick2,playchar1 }, 
game = {}, 
plays = 0, 
timeout = 0, 
} 
VGPlayers[curNick1] = { 
PlaysWith = curNick2, 
curGame = curNick1.."$"..curNick2, 
} 
VGPlayers[curNick2] = { 
PlaysWith = curNick1, 
curGame = curNick1.."$"..curNick2, 
} 
VGChat[curNick1] = { curNick2,0 } 
VGChat[curNick2] = { curNick1,0 } 
	for _ = 1,42 do 
		table.insert(curGames[curNick1.."$"..curNick2].game,{ " ",0 }) 
	end 
end
Ignorance is Bliss.

Dessamator

part 2 :

-- DELETE A GAME 

function DelGame(curUser) 
local nick2 = VGPlayers[string.lower(curUser.sName)].PlaysWith 
local game = VGPlayers[string.lower(curUser.sName)].curGame 
curGames[game] = nil 
VGPlayers[string.lower(curUser.sName)] = nil 
VGPlayers[nick2] = nil 
end 

-- CHECK IF SOMEONE HAS WON 

function doCheckForWin(curGame,char,index,line,chink) 

--Up --> Down 
local count = 0 
	for i = 0,5 do 
		if curGame[(chink+7*i)][1] == char then 
			count = count + 1 
			if count == 4 then 
				return("WON") 
			end 
		else 
	count = 0 
	end 
end 

--Left --> Right 
local count = 0 
local begin = 7*line 
	for i = 1,7 do 
		if curGame[(begin+i)][1] == char then 
		count = count + 1 
			if count == 4 then 
				return("WON") 
			end 
		else 
	count = 0 
	end 
end 

--UpLeft --> DownRight 
local diffline = line 
local diffchink = chink - 1 
local mult = 0 
	if diffchink <= diffline then 
		mult = diffchink 
	else 
		mult = diffline 
	end 
		local sindex = index - mult*8 
		local count = 0 
		for _ = 1,Matrix.TL[sindex] do 
			if (curGame[sindex][1] == char) then 
				count = count + 1 
				if count == 4 then 
					return("WON") 
				end 
				else 
					count = 0 
			end 
			sindex = sindex + 8 
end 

--DownLeft --> UpRight 
local diffline = 5 - line 
local diffchink = chink - 1 
local mult = 0 
	if diffchink <= diffline then 	
		mult = diffchink 
	else 
		mult = diffline 
	end 
		local sindex = index + mult*6 
		local count = 0 
		for _ = 1,Matrix.DL[sindex] do 
			if (curGame[sindex][1] == char) then 
				count = count + 1 
				if count == 4 then 
					return("WON") 
				end 
				else 
					count = 0 
				end 
		sindex = sindex - 6 
	end 
end 

-- INSERT X 

function doInsertX(game,chink,char) 
local mult = 5 
	for _ = 0,5 do 
		if game[(chink+7*mult)][2] == 0 then 
			game[(chink+7*mult)] = { char,1 } 
			if doCheckForWin(game,char,(chink+7*mult),mult,chink) == "WON" then 
				return game,"WON" 
			else 
				return game,"PLAY" 
			end 
		end 
				mult = mult - 1 
	end 
return("FAILED") 
end 

-- PLAY ONE ROUND 

function Play4G(curUser,num1) 

local sGame = curGames[VGPlayers[string.lower(curUser.sName)].curGame].game 
	if (string.lower(curUser.sName) == curGames[VGPlayers[string.lower(curUser.sName)].curGame].toPlay[1]) then 
		if GetItemByName(VGPlayers[string.lower(curUser.sName)].PlaysWith) then 
			ResetChat(string.lower(curUser.sName)) 
			local curUser1 = GetItemByName(VGPlayers[string.lower(curUser.sName)].PlaysWith) 
			local char = curGames[VGPlayers[string.lower(curUser.sName)].curGame].toPlay[2] 
			local sGame,wp = doInsertX(sGame,num1,char) 
			if (sGame ~= "FAILED") then 
				curGames[VGPlayers[string.lower(curUser.sName)].curGame].game = sGame 
				curGames[VGPlayers[string.lower(curUser.sName)].curGame].timeout = 0 
				if char == playchar1 then 
					curGames[VGPlayers[string.lower(curUser.sName)].curGame].toPlay = { string.lower(curUser1.sName),playchar2 } 
				else 
					curGames[VGPlayers[string.lower(curUser.sName)].curGame].toPlay = { string.lower(curUser1.sName),playchar1 } 
				end 
					curUser:SendPM(bot,GetCurGame(sGame)) 
					curUser1:SendPM(bot,curUser.sName.." Fertig... "..num1..", DU bist d?ran!"..GetCurGame(sGame)) 
				if wp == "WON" then 
					curUser:SendPM(bot,"****** SIEG! ********") 
					VGScores[curUser.sName] = VGScores[curUser.sName] or { wins = 0, losses = 0, lstreak = 0, cstreak = 0, } 
					VGScores[curUser.sName].wins = VGScores[curUser.sName].wins + 1 
					VGScores[curUser.sName].cstreak = VGScores[curUser.sName].cstreak + 1 
					if VGScores[curUser.sName].cstreak > VGScores[curUser.sName].lstreak then 
						VGScores[curUser.sName].lstreak = VGScores[curUser.sName].cstreak 
					end 
						curUser:SendPM(bot,"Dein aktueller Status: Siege = "..VGScores[curUser.sName].wins..", Niederlagen = "..VGScores[curUser.sName].losses..", L?ngster Kampf: "..VGScores[curUser.sName].lstreak) 
						curUser:SendPM(bot,"Du willst ein neues Spiel beginnen? Schreib? \"newgame\"") 

						curUser1:SendPM(bot,"****** NIEDERLAGE! ********") 
						VGScores[curUser1.sName] = VGScores[curUser1.sName] or { wins = 0, losses = 0, lstreak = 0, cstreak = 0, } 
						VGScores[curUser1.sName].losses = VGScores[curUser1.sName].losses + 1 
						VGScores[curUser1.sName].cstreak = 0 
						curUser1:SendPM(bot,"Dein aktueller Status: Siege = "..VGScores[curUser1.sName].wins..", Niederlagen = "..VGScores[curUser1.sName].losses..", L?ngster Kampf: "..VGScores[curUser1.sName].lstreak) 
						curUser1:SendPM(bot,"Du willst ein neues Spiel beginnen? Schreib? \"newgame\"") 

						DelGame(curUser) 
				return 
				elseif wp == "PLAY" then 
					curGames[VGPlayers[string.lower(curUser.sName)].curGame].plays = curGames[VGPlayers[string.lower(curUser.sName)].curGame].plays + 1 
					if curGames[VGPlayers[string.lower(curUser.sName)].curGame].plays == 42 then 
	
						curUser:SendPM(bot,"****** UNENTSCHIEDEN ********") 
						curUser:SendPM(bot,"Dein aktueller Status: Siege = "..VGScores[curUser.sName].wins..", Niederlagen = "..VGScores[curUser.sName].losses..", L?ngster Kampf: "..VGScores[curUser.sName].lstreak) 
						curUser:SendPM(bot,"Du willst ein neues Spiel beginnen? Schreib? \"newgame\"") 
	
						curUser1:SendPM(bot,"****** GAME ENDED EVEN ********") 
						curUser1:SendPM(bot,"Dein aktueller Status: Siege = "..VGScores[curUser.sName].wins..", Niederlagen = "..VGScores[curUser.sName].losses..", L?ngster Kampf: "..VGScores[curUser.sName].lstreak) 
						curUser:SendPM(bot,"Du willst ein neues Spiel beginnen? Schreib? \"newgame\"") 

					DelGame(curUser) 
					return 
					end 
				end 
			end 
	else 
		curUser:SendPM(bot,"Dein Gegner ging OFF!") 
		DelGame(curUser,curUser1) 
		DelChat(string.lower(curUser.sName)) 
		end 
	end 
end 

-- Write Tables 


function WriteTable(file , table , tablename)
	local handle = io.open(file,"w+")
        handle:write(Serialize(table, tablename))
	handle:flush()
        handle:close()
end 


function Serialize(tTable, sTableName, sTab)
        assert(tTable, "tTable equals nil");
        assert(sTableName, "sTableName equals nil");

        assert(type(tTable) == "table", "tTable must be a table!");
        assert(type(sTableName) == "string", "sTableName must be a string!");

        sTab = sTab or "";
        sTmp = ""

        sTmp = sTmp..sTab..sTableName.." = {\n"

        for key, value in tTable do
                local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);

                if(type(value) == "table") then
                        sTmp = sTmp..Serialize(value, sKey, sTab.."\t");
                else
                        local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
                        sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
                end

                sTmp = sTmp..",\n"
        end

        sTmp = sTmp..sTab.."}"
        return sTmp
end

function doInvite(curUser,invited,ret) 
	if invited and (not VGPlayers[string.lower(curUser.sName)]) and GetItemByName(invited) and (not VGPlayers[string.lower(invited)]) then 
		tInvite[string.lower(invited)] = { 0,string.lower(curUser.sName) } 
		curUser:SendPM(bot,"Sende Herausforderung an "..invited.."!") 
	GetItemByName(invited):SendPM(bot,curUser.sName.." L?dt ein zu einer Session *Vier Gewinnt*, Schreib?: ja oder nein...") 
	else 
		if ret then 
			curUser:SendData(tbot,"Entweder spielst Du bereits oder dein gew. Partner ist OFF!") 
		else 
			curUser:SendPM(tbot,"Entweder spielst Du bereits oder dein gew. Partner ist OFF!") 
		end 
	end 
end 

-- VG TABLE FUNCS 

VGFUNCS = { 
["invite"] = function(curUser,sdata,ret) 
local _,_,invited = string.find(sdata,"^%S+%s+(%S+)") 
local invited = invited or "$" 
doInvite(curUser,invited,ret) 

end, 
["quit"] = function(curUser) 
	if VGPlayers[string.lower(curUser.sName)] then 
		curUser:SendPM(bot,"! Game Over !") 
		local curUser2 = GetItemByName(VGPlayers[string.lower(curUser.sName)].PlaysWith) 
		curUser2:SendPM(bot,curUser.sName.." verl?sst das Spiel...") 
		DelGame(curUser) 
	end 
end, 
["ja"] = function(curUser) 
	if tInvite[string.lower(curUser.sName)] then 
		if GetItemByName(tInvite[string.lower(curUser.sName)][2]) and (not VGPlayers[tInvite[string.lower(curUser.sName)][2]]) then 
			local curUser2 = GetItemByName(tInvite[string.lower(curUser.sName)][2]) 
			CreateGame(string.lower(curUser.sName),string.lower(curUser2.sName)) 
			curUser2:SendPM(bot,curUser.sName.." nimmt an...") 
			curUser2:SendPM(bot,GetCurGame(curGames[VGPlayers[string.lower(curUser2.sName)].curGame].game)) 
			curUser:SendPM(bot,"Warte auf "..curUser2.sName.." um zu starten...") 
		else 
			curUser:SendPM(bot,"Entweder der Andere ist OFF oder spielt bereits!") 
		end 
			tInvite[string.lower(curUser.sName)] = nil 
	end 
end, 
["nein"] = function(curUser) 
	if tInvite[string.lower(curUser.sName)] then 
		curUser:SendPM(bot,"Herausforderung abgelehnt!") 
		GetItemByName(tInvite[string.lower(curUser.sName)][2]):SendPM(bot,"Herausforderung abgelehnt! ^^") 
		tInvite[string.lower(curUser.sName)] = nil 
	end 
end, 
["topscore"] = function(curUser,_,ret) 
local ATable = {} 
table.foreach(VGScores, function(i,v) table.insert(ATable, { i,v }) end) 
local msg = "--- TOP "..Max1.." Connect 4 Status ---\r\n" 

table.sort(ATable, function(a,b) return(a[2].wins > b[2].wins) end) 
local msg = msg.."\r\n\t--- TOP-SIEGER ---\r\n\r\n" 
	for i = 1,Max1 do 
		if ATable[i] then 
			msg = msg.."\t# "..i.." - "..ATable[i][1].." mit: "..ATable[i][2].wins.." Siegen, "..ATable[i][2].losses.." Niederlagen, "..ATable[i][2].lstreak.." K?mpfen\r\n" 
		end 
	end 

table.sort(ATable, function(a,b) return(a[2].lstreak > b[2].lstreak) end) 
local msg = msg.."\r\n\t--- TOP-K?mpfer ---\r\n\r\n" 
	for i = 1,Max1 do 
		if ATable[i] then 
		msg = msg.."\t# "..i.." - "..ATable[i][1].." mit: "..ATable[i][2].lstreak.." K?mpfen, "..ATable[i][2].wins.." Siegen, "..ATable[i][2].losses.." Niederlagen\r\n" 
	end 
end 

table.sort(ATable, function(a,b) return(a[2].losses > b[2].losses) end) 
local msg = msg.."\r\n\t--- TOP-Loser ---\r\n\r\n" 
	for i = 1,Max1 do 
		if ATable[i] then 
			msg = msg.."\t# "..i.." - "..ATable[i][1].." mit: "..ATable[i][2].losses.." Niederlagen, "..ATable[i][2].wins.." Siegen, "..ATable[i][2].lstreak.." K?mpfen\r\n" 
		end 
	end 
	if ret then 
		curUser:SendData(bot,msg) 
	else 
		curUser:SendPM(bot,msg) 
	end 
end, 
["myscore"] = function(curUser,_,ret) 
VGScores[curUser.sName] = VGScores[curUser.sName] or { wins = 0, losses = 0, lstreak = 0, cstreak = 0, } 
	if ret then 
		curUser:SendData(bot,"Dein Status: ".. VGScores[curUser.sName].wins.." Siege, ".. VGScores[curUser.sName].losses.." Niederlagen, ".. VGScores[curUser.sName].lstreak.." K?mpfe") 
	else 
		curUser:SendPM(bot,"Dein Status: ".. VGScores[curUser.sName].wins.." Siege, ".. VGScores[curUser.sName].losses.." Niederlagen, ".. VGScores[curUser.sName].lstreak.." K?mpfe") 
	end 
end, 
["newgame"] = function(curUser) 
doInvite(curUser,VGChat[string.lower(curUser.sName)][1]) 
end, 
["help"] = function(curUser,_,ret) 
	if ret then 
		curUser:SendData(bot,VGHelp) 
	else 
		curUser:SendPM(bot,VGHelp) 
	end 
end, 
}
Ignorance is Bliss.

SMF spam blocked by CleanTalk