-- HighCard by Madman tConfig = { ["Bot"] = { ["Name"] = "Карты", ["Descr"] = "[ИГРА] Наберите в приват !start ;_)" }, ["File"] = "HighCard.dat" } function Main() frmHub:RegBot(tConfig.Bot.Name, 1, tConfig.Bot.Descr, "") -- Create file local file = io.open(tConfig.File) if file then file:close() else local file = io.open(tConfig.File, "w+") file:write("Players = {\n}") file:close() end -- Load it LoadFromFile(tConfig.File) end function ToArrival(curUser, data) local data = string.sub(data, 1, -2) local s,e,To,From = string.find(data, "$To:%s+(%S+)%s+From:%s(%S+)") if To == tConfig.Bot.Name then local s,e,cmd = string.find(data, "%b<>%s+%p(%w+)") if cmd then local tCmds = { ["help"] = function(curUser, data) curUser:SendPM(tConfig.Bot.Name, "Это очень простая игра, в которой Вам предстоит сразиться с ботом.\r\n".. "Введите !start для начала игры. Затем выберете размер ваших ставок командой !bet <№>.\r\n".. "Затем используйте команду !hit, чтобы вытащить карту больше, чем у бота.\r\n".. "Если у вас Туз, то вы автоматически выигрываете.\r\n".. "Введите !stop, чтобы покинуть игру или !bank, чтобы проверить сколько у вас денег.") end, ["start"] = function(curUser, data, To, From) if Players[curUser.sName] == nil then Players[curUser.sName] = {} Players[curUser.sName]["Cash"] = {} Players[curUser.sName]["Playing"] = {} Players[curUser.sName]["Cash"] = 500 Players[curUser.sName]["Playing"] = 1 else Players[curUser.sName]["Playing"] = 1 end SaveToFile(tConfig.File, Players, "Players") curUser:SendPM(tConfig.Bot.Name, "\r\nИгра началась!\r\n".. "Банк выделяет вам " ..Players[curUser.sName]["Cash"].. " $ для начала игры.\r\n".. "Если вы играете впервые, то введите !help ") end, ["hit"] = function(curUser, data, To, From) if Players[curUser.sName]["Playing"] == 1 and Players[curUser.sName]["Bet"] then DealCard(curUser) elseif Players[curUser.sName]["Playing"] == 1 and Players[curUser.sName]["Bet"] == nil then curUser:SendPM(tConfig.Bot.Name, "Для начала вы должны определить размер ставки!") else curUser:SendPM(tConfig.Bot.Name, "Вы не играете! Введите !start для начала игры.") end end, ["bet"] = function(curUser, data, To, From) local s,e,Bet = string.find(data, "%b<>%s+%S+%s+(%d+)") if (Players[curUser.sName]["Playing"] == 1) then if Bet then Bet = tonumber(Bet) if Bet > Players[curUser.sName]["Cash"] then curUser:SendPM(tConfig.Bot.Name, "У вас нет столько денег!") return 1 end if Bet == 0 then curUser:SendPM(tConfig.Bot.Name, "Нельзя ничего не ставить!") return 1 end if Players[curUser.sName]["Bet"] == nil then Players[curUser.sName]["Bet"] = {} Players[curUser.sName]["Bet"] = Bet else Players[curUser.sName]["Bet"] = Bet end SaveToFile(tConfig.File, Players, "Players") curUser:SendPM(tConfig.Bot.Name, "Величина вашей ставки, равная (" ..Bet.. ") $, была сохранена.") else curUser:SendPM(tConfig.Bot.Name, "Введите: !bet <№>") end else curUser:SendPM(tConfig.Bot.Name, "Вы не играете сейчас.") end end, ["stop"] = function(curUser, data, To, From) if (Players[curUser.sName]["Playing"] == 1) then Players[curUser.sName]["Playing"] = 0 Players[curUser.sName]["Bet"] = nil SaveToFile(tConfig.File, Players, "Players") curUser:SendPM(tConfig.Bot.Name, "\r\nВы остановили игру.\r\n".. "Сумма ваших сбережений была отправлена в банк, размер ставок обнулился.\r\n".. "Вы сможете установить размер ставок как только возобновите игру!") else curUser:SendPM(tConfig.Bot.Name, "Вы не играете сейчас.") end end, ["bank"] = function(curUser, data, To, From) if Players[curUser.sName] then curUser:SendPM(tConfig.Bot.Name, "У вас " ..Players[curUser.sName]["Cash"].. " $ !!!") else curUser:SendPM(tConfig.Bot.Name, "У вас нет денег, т. к. вы еще ни разу не играли!") end end, } if tCmds[cmd] then return tCmds[cmd](curUser, data, To, From) end end end end function DealCard(curUser) Msg,PlayerMsg,BotMsg = "\r\n","","" -- Bot's Card Card() -- Get us some cards BotMsg = "Карта бота: " ..CardValue.. " " ..Color Bot = Value -- Get the card's value CardValue = tostring(CardValue) BotCard = CardValue.. " " ..Color -- Player's Card Card() PlayerMsg = "\r\nВаша карта: " ..CardValue.. " " ..Color Player = Value CardValue = tostring(CardValue) PlayerCard = CardValue.. " " ..Color -- New Bot Card if PlayerCard == BotCard then -- If they got the same color and number Card() -- Get new card 4 bot BotMsg = "Карта бота: " ..CardValue.. " " ..Color CardValue = tostring(CardValue) BotCard = CardValue.. " " ..Color Bot = Value end Msg = Msg..BotMsg..PlayerMsg Msg = Msg.."\r\n\r\n" if Player == 14 then -- If player got Ace, he wins Players[curUser.sName]["Cash"] = Players[curUser.sName]["Cash"] + Players[curUser.sName]["Bet"] Msg = Msg.."Вы выиграли!\r\nТеперь у вас " ..Players[curUser.sName]["Cash"].. " $ !" else -- If not if Player == Bot then -- It's a tie, no win/loose on cash Msg = Msg.."Ничья! Вы сохранили свои деньги, поэтому у вас все еще " ..Players[curUser.sName]["Cash"].. " $" elseif Player > Bot then -- If Player got higher card then Bot, he wins Players[curUser.sName]["Cash"] = Players[curUser.sName]["Cash"] + Players[curUser.sName]["Bet"] Msg = Msg.."Вы выиграли!\r\nТеперь у вас " ..Players[curUser.sName]["Cash"].. " $ !" elseif Player < Bot then -- If Bot got higher card then Player, Bot wins Players[curUser.sName]["Cash"] = Players[curUser.sName]["Cash"] - Players[curUser.sName]["Bet"] Msg = Msg.."Вы проиграли! :(\r\n" if Players[curUser.sName]["Cash"] <= 0 then -- If Cash - Bet = 0 or -X then player is delted from table Msg = Msg.."Вы остались без гроша! Ваш денежный лимит исчерпан... Попробуйте испытать удачу в следующий раз!.\r\nВаша карьера карточного игрока закончена!" Players[curUser.sName] = nil else Msg = Msg.."Бот забирает у вас сумму, равную вашей ставке. Теперь у вас " ..Players[curUser.sName]["Cash"].. " $" end end end SaveToFile(tConfig.File, Players, "Players") curUser:SendPM(tConfig.Bot.Name, Msg) end function Card() Color = CardColor[math.random(table.getn(CardColor))] Value = math.random(2,14) if Value == 11 then CardValue = "Валет" elseif Value == 12 then CardValue = "Дама" elseif Value == 13 then CardValue = "Король" elseif Value == 14 then CardValue = "Tуз" else CardValue = Value end end CardColor = { "пики", "черви", "бубей", "треф", } -- Serialize by nErBoS 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 SaveToFile(file , table , tablename) local handle = io.open(file,"w+") handle:write(Serialize(table, tablename)) handle:flush() handle:close() end function LoadFromFile(filename) local f = io.open(filename) if f then local r = f:read("*a") f:flush() f:close() local func,err = loadstring(r) if func then x,err = pcall(func) end end end