hi peeps
Re-posted here for Easy Finding.
This Game is Also one of the games included in my All-In-One bot Xsthetic Netserver
Both the CFG and the LUA file
Jumble.cfg
-- JumbleFever
-- Author: RabidWombat
-- Converted to LUA 5 by ??????Hawk??????
-- 03/03/2005
-- This is the config file to set values.
-- Do so at your own risk.
sBotName = "JumbleFever";
sTranslator = "Your name here";
-- NOTE: this file is a lua file. JumbleFever calls dofile on it. So
-- you can do anything in here that you would want to occur in the
-- PtokaX Main event.
sJumbleWordsFile = "Jumble\\English.txt";
sJumbleScoresFile = "JumbleScores.txt";
sHintChar = "?"
iDisplayScores = 10; -- displays top 10 scores
-- iDisplayScores = nil; -- displays all scores
-- In seconds
iPauseTime = 10;
iHintTime = 60;
iGameEndTime = 120;
iBonusTimeLimit = 10;
-- FORMULA SYSTEM --
-- Scores and Hint are now formula strings that have variables:
-- iLength = length of phrase (minus spaces)
-- iBonusTime = bonus time remaining
-- additional math functions such as min, max, floor, etc can be used
-- If you're not a scripter, don't change this.
-- Cause I don't want to help 20 people with nil problems :-P
sScoreFormula = "6"; -- score equals 6
-- sScoreFormula = "$iLength"; -- score equals length of phrase
-- sScoreFormula = "2 * $iLength + 3" -- score equals length of phrase times 2 plus 3
-- sScoreFormula = "min($iLength - 5, 0) * 2 + 6"; -- score equals 6 plus 2 for every letter beyond 5
sBonusFormula = "$iBonusTime"; -- bonus score equals bonus time
sHintFormula = "math.floor(.4 * $iLength + .5)";
-- Command table.
-- Format: ["cmdname"] = { FunctionName, OperatorOnly, "Description"}
tCommands = {
[string.lower("a.start")] = { StartJumbleGame, 0, "Start the jumble game. Can be used with language selction (a.start language)"},
[string.lower("a.stop")] = { StopJumbleGame, 0, "Stop the jumble game."},
[string.lower("a.phrase")] = { DisplayJumblePhrase, 0, "Display the current jumble phrase."},
[string.lower("a.help")] = { DisplayJumbleHelp, 0, "Display this message."},
[string.lower("a.scores")] = { DisplayJumbleScores, 0, "Display current scores."},
[string.lower("a.myscore")] = { DisplayMyJumbleScore, 0, "Display your score."},
[string.lower("a.hint")] = { DisplayJumbleHint, 0, "Display the hint."},
[string.lower("a.join")] = { JoinJumble, 0, "Join the private jumble game."},
[string.lower("a.leave")] = { LeaveJumble, 0, "Leave the private jumble game."},
[string.lower("a.private")] = { SetPrivateJumbleGame, 1, "Set Jumble to be private."},
[string.lower("a.public")] = { SetPublicJumbleGame, 1, "Set Jumble to be public."},
}
-- This string table is dynamic. You define GLOBAL variables with $varname. To define "$"
-- user $$. All above values are considered globals. All others in this table have easy
-- names so I hope everyone understands without an explaination. Try to use common sense
-- when selecting global variables in a string. If you don't think it will be set at the
-- time the string is displayed, it probably isn't :-P
tStringTable = {
[1] = "\r\n$sBotName designed by: $sAuthor Email: $sEmail\r\n"..
"Play word jumble with your hub mates! Any text in the main chat is \r\n"..
"considered a guess for the jumble phrase. Here are the commands:\r\n",
[2] = "$sCmd\t- $sDesc\r\n",
[3] = "10 seconds left!!!",
[4] = "$sUserName recieves $iScore points and $iBonus time bonus. Rank $iRank/$iRankTotal (Score: $iUserScore)",
[5] = "$sUserName recieves $iScore points. Rank $iRank/$iRankTotal (Score: $iUserScore)",
[6] = "$sUserName has started a new $sBotName game!!!",
[7] = "Type \"$sJumbleHelp\" for help.",
[8] = "$sUserName has stopped the $sBotName game. :-(",
[9] = "The Jumble Phrase is: $sJumblePhrase", -- fix
[10] = "Rank: $iRank/$iRankTotal Score: $iUserScore",
[11] = "You don\'t have a score! Loser. :-)",
[12] = "$sUserName has joined the jumble game.",
[13] = "Hello $sUserName",
[14] = "$sUserName has left the jumble game.",
[15] = "The Jumble Phrase was: $sActualPhrase",
[16] = "Top $iDisplayScores $sBotName Players\r\n\r\n",
[17] = "All $sBotName Players\r\n\r\n",
[18] = "No Scores",
[19] = "$iPos) Name: $sUserName - Score: $iUserScore\r\n",
[20] = "Here\'s a hint: $sHint",
[21] = "The $sBotName has stopped automatically. :-("
};
Jumble.lua_5.0.lua
sAuthor = "RabidWombat";
sEmail = "cbarber@dwc.edu";
sConversion = " Converted to LUA 5 by ??????Hawk?????? 03/03/2005"
bGameRunning, bGamePaused = nil, nil;
sJumblePhrase, sActualPhrases, NoSpacePhrase = nil,nil,nil;
iLength, iBonusTime = 0, 0;
sScoreOutput, sHintOutput, sHelpOutput, sOpHelpOutput = nil, nil, nil, "";
iTimeCount, iGameNoReplyCount = 0, 0;
tScores, tScoresByName = { n = 0 }, {};
tChannelUsers, iChannelCount = {}, nil;
-- PtokaX Events --
function Main()
dofile("jumble.cfg");
sScoreFormula = "return "..sScoreFormula;
sBonusFormula = "return "..sBonusFormula;
sHintFormula = "return "..sHintFormula;
frmHub:RegBot(sBotName);
sHelpOutput = StrReplace(tStringTable[1]);
for cmd,tTemp in tCommands do
if(tTemp[1] == DisplayJumbleHelp) then
sJumbleHelp = cmd;
end
sCmd, sDesc = cmd, tTemp[3];
if(tTemp[2] == 0) then
sHelpOutput = sHelpOutput..StrReplace(tStringTable[2]);
else
sOpHelpOutput = sOpHelpOutput..StrReplace(tStringTable[2]);
end
end
OldSendToAll = SendToAll;
UserDisconnected = LeaveJumble;
OpDisconnected = LeaveJumble;
SetTimer(1000);
ReadScoresFromFile();
SetScores();
end
function OnTimer()
if(bGamePaused) then
iTimeCount = iTimeCount + 1;
if(iTimeCount >= iPauseTime) then
StartJumblePhrase();
end
elseif(bGameRunning) then
iTimeCount = iTimeCount + 1;
if(iTimeCount == iHintTime) then
SendToAll(sBotName, sHintOutput);
elseif (iTimeCount == iGameEndTime - 10) then
SendToAll(sBotName, StrReplace(tStringTable[3]));
elseif (iTimeCount == iGameEndTime) then
StopJumblePhrase();
if(iGameNoReplyCount >= 3) then
StopJumbleGame();
end
else
end
else
end
end
function ChatArrival(curUser, sData)
local s, e, sNewData, chat, cmd, args = string.find(sData, "(%b<>%s+((%S+)%s*([^%|]*)))%|$");
local s, e, sTo = string.find(sData, "^%$To: (%S+)");
if(cmd == nil or (sTo and sTo ~= sBotName)) then return 0; end
sUserName = curUser.sName;
if(sTo) then
curUser.SendData = curUser.SendPM;
end
cmd = string.lower(cmd);
if(tCommands[cmd] and (tCommands[cmd][2] == 0 or curUser.bOperator)) then
curUser:SendData(sData);
tCommands[cmd][1](curUser, args);
return 1;
else
if (not(iChannelCount) and string.sub(sData,1,1) == "<") then
iGameNoReplyCount = 0;
end
if(iChannelCount and string.find(sData, "$To: "..sBotName, 1, 1) == 1 and cmd == "!me") then
sNewData = "* "..sUserName..string.sub(chat, 4);
end
if(bGameRunning and bGamePaused == nil and string.find(string.upper(chat), sActualPhrase, 1, 1)) then
SendToAll(sNewData);
iBonusTime = math.max(iBonusTimeLimit - iTimeCount, 0);
iScore = assert(loadstring(StrReplace(sScoreFormula)))();
iBonus = assert(loadstring(StrReplace(sBonusFormula)))();
if(tScoresByName[sUserName]) then
tScoresByName[sUserName][2] = tScoresByName[sUserName][2] + iScore + iBonus;
else
tScoresByName[sUserName] = {sUserName, iScore + iBonus};
table.insert(tScores, tScoresByName[sUserName]);
end
iRank = SetScores(sUserName);
iRankTotal = table.getn(tScores);
iUserScore = tScoresByName[sUserName][2];
WriteScoresToFile();
StopJumblePhrase();
if(iBonusTime ~= 0) then
SendToAll(sBotName, StrReplace(tStringTable[4]));
else
SendToAll(sBotName, StrReplace(tStringTable[5]));
end
iGameNoReplyCount = 0;
return 1;
else
if(iChannelCount and string.find(sData, "^$To: "..sBotName, 1, 1) == 1) then
if(tChannelUsers[sUserName] == nil) then
JoinJumble(curUser);
else
SendToAll(sNewData);
iGameNoReplyCount = 0;
end
return 1;
end
end
end
end
-- Command Functions --
function StartJumbleGame(curUser, args)
if(bGameRunning) then return; end
if(args ~= "") then
HubGameActive = 2
local s, e, args = string.find(args, "([%w%s]+)$");
args = "Jumble\\"..args..".txt";
local f,e = io.open(args,"r")
if f then
sJumbleWordsFile = args;
f:close(f)
end
end
OldSendToAll(sBotName, StrReplace(tStringTable[6]));
StartJumblePhrase();
SendToAll(sBotName, StrReplace(tStringTable[7]));
iGameNoReplyCount = 0;
end
function StopJumbleGame(curUser)
if not(bGameRunning) then return; end
if not(bGamePaused) then
StopJumblePhrase();
end
if(curUser) then
OldSendToAll(sBotName, StrReplace(tStringTable[8]));
else
OldSendToAll(sBotName, StrReplace(tStringTable[21]));
-- TODO: fix numbers
end
bGameRunning, bGamePaused = nil, nil;
iBonusTime, iLength = 0, 0;
StopTimer();
end
function DisplayJumblePhrase(curUser)
if(bGameRunning and not bGamePaused) then
if(curUser == nil) then
SendToAll(sBotName, StrReplace(tStringTable[9]));
else
curUser:SendData(sBotName, StrReplace(tStringTable[9]));
end
end
end
function DisplayJumbleHelp(curUser)
if(curUser.bOperator) then
curUser:SendData(sBotName, sHelpOutput..sOpHelpOutput);
else
curUser:SendData(sBotName, sHelpOutput);
end
end
function DisplayJumbleScores(curUser)
curUser:SendData(sBotName, sScoresOutput);
end
function DisplayMyJumbleScore(curUser)
iRank = tScoresByName[curUser.sName][3];
iRankTotal = table.getn(tScores);
iUserScore = tScoresByName[sUserName][2];
if(tScoresByName[curUser.sName]) then
curUser:SendData(sBotName, StrReplace(tStringTable[10]));
else
curUser:SendData(sBotName, StrReplace(tStringTable[11]));
end
end
function DisplayJumbleHint(curUser)
if(iTimeCount >= iHintTime) then
curUser:SendData(sBotName, sHintOutput);
end
end
function JoinJumble(curUser)
if(iChannelCount and tChannelUsers[curUser.sName] == nil) then
SendToAll(sBotName, StrReplace(tStringTable[12]));
curUser:SendPM(sBotName, StrReplace(tStringTable[13]));
curUser.SendData = curUser.SendPM;
DisplayJumblePhrase(curUser);
DisplayJumbleHint(curUser);
tChannelUsers[curUser.sName] = 1;
iChannelCount = iChannelCount + 1;
end
end
function LeaveJumble(curUser)
if(iChannelCount and tChannelUsers[curUser.sName]) then
sUserName = curUser.sName;
SendToAll(sBotName, StrReplace(tStringTable[14]));
tChannelUsers[curUser.sName] = nil;
iChannelCount = iChannelCount - 1;
if(iChannelCount <= 0) then
iChannelCount = 0;
StopJumbleGame();
end
end
end
function SetPrivateJumbleGame(curUser)
if(iChannelCount == nil) then
SendToAll = SendToAllInChannel;
iChannelCount = 0;
end
end
function SetPublicJumbleGame(curUser)
if(iChannelCount) then
SendToAll = OldSendToAll;
tChannelUsers = {};
iChannelCount = nil;
end
end
-- Jumble Phrase Functions --
function JumbleString(str)
local tStr = { n = 0; };
local newString = "";
string.gsub(str, "(.)", function(c) table.insert(tStr, c); end);
math.randomseed(os.clock());
-- Fisher-Yates shuffle
for n = table.getn(tStr), 1, -1 do
local pos = math.random(n);
newString = tStr[pos].." "..newString;
tStr[pos] = tStr[n];
end
return newString;
end
function JumblePhrase(phr)
return string.sub(string.gsub(phr, "(%S+)", function (w) return JumbleString(w).." "; end), 1, -2);
end
function StartJumblePhrase()
local hFile,Er = io.open(sJumbleWordsFile, "r");
if(hFile == nil) then
SendToAll(sBotName, "Error opening "..sJumbleWordsFile);
return;
end
local _, phr = nil, nil;
local iFileSize = hFile:seek("end")
math.randomseed(os.clock());
while(phr == nil) do
hFile:seek("set", math.random(iFileSize)-1);
_, phr = hFile:read( "*l", "*l");
end
hFile:close();
sActualPhrase = string.upper(phr);
sNoSpacePhrase = string.gsub(sActualPhrase, "%s", "");
sJumblePhrase = JumblePhrase(sActualPhrase);
iLength = string.len(sNoSpacePhrase);
SetJumbleHint();
SendToAll(sBotName, StrReplace(tStringTable[9]));
iTimeCount = 0;
bGameRunning = 1;
bGamePaused = nil;
StopTimer(); StartTimer();
end
function StopJumblePhrase()
SendToAll(sBotName, StrReplace(tStringTable[15]));
sActualPhrase, sNoSpacePhrase, sJumblePhrase = nil, nil, nil;
iTimeCount = 0;
bGamePaused = 1;
iGameNoReplyCount = iGameNoReplyCount + 1;
end
-- String Functions --
function StrReplace(sString)
sString = string.gsub(sString, "%$(%w+)", function (w)
if(string.sub(w,1,1) == "$") then
return string.sub(w,2,-1);
else
return _G[w] or "nil";
end
end);
return sString;
end
-- Score Functions --
function SetScores(sName)
local iCount = table.getn(tScores);
iDisplayCount = iDisplayScores or iCount
if(iDisplayScores) then
sScoresOutput = StrReplace(tStringTable[16]);
else
sScoresOutput = StrReplace(tStringTable[17]);
end
if(iCount == 0) then
sScoresOutput = StrReplace(tStringTable[18]);
else
table.sort(tScores, function(a, b) return a[2] > b[2]; end);
for i = 1, iCount, 1 do
tScores[i][3] = i; -- set ranks for all users
end
for i = 1, math.min(iDisplayCount, iCount), 1 do
iPos = i;
sUserName = tScores[iPos][1];
iUserScore = tScores[iPos][2];
sScoresOutput = sScoresOutput..StrReplace(tStringTable[19]);
end
end
sUserName = sName;
if(sName) then
return tScoresByName[sName][3];
end
end
function ReadScoresFromFile()
dofile(sJumbleScoresFile);
for i = 1, table.getn(tScores), 1 do
tScoresByName[tScores[i][1]] = tScores[i];
end
end
function ToArrival(user, data)
ChatArrival(user, data)
end
function WriteScoresToFile()
local hFile,Er = io.open(sJumbleScoresFile, "w");
hFile:write("tScores = {\n");
for i = 1, table.getn(tScores), 1 do
hFile:write("["..i.."] = {"..string.format("%q", tScores[i][1])..","..tScores[i][2].."},\n");
end
hFile:write("n="..table.getn(tScores).."\n");
hFile:write("};");
hFile:close();
end
-- Hint Functions --
function SetJumbleHint()
local tRevealArray = { };
local iReveal = assert(loadstring(StrReplace(sHintFormula)))();
local iPos = nil;
while(iReveal > 0) do
repeat iPos = math.random(iLength); until tRevealArray[iPos] == nil
tRevealArray[iPos] = 1;
iReveal = iReveal - 1;
end
tRevealArray.iPos = 1;
sHint = string.gsub(sActualPhrase, "(%S)", function (c)
if (c == nil) then return ""; end
local out, tTemp = nil, tRevealArray;
if(tTemp[tTemp.iPos]) then
out = c;
else
out = sHintChar;
end
tTemp.iPos = tTemp.iPos + 1;
return out.." ";
end);
sHint = string.sub(sHint, 1, -2);
sHintOutput = StrReplace(tStringTable[20]);
end
-- Channel Functions --
function SendToAllInChannel(sSender, sRawOutput)
if(sSender) then
local _;
if(sRawOutput == nil) then
sRawOutput = sSender;
_, _, sSender = string.find(sRawOutput, "^%<(.-)%>");
else
sRawOutput = "<"..sSender.."> "..sRawOutput;
end
for nick, val in tChannelUsers do
if(nick ~= sSender) then
SendToNick(nick, "$To: "..nick.." From: "..sBotName.." $"..sRawOutput);
end
end
end
end
Have Fun Peeps
??????Hawk??????
what kind of game is it?
QuoteOriginally posted by Casanova82
what kind of game is it?
Anagram Game...
??????Hawk??????
How can i add the command reset scores to this script?
Looks like a good script, but how do you play it? ?( :D
I don't know what the commands are. lol
hope this helps,
tCommands = {
[string.lower("a.start")] = { StartJumbleGame, 0, "Start the jumble game. Can be used with language selction (a.start language)"},
[string.lower("a.stop")] = { StopJumbleGame, 0, "Stop the jumble game."},
[string.lower("a.phrase")] = { DisplayJumblePhrase, 0, "Display the current jumble phrase."},
[string.lower("a.help")] = { DisplayJumbleHelp, 0, "Display this message."},
[string.lower("a.scores")] = { DisplayJumbleScores, 0, "Display current scores."},
[string.lower("a.myscore")] = { DisplayMyJumbleScore, 0, "Display your score."},
[string.lower("a.hint")] = { DisplayJumbleHint, 0, "Display the hint."},
[string.lower("a.join")] = { JoinJumble, 0, "Join the private jumble game."},
[string.lower("a.leave")] = { LeaveJumble, 0, "Leave the private jumble game."},
[string.lower("a.private")] = { SetPrivateJumbleGame, 1, "Set Jumble to be private."},
[string.lower("a.public")] = { SetPublicJumbleGame, 1, "Set Jumble to be public."},
}
Hey hawk nice script
I want a Autostart for jumble in 30 minutes and autostop if 3 jumble phrases unanswered and also i dont want hint option...
Also..if u do a.myscore and if u have not scored anything
it doesnt display anything..it should at least display the message " you have not scored yet ".
can anyone modify the script for me ?
Use XN m8 :P :P
see the anagram game
can u add right click cmds for this game
@Hawk (or someone special ;) )
In [d@] config-file is written a line like this:
sJumbleWordsFile = "Jumble\\German.txt";
My question;
Can we script it so, that this line will be readed every
new start of the game and texted as info without
suffix above the following line:
[9] = "The Jumble Phrase is: $sJumblePhrase", -- fix
Example :
10 Seconds left!!!
The Jumble Phrase was: Blablabla
Theme: German
The Jumble-Phrase is: Blablabla
10 Seconds left!!!
The Jumble Phrase was: Blablabla
Theme: German
The Jumble-Phrase is: Blablabla
et cetera, et cetera, et cetera
If i stop the game and start a new one in english
(english.txt) it should read this one and shows it
like this:
10 Seconds left!!!
The Jumble Phrase was: Blablabla
Theme: English
The Jumble-Phrase is: Blablabla
10 Seconds left!!!
The Jumble Phrase was: Blablabla
Theme: English
The Jumble-Phrase is: Blablabla
et cetera, et cetera, et cetera
Is it the possi-billy-lili-ty? :P
(And if it is possible, may YOU can tell me where i must
paste wich line to make it workable like this...)
hi there ..
Try this add the red line to the .CGF file.
[COLOR=red]sJumbleTheme = "German";[/COLOR]
sJumbleWordsFile = "Jumble\\German.txt";
And Use this line in Place of the Other:-
[9] = "Theme: $sJumbleTheme\r\nThe Jumble Phrase is: $sJumblePhrase", -- fix
??????Hawk??????
WOW!
Works very fine now; THX a lot ! ;)
y/w ;)
Sorry, must reply:
It doesn?t change the THEME to "english" if i type in main- a.start english...
It only shows the given "German" in cfg.file.
My wish is, that it changes to "English" if i change the txt-file... :rolleyes:
(But it has time. Will be back @ wednesday... ;) )
HI m8 Try this
Replace this function in the Main Lua file
function StartJumbleGame(curUser, args)
if(bGameRunning) then return; end
if(args ~= "") then
HubGameActive = 2
local s, e, args = string.find(args, "([%w%s]+)$");
ssJumbleTheme = args;
args = "Jumble\\"..args..".txt";
local f,e = io.open(args,"r")
if f then
sJumbleTheme = ssJumbleTheme;
sJumbleWordsFile = args;
f:close(f)
end
end
OldSendToAll(sBotName, StrReplace(tStringTable[6]));
StartJumblePhrase();
SendToAll(sBotName, StrReplace(tStringTable[7]));
iGameNoReplyCount = 0;
end
??????Hawk??????
Hi, how can I make private mode as default for the game?
can someone do a function in this jumble.lua to enable reg bot on hub or not... :rolleyes:
QuoteOriginally posted by ?Tr??T_????
can someone do a function in this jumble.lua to enable reg bot on hub or not... :rolleyes:
Please Elaborate......
u right i tried and i did it...
is just to change:
frmHub:regBot(sBotName);
TO
frmHub:UnregBot(sBotName);
thnx for the help... ;)
PMSL ;(
Hi ppl.
I have this script in portuguese.
Ask for it at
LXONLINE@PORTUGALMAIL.PT
______________________
Lxonline.no-ip.info
Hi!
Hawk .. in a new version, can you add this function too ?
Playing Mode
1 = game is played in chat but questions only show for players, 2 = game is played in pm with players
like in the Trivia script by MadMan
-- Default startup mode of Trivia!
lngDefMode = 1 -- (0 = game is played in chat!, 1 = game is played in chat but questions only show for players, 2 = game is played in pm with players)
lngMode = 2
thx :)
doesnt this script work as it should on "PtokaX DC Hub 0.3.5.1" with 5.0.2 lua?
As i cant start it or cant even get rightclick commands from it......
Anyone got any solution?