-- This script is converted with PtokaX LUA API Converter v0.9c at 01/19/11 14:37:21
--[[
Скрипт Awarder v0.01 для PtokaX 0.3.6.0
Автор Berkut
Автор оригинальной идеи железяка
Релиз от 03.04.2008
Совместимость с PtokaX 0.3.5.1 и ниже, 0.4.0.0 и выше не гарантирована
Предварительный релиз скрипта наград. Реализован механизм награждения, просмотра наград пользователя и списка наград на хабе.
Первой командой пользуется только админ, остальными все.
Команды снятия наград и просмотра информации о наградах реализую после обкатки базовых механизмов.
Имя бота меняем ниже. Больше ничего менять не рекомендую.
Список наград находится в файле Awards.txt. Внимание! Количество наград должно оставаться неизменным (если вы не можете самостоятельно откорректировать тело скрипта)
Список наград составлен от балды. В принципе вместо наград можно использовать титулы. Звания не рекомендую, т.к. как правило, при получении следующего звания предыдущие анулируются.
Все предложения и замечания об ошибках просьба отсылать в приват или на хабах РКС, или на форуме. Обязательно укажите версию хаба и клиента.
]]
bot = "Награды" --Имя бота
sFolder = "Awarder/" --Главная папка скрипта
sFolder.."Awards.txt"
sFolder.."AwardsDB.txt
dofile ("Awarder\\TechFunc.lua")
tControl = { --Профили, имеющие доступ к настройкам
[0] = 1, -- =[Master]=
[1] = 1, -- =[OP]=
[2] = 0, -- =[ViP]=
[3] = 0, -- =[Reg]=
[-1] = 0, -- =[UnReg]=
}
function OpConnected(user)
LineSpline(user)
Create(user)
if user.iProfile==0 then
for i,n in pairs(Awards) do
Core.SendToUser(user,"$UserCommand 1 2 .:•:Опции Администратора:•:.\\.:•:Служебное Меню:•:.\\Наградить пользователя\\"..n.."$<%[mynick]> !setaw %[nick] "..i.."||")
end
end
Core.SendToUser(user,"$UserCommand 1 2 .:•:Опции Пользователя:•:.\\.:•:Ваше Меню:•:.\\Награды\\Награды пользователя$<%[mynick]> !getusaw %[nick]||")
Core.SendToUser(user,"$UserCommand 1 2 .:•:Опции Пользователя:•:.\\.:•:Ваше Меню:•:.\\Награды\\Список награждённых$<%[mynick]> !getaw||")
end
function UserConnected(user)
LineSpline(user)
Create(user)
Core.SendToUser(user,"$UserCommand 1 2 .:•:Опции Пользователя:•:.\\.:•:Ваше Меню:•:.\\Награды\\Награды пользователя$<%[mynick]> !getusaw %[nick]||")
Core.SendToUser(user,"$UserCommand 1 2 .:•:Опции Пользователя:•:.\\.:•:Ваше Меню:•:.\\Награды\\Список награждённых$<%[mynick]> !getaw||")
end
function UserDisconnected(curUser)
Decreate(curUser)
end
OpDisconnected=UserDisconnected
function ChatArrival(user,data)
s,e,cmd1,nick1,aw=string.find(data,"^%b<>%s+(%S+)%s(%S+)%s(%S+)|")
s,e,cmd2,nick2=string.find(data,"^%b<>%s+(%S+)%s(%S+)|")
s,e,cmd3=string.find(data,"^%b<>%s+(%S+)|")
aw=tonumber(aw)
aUser=GetItemByName(nick1)
if cmd1=="!setaw" then
if user.iProfile==0 then
if ADB[aUser.sIP]==nil then
ADB[aUser.sIP]={}
ADB[aUser.sIP]["Nick"]=aUser.sNick
ADB[aUser.sIP]["Award"]={}
ADB[aUser.sIP]["Award"]={0,0,0,0,0,0,0,0,0,0}
WriteTable(ADB,"ADB","AwardsDB.txt")
end
if aUser.sNick~=ADB[aUser.sIP]["Nick"] then
Core.SendToUser(user,"<"..MainBot.."> Внимание! Под этим IP награду получал пользователь с ником "..ADB[aUser.sIP]["Nick"]..". Текущая награда будет записана за ним. На данный момент награждение двух разных пользователей под одним IP невозможно.")
end
if ADB[aUser.sIP]["Award"][aw]==1 then
Core.SendToUser(user,"<"..MainBot.."> У этого пользователя данная награда уже есть.")
else ADB[aUser.sIP]["Award"][aw]=1
Core.SendToUser(user,"<"..MainBot.."> Пользователь "..aUser.sNick.." получает в награду "..Awards[aw]..".")
WriteTable(ADB,"ADB","AwardsDB.txt")
end
end
return true
end
if cmd2=="!getusaw" then
if nick2==0 or nick2==nil then
Core.SendToUser(user,"<"..MainBot.."> Вы не указали ник")
else
aUser=GetItemByName(nick2)
if ADB[aUser.sIP]==nil then
Core.SendToUser(user,"<"..MainBot.."> Этот пользователь наград не имеет")
else
local hr = string.rep("_",60).."\r\n"
repuaw="\r\n"..hr.."\r\n\t -= Пользователь "..ADB[aUser.sIP]["Nick"].." имеет следующие награды: =-\r\n"..hr.."\r\n\t"
if aUser.sNick~=ADB[aUser.sIP]["Nick"] then
Core.SendToUser(user,"<"..MainBot.."> Внимание! Под этим IP в базе находится пользователь с ником "..ADB[aUser.sIP]["Nick"]..".")
end
cw=0
awl=""
for k,v in pairs(ADB[aUser.sIP]["Award"]) do
if v~=0 then
awl=awl..Awards[k]..". "
cw=cw+1
end
end
if cw~=0 then
repuaw=repuaw..awl.."\r\n"..hr.."\r\n"
Core.SendToUser(user,"<"..MainBot.."> "..repuaw)
else
Core.SendToUser(user,"<"..MainBot.."> Пользователь присутствует в базе данных, но наград не имеет.")
end
end
return true
end
end
if cmd3=="!getaw" then
local hr = string.rep("_",60).."\r\n"
repaw="\r\n"..hr.."\r\n\t -= Список награждённых =-\r\n"..hr.."\r\n"
awl=""
for a,b in pairs(ADB) do
for c,d in pairs(ADB[a]) do
awu=""
for e,f in pairs(ADB[a]["Award"]) do
if f~=0 then
awu=awu..Awards[e]..". "
end
end
awu="-<"..ADB[a]["Nick"]..">-\t"..awu
end
awl=awl..awu.."\r\n"
end
repaw=repaw..awl.."\r\n"..hr.."\r\n"
Core.SendToUser(user,"<"..MainBot.."> "..repaw)
return true
end
end
function ToArrival(curUser,data)
ConvTake(curUser,data)
collectgarbage(collect)
end
function Serialize(tTable,sTableName,hFile,sTab)
sTab = sTab or "";
hFile:write(sTab..sTableName.." = {\n");
for key,value in pairs(tTable) do
if (type(value)~="function") then
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);
hFile:write(sTab.."\t"..sKey.." = "..sValue);
end
hFile:write(",\n");
end
end
hFile:write(sTab.."}");
end
function WriteTable(table,tablename,file)
local hFile = io.open(file,"w+") Serialize(table,tablename,hFile); hFile:close()
end
RegConnected = UserConnected
RegDisconnected = UserDisconnected