PtokaX forum

Lua 5.3/5.2/5.1 Scripts (for PtokaX 0.4.0.0 and newer) => Help with scripts => Topic started by: miago on 23 April, 2008, 15:07:49

Title: Help with Ascii-Talk
Post by: miago on 23 April, 2008, 15:07:49
Hi.

Need some help with this script so all users (operator, vips and regs) get the RCmenu under hubtab and userslist, atm only masters get it.
I think it's the second line that needs to be changed but I dont know to what, have tried on my own but I cant get it to work.


function ATalk:SendUserCommands( user )
if (self.RegOnly == 0) or (self.RegOnly == 1 and user.iProfile ~= -1) then
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say It! (Font: default)$<%[mynick]> "..self.Prefix..self.SayCmd.." %[line: Say your

thing]&#124;")
for i,_ in pairs( self.Fonts ) do
if i ~= self.DefaultFont then
Core.SendToUser(user, "$UserCommand 0 0 "..self.Menu.."\\Say It! (Font: "..i..", "..self.Defaultsize[i]..")$<%[mynick]>

"..self.Prefix..self.SayFormatCmd.." {\\"..i.." %[line: Say your thing]}&#124;")
end
end
--Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say It! (choose font, size)$<%[mynick]> "..self.Prefix..self.SayFormatCmd.." {\\%

[line: Font?]\\%[line: Size?] %[line: Say your thing]}&#124;")
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\AsciiTalk Help$<%[mynick]> "..self.Prefix..self.HelpCmd.."&#124;")
Core.SendToUser(user, "$UserCommand 0 3 &#124;")
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say:$&#124;")
if self.CatchWord == 1 then
for _,v in ipairs( self.SingleWordIndex ) do
if string.find( self.SingleWord[v][1], "%[arg%]" ) then
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say :\\ "..v.."$<%[mynick]> "..v.." %[line: Name?]&#124;")
--Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\   ->         "..v.."   . . .$<%[mynick]> "..v.." %[line: 

. . . ]&#124;")
else
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say :\\ "..v.."$<%[mynick]> "..v.."&#124;")
--Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\   ->         "..v.."$<%[mynick]> "..v.."&#124;")
end
end
end
end
end


and heres the whole lua.


--// Another UwV and CHILL CODE ? production //--
--// Idea taken from aDe's SAY SCRIPT, many thx //--

--// ASCII TALK  0.3 //--

--[[
CHANGELOG:
-----------------------
V 0.3i -        UwV          nov. 13 2007   @ 00:58:05
    changed to new px api

V 0.2 -   15/11/2006:    
Added more SingleWords support (second argument), check file (UwV)
Fixed linebreaks this time...
Changed UserCommands, deleted submenu for single words

V 0.1  -  7/11/2006:
Changed Ascii File Layout
Added Support for Emotions, Phrases
Added SingleWord support and SingleWordFile (UwV)
Optimised Loading of Fonts
Fixed linebreaks, can now be used in all commands
Added [name] support in Single Words
Added formatmode for Single Words
Made Tabstops and linbreaks c conform e.g. \n, \t
Added SingleWord Menu Support (UwV)


--]]--

--// All Fonts optimised for Microssoft Sans Serif Size 8


--// ASCII TALK //--

-- Appearance
ATalk = {}
ATalk.Botname = "-=Ascii-Talk=-"
ATalk.Menu = "-=Ascii-Talk=-"
--ATalk.Menu = "AsciiTalk\\ATalk" --with submenu
ATalk.Prefix = "!" -- The shown  Prefix
ATalk.SayCmd = "blowup"
ATalk.SayFormatCmd = "fblowup"
ATalk.HelpCmd = "atalk"
ATalk.ShowCmd = 0  -- shows used command
ATalk.CatchWord = 1  -- try to convert a single word, emotion from mainchat, with default font

-- Security
ATalk.RegOnly = 1

ATalk.Path = "ASCII/"
ATalk.DefaultFont = "grUwVitty"

----------------------------------------------
----------------------------------------------

ATalk.Version = "0.3 (Return of the ASCII.i)"

-- Fonts
ATalk.Fonts = {}
ATalk.Defaultsize = {}
-- Single Word
ATalk.SingleWord = {}

-- SingleWord Index Table
ATalk.SingleWordIndex = {}

--// PTOKAX API //--

function OnStartup()
ATalk:Main()
end

function ChatArrival( User, Data )
return ATalk:ChatArrival( User, Data )
end

function UserConnected( User )
ATalk:SendUserCommands( User )
end
OpConnected = UserConnected


-- MAIN
function ATalk:Main()
-- load font grUwVitty normal
self:loadFont( self.Path.."grUwVitty.normal.txt" )
-- load font graffitytab normal
self:loadFont( self.Path.."graffitytab.normal.txt" )
-- load font semicolon big
self:loadFont( self.Path.."semicolon.big.txt" )

if self.CatchWord == 1 then
-- load Single Word File
self:loadSingleWord( self.Path.."SingleWord.txt" )
end
end

function ATalk:SendUserCommands( user )
if (self.RegOnly == 0) or (self.RegOnly == 1 and user.iProfile ~= -1) then
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say It! (Font: default)$<%[mynick]> "..self.Prefix..self.SayCmd.." %[line: Say your

thing]&#124;")
for i,_ in pairs( self.Fonts ) do
if i ~= self.DefaultFont then
Core.SendToUser(user, "$UserCommand 0 0 "..self.Menu.."\\Say It! (Font: "..i..", "..self.Defaultsize[i]..")$<%[mynick]>

"..self.Prefix..self.SayFormatCmd.." {\\"..i.." %[line: Say your thing]}&#124;")
end
end
--Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say It! (choose font, size)$<%[mynick]> "..self.Prefix..self.SayFormatCmd.." {\\%

[line: Font?]\\%[line: Size?] %[line: Say your thing]}&#124;")
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\AsciiTalk Help$<%[mynick]> "..self.Prefix..self.HelpCmd.."&#124;")
Core.SendToUser(user, "$UserCommand 0 3 &#124;")
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say:$&#124;")
if self.CatchWord == 1 then
for _,v in ipairs( self.SingleWordIndex ) do
if string.find( self.SingleWord[v][1], "%[arg%]" ) then
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say :\\ "..v.."$<%[mynick]> "..v.." %[line: Name?]&#124;")
--Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\   ->         "..v.."   . . .$<%[mynick]> "..v.." %[line: 

. . . ]&#124;")
else
Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\Say :\\ "..v.."$<%[mynick]> "..v.."&#124;")
--Core.SendToUser(user, "$UserCommand 1 3 "..self.Menu.."\\   ->         "..v.."$<%[mynick]> "..v.."&#124;")
end
end
end
end
end


-- CHAT ARRIVAL
function ATalk:ChatArrival( user, sdata )
if (self.RegOnly == 0) or (self.RegOnly == 1 and user.iProfile ~= -1) then
sdata = string.sub( sdata, 1, - 2 )
local _,_,cmd = string.find( sdata, "^%b<>%s+%p(%S+)" )
if cmd and self.Cmd[cmd] then
self.Cmd[cmd]( self, user, sdata )
return true
elseif self.CatchWord == 1 then
local _,_,word = string.find( sdata, "^%b<>%s+(%S+)" )
local _,_,word2 = string.find( sdata, "^%b<>%s+%p(%S+)" )
if word and self.SingleWord[word] then
self:doSingleWord( user, sdata, word )
return true
elseif word2 and self.SingleWord[word2] then
self:doSingleWord( user, sdata, word2 )
return true
end
end
end
end

-- ATALK COMMANDS
-- Special Commands
function ATalk:doSingleWord( user, sdata, word )
-- get random ascii to display
local ascii = self.SingleWord[word][math.random( 1, table.getn( self.SingleWord[word] ) )]
-- check for second argument
local _,_,arg = string.find( sdata, "^%b<>%s+%S+%s+(.+)" )
local name = user.sNick
arg = arg or ""
local tosub = {
["[arg]"] = function() return arg end,
["[name]"] = function()
user.sNick = self.Botname
return name
end,
["[time]"] = function() return os.date( "%H:%M:%S" ) end,
["[Year]"] = function() return os.date( "%Y" ) end,
["[year]"] = function() return os.date( "%y" ) end,
["[Month]"] = function() return os.date( "%B" ) end,
["[month]"] = function() return os.date( "%b" ) end,
["[mon]"] = function()  return os.date( "%m" ) end,
["[DAY]"] = function() return os.date( "%A" ) end,
["[Day]"] = function() return os.date( "%a" ) end,
["[day]"] = function() return os.date( "%d" ) end,
}
local x = string.gsub( ascii, "%b[]", function( c )
if tosub[c] then
return tosub[c]()
else
return c
end
end)
x = string.gsub( x, "%b{}", function( c )
return string.sub( self:convertf( c ), 3, -1 )
end)
if self.ShowCmd == 1 then
Core.SendToAll( sdata..x )
return true
else
Core.SendToAll( "<"..user.sNick.."> "..x )
end
end

ATalk.Cmd = {}

-- say with default formating
ATalk.Cmd[ATalk.SayCmd] = function( self, user, sdata )
local _,_,saystring = string.find( sdata, "^%b<>%s+%p%S+%s+(.+)" )
if saystring then
if self.ShowCmd == 1 then
Core.SendToAll( sdata..self:convert( saystring, self.DefaultFont ) )
else
Core.SendToAll( "<"..user.sNick.."> "..self:convert( saystring, self.DefaultFont ) )
end
else
Core.SendToUser(user,"<"..self.Botname.."> "..sdata..": error: no string given, syntax: "..self.Prefix..self.SayCmd.." Your Text" )
end
end


-- say + option to change formating
ATalk.Cmd[ATalk.SayFormatCmd] = function( self, user, sdata )
local _,_,saystring = string.find( sdata, "^%b<>%s+%p%S+%s+(.+)" )
if saystring then
saystring = self:convertf( saystring )
if self.ShowCmd == 1 then
Core.SendToAll( sdata..saystring )
else
Core.SendToAll( "<"..user.sNick.."> "..saystring )
end
else
Core.SendToUser(user, "<"..self.Botname.."> "..sdata..": error: no string given, syntax: "..self.Prefix..self.SayFormatCmd.." {Your Text}" )
end
end

-- help, info
ATalk.Cmd[ATalk.HelpCmd] = function( self, user, sdata )
Core.SendToUser(user,  "<"..self.Botname.."> \r\n\tASCII TALK "..self.Version.."\r\n"..
"\t--------------------------------------------\r\n"..
"\t"..self.Prefix..self.SayCmd.." Your Text   - Converts \"Your Text\" to Ascii (with default font)\r\n"..
"\t"..self.Prefix..self.SayFormatCmd.." {Your Text}   - Converts everything in {} to Ascii (with default font)\r\n"..
"\t"..self.Prefix..self.SayFormatCmd.." {\\<font> Your Text}   - Converts everything in {} to Ascii (with given font)\r\n"..
"\t"..self.Prefix..self.SayFormatCmd.." {\\<font>\\<size> Your Text}   - Converts everything in {} to Ascii (with given font and size)\r\n"..
"\t"..self.Prefix..self.HelpCmd.."   - Shows you this text\r\n"..
"\t--------------------------------------------\r\n"..
"\tTabstops can be done by \"\\t\"\r\n"..
"\tLinebreaks can be done by \"\\n\"\r\n"..
"\t--------------------------------------------\r\n"..
"\t- Available Fonts:"..self:getFonts().."\r\n" )
end

-- GET FONTS
function ATalk:getFonts()
local s = ""
for i,v in pairs( self.Fonts ) do
if i == self.DefaultFont then
s = s.."\r\n\tFont: "..i.." (default), Size: "
else
s = s.."\r\n\tFont: "..i..", Size: "
end
for i2,_ in pairs ( v ) do
s = s..i2..", "
end
end
return s
end

-- COVERT TO ASCII FORMATMODE
function ATalk:convertf( s )
s = string.gsub( s, "%b{}", function( x )
x = string.sub( x, 2, -2 )
local font, size, x2 = "", "",""
_,_,font,size,x2 = string.find( x, "^\\(%S+)\\(%S+)%s(.+)" )
if font then
x = x2
else
_,_,font, x2 = string.find( x, "^\\(%S+)%s(.+)" )
if font and self.Fonts[font] then
x = x2
size = self.Fonts[font].Defaultsize
else
font = self.DefaultFont
size = nil
end
end
return self:convert( x, font, size )
end )
s = string.gsub( s, "\\t", "\t" )
s = string.gsub( s, "\\n", "\n" )
return s
end

-- CONVERT TO ASCII
function ATalk:convert( s, font, size )
-- replace tab-stops
s = string.gsub( s, "\\t", "\t" )
-- replace linebreaks
s = string.gsub( s, "\\n", "\n" )
local font = font or self.DefaultFont
if self.Fonts[font] then
local size = size or self.Defaultsize[font]
if self.Fonts[font][size] then
local maxlen = self.Fonts[font][size].Maxlen
if string.len( s ) ~= 0 then
-- automatic linebreak
local x1 = ""
while string.len( s ) > maxlen do
-- check for linebreaks in s
local lbreak = string.find( string.sub( s, 1, maxlen+1), "(\n)[^\n]+$" ) or string.find( string.sub( s, 1, maxlen+1),

"\n" )
if lbreak then
x1 = x1.."\r\n"..self:toascii( string.sub( s, 1, lbreak-1), font, size )
s = string.sub( s, lbreak+1, -1 )
else
local start = string.find( string.sub( s, 1, maxlen), "(%s)%S+$" )
if start then
x1 = x1.."\r\n"..self:toascii( string.sub( s, 1, start-1), font, size )
s = string.sub( s, start+1, -1 )
else
x1 = x1.."\r\n"..self:toascii( string.sub( s, 1, maxlen), font, size )
s = string.sub( s, maxlen+1, -1 )
end
end
end
return x1.."\r\n"..self:toascii( s, font, size )
else
return "\r\n"
end
else
return "\r\nerror: no such size in font: "..font..", "..size
end
else
return "\r\nerror: no such font: "..font
end
end

-- STRING TO ASCII
function ATalk:toascii( s, font, size )
local tosub = {}
-- check for phrases, emotions etc.
s = string.gsub( s, "(%S+)", function( c )
if self.Fonts[font][size].Ascii[c] then
table.insert( tosub, self.Fonts[font][size].Ascii[c] )
return "|"  -- Replace with character that is never found in chat or in Ascii
else
return c
end
end)
-- create new table with size as entries
local tASCII = {}
for _ = 1, self.Fonts[font][size].VLines do
table.insert( tASCII, " " ) -- one space at the beginning for < in chat
end
for c in string.gmatch( s, "." ) do
if c == "|" then  -- Now replace speacialchar with saved ascii
local tchar = tosub[1] or self.Fonts[font][size].Default
table.remove( tosub, 1 )
tASCII = self:concat( tASCII, tchar )
elseif c == "\n" then  -- newline char
tASCII[1] = tASCII[1].."\r\n"
for i,v in ipairs( tASCII ) do
if i ~= 1 then
tASCII[1] = tASCII[1]..v.."\r\n"
tASCII[i] = " "
end
end
else
local tchar = self.Fonts[font][size].Ascii[c] or  self.Fonts[font][size].Default
tASCII = self:concat( tASCII, tchar )
end
end
return table.concat( tASCII, "\r\n" )
end

-- CONCAT 2 ASCIITABLES
function ATalk:concat( tascii1, tascii2 )
for i,v in ipairs( tascii1 ) do
tascii1[i] = v..tascii2[i]
end
return tascii1
end

-- LOAD FONT
function ATalk:loadFont( sfile )
local file = io.open( sfile, "r" )
local getAscii = 0
local tFont = { Font = "", Fontsize = "", Defaultsize = "", VLines = 0,  Maxlen = 0, Default = {}, Ascii = {} }
local tDo = { ["[Font]"] = function() tFont.Font = file:read( "*l" )  end,
["[Fontsize]"] = function() tFont.Fontsize = file:read( "*l" ) end,
["[Defaultsize]"] = function() tFont.Defaultsize = file:read( "*l" ) end,
["[VLines]"] = function()
tFont.VLines = tonumber( file:read( "*l" ) )
for _ = 1, tFont.VLines do
table.insert( tFont.Default, " " )

end
end,
["[Maxlen]"] = function() tFont.Maxlen = tonumber( file:read( "*l" ) ) end,
["[Ascii]"] = function() getAscii = 1 end,
}
for line in file:lines() do
if getAscii == 1 then
local _,_,copychar, tocopychar = string.find( line, "^%[(.+)%]%s=%s%[(.+)%]$" )
if copychar then
if tFont.Ascii[tocopychar] then
tFont.Ascii[copychar] =  tFont.Ascii[tocopychar]
end
else
local _,_,char = string.find( line, "^%[(.+)%]$" )
if char then
tFont.Ascii[char] = {}
for _ = 1, tFont.VLines do
local x = string.gsub(  file:read( "*l" ), "|", "?" )
table.insert( tFont.Ascii[char], x )
end
end
end
elseif tDo[line] then
tDo[line]()
end
end
file:close()
self.Fonts[tFont.Font] = {}
self.Defaultsize[tFont.Font] = tFont.Defaultsize
self.Fonts[tFont.Font][tFont.Fontsize] = tFont
end

-- LOAD SINGLE WORD FILE
function ATalk:loadSingleWord( sfile )
self.SingleWord = {}
local file = io.open( sfile, "r" )
local iline = 0
for line in file:lines() do
iline = iline + 1
local _,_,copychar, tocopychar = string.find( line, "^%[(%S+)%]%s=%s%[(%S+)%]$" )
if copychar then
if self.SingleWord[tocopychar] then
self.SingleWord[copychar] = self.SingleWord[tocopychar]
end
else
local _,_,char,vlines = string.find( line, "^%[(%S+)%]:(%d+)$" )
if char then
if not self.SingleWord[char] then
self.SingleWord[char] = {}
table.insert( self.SingleWordIndex, char )
end
local ascii = ""
for _ = 1, tonumber( vlines ) do
local curline =  file:read( "*l" )
if not curline then
error( "Line expected; File: "..sfile..", Line: "..iline )
end
iline = iline + 1
ascii = ascii.."\r\n"..string.gsub(  curline, "|", "?" )
end
table.insert( self.SingleWord[char], ascii )
end
end
end
file:close()
table.sort( self.SingleWordIndex )
end
--[[--

[name]  kicks   
      o?    o   [arg] in the but,...
    ,/I_, /\\,
       |,  |,|,

[name]  kicked   
     o   ,  ?o   [arg] in the head,...
    ,/\/   /\\,
        |, ,|,|

[name]  kicks  the  humiliated
      o?        [arg] in the booty,...
    ,/I_, __o?
       |,  |,|, \\,


[name]  kicks  the 
      o?        [arg] in the face ,...
    ,/I_,?o__
       |,  ,//,|,|


[name]  slaps
     o_,?o /         
    /\  / |        [arg]   
/ |,    ,/ \             



[name]  slaps 
     o_>{{}{*>   
    /\     /\   [arg]   on the head
  /'|,    ,/ \              with a big wet fish !!





  o       
/|\     
/ \     
o   
/|\   
/ \ 

\ o /
   |   
  / \ 

_ o     
  /\     
| \     
                           
  ___\o                               
/)       |                 

o/__     
    |    (\     


  __|     
       \o 
        ( \


  \ /
    |   
  /o\

             
         |__
    o/   
   / |   

--]]--


Regards
miago
Title: Re: Help with Ascii-Talk
Post by: atonal on 23 April, 2008, 19:18:39
is true   i habe the same problem    well probaby Mutor can help for  Ascii-Talk
only master,OP Owner can see   Ascii-Talk ,  vips or Register user cant no see Ascii-Talk

if some bory can help to fix this , will apreciet  thanks
Title: Re: Help with Ascii-Talk
Post by: miago on 23 April, 2008, 21:05:42
Many thanks as usual.
Works fine now  =)

Regards
miago
Title: Re: Help with Ascii-Talk
Post by: atonal on 23 April, 2008, 23:58:50
thanks , now is workin well

good work , beutifull

atonal25
Title: Re: Help with Ascii-Talk
Post by: kalle370 on 10 June, 2008, 20:08:43
I get this error:
[19:57] Syntax C:\Hubs\PrivateFriend\scripts\ASCII.lua:361: attempt to index local 'file' (a nil value)
:(
some can help ?
i use the new 0.4.1.0

Thanks :D