myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Награды, скрипт награждения юзеров для API2

Теги
Нет тегов для показа
Marc
сообщение 19.1.2011, 15:10
Сообщение #1


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 7 раз




Уважаемый Nickolya!
По просьбе своих пользователей Хаба нашёл поиском здесь в корзине скрипт наград для API1, в котором Вы принимали участие (сообщение 7): корзина
Я конвертером: (PtokaX LUA API Converter v0.9c) перевёл скрипт в API2

открыть
-- 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. Внимание! Количество наград должно оставаться неизменным (если вы не можете самостоятельно откорректировать тело скрипта)
Список наград составлен от балды. В принципе вместо наград можно использовать титулы. Звания не рекомендую, т.к. как правило, при получении следующего звания предыдущие анулируются.

Все предложения и замечания об ошибках просьба отсылать в приват или на хабах РКС, или на форуме. Обязательно укажите версию хаба и клиента.
]]

MainBot="Награды"
dofile ("AwardsDB.txt")
dofile ("Awards.txt")
dofile ("Awarder\\TechFunc.lua")

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 = UserConnectedRegDisconnected = UserDisconnected


в результате, скрипт запускаться даже не стал, из-за ошибки: Awarder_newapi.lua:157: unexpected symbol near '='
Просил бы Вас помочь с запуском скрипта в API2 0.4.1.2

Также неплохо бы добавить (изменить) количество наград туда на 18 и меню (добавить) для списка профилей...
Go to the top of the page
+Quote Post
Артём
сообщение 19.1.2011, 16:24
Сообщение #2


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




Marc, ну так открой скрипт и посмотри что
Код
RegConnected = UserConnectedRegDisconnected = UserDisconnected

слились, сделай
Код
RegConnected = UserConnected
RegDisconnected = UserDisconnected
Go to the top of the page
+Quote Post
Marc
сообщение 19.1.2011, 18:24
Сообщение #3


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 7 раз




Артём!

Спасибо! Это я поправил и попробовал туда сам профили добавить!
Вот, что получилось:
открыть
-- 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


Но теперь другую ошибку стало выдавать: Awarder_newapi.lua:22: '=' expected near '..'

И ещё! Где надо ввести количество наград, мне надо число 18 и непонятная строка для меня: "dofile ("Awarder\\TechFunc.lua")"
Пробую вот сам конвертировать, добавлять и исправлять, не всегда получается, вот и спрашиваю)
Go to the top of the page
+Quote Post
Артём
сообщение 19.1.2011, 18:31
Сообщение #4


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




Marc, скрипт прикрепляй, а не код под спойлером.
Цитата
И ещё! Где надо ввести количество наград, мне надо число 18 и непонятная строка для меня: "dofile ("Awarder\\TechFunc.lua")"

а теперь зайди в тему которая в корзине и глянь на скрипт из первого поста, там ещё и папка есть с тремя файлами, один из которых (lua) с закрытым кодом. bad_smile.gif а его тоже надо (скорей всего) конвертировать под апи2
Go to the top of the page
+Quote Post
Marc
сообщение 19.1.2011, 18:53
Сообщение #5


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 7 раз




Артём!

тот файл: TechFunc.lua бинарный, скрытый... Его конвертер у меня не видит(
Go to the top of the page
+Quote Post
Артём
сообщение 19.1.2011, 18:54
Сообщение #6


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




Marc, декомпилируй его и конвертируй bad_smile.gif
Go to the top of the page
+Quote Post
Marc
сообщение 19.1.2011, 19:10
Сообщение #7


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 7 раз




Артём!

Легко тебе говорить, когда ты знаешь, как сделать...
Я, правда, тут на форуме уже где-то читал про декомпиляцию, пробовал найти щас, не получилось.
Ты мне ссылку не подскажешь, как это сделать, правда боюсь, что у меня не получится, но попробовать постараюсь.
Go to the top of the page
+Quote Post
Артём
сообщение 19.1.2011, 19:12
Сообщение #8


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




Цитата(Marc @ 19.1.2011, 18:10) *
Легко тебе говорить, когда ты знаешь, как сделать...

если бы знал, сделал и выложил, но я не знаю. big_smile.gif
Go to the top of the page
+Quote Post
Marc
сообщение 19.1.2011, 19:30
Сообщение #9


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 7 раз




Артём!

понятно.
А список профилей я правильно в скрипт добавил?

Остаётся подождать того, кто знает все тонкости и сможет помочь!
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 28.4.2024, 11:03