

set GOSIChannel         "#Lombok"
set GOSIPointsName      "Points"
set GOSIPointsPerAnswer 10
set GOSIQuestionTime    60
set GOSIMarker          "*"
set GOSIAskedFile       "eggdrop/scripts/gosip.asked"
set GOSIQuestionFile    "eggdrop/scripts/gosip.db"
set GOSICFGFile         "eggdrop/scripts/gosip.cfg"
set GOSIRunning 0
set GOSIAllAnswered 0
set GOSIRoundOver 0
set GOSIQNumber 0
set GOSIQuestion ""
set GOSIQuestions(0) ""
set GOSIAsked ""
set GOSIQCount 0
set GOSIAnswerCount 0
set GOSIDisplayNum 0
set GOSINumAnswered 0
set GOSIForced 0
set GOSIForcedQuestion ""
set GOSIAutoStart 0
set GOSItimeanswer 1
set GOSIAdNumber 0
set GOSIAd(0) "$botnick"
set GOSIAd(1) "$botnick"
set GOSIAd(2) "$botnick"
set GOSIAdTimer ""
set GOSIQuestionTimer ""
set KDebug 0
set GOSIcongrats [list "Congratulations" "How Did You Get it" "Nice going" "Way to go" "You got it" "That's the way" "Good Guess" "Bravo"]
set GOSIVersion "GILA-LOE"
proc GOSI_Start {nick uhost hand chan args} {
global GOSIChannel GOSIRunning GOSIQCount GOSIQNumber GOSIQuestionFile GOSIAdNumber GOSIVersion KDebug CountAnswer CountNoAnswer
if {($chan != $GOSIChannel)||($GOSIRunning != 0)} {return}
set GOSIQCount 0
set GOSIAdNumber 0
GOSI_ReadCFG
if {![file exist $GOSIQuestionFile]} {
putcmdlog "\[GOSI\] Question File: $GOSIQuestionFile Unreadable Or Does Not Exist"
return 0
}
set GOSIQCount [GOSI_ReadQuestionFile]
if {$GOSIQCount < 2} {
putcmdlog "\[GOSI\] Not Enough Questions in Question File $GOSIQuestionFile"
return 0
}
set GOSIAskedFileLen [GOSI_ReadAskedFile]
if {$GOSIAskedFileLen >= $GOSIQCount} {
GOSI_ResetAsked
return 0
}
set GOSIRunning 1
bind pubm - "*" GOSICheckGuess
GOSIAskQuestion
return 1
}
proc GOSI_nostop {nick uhost hand chan args} {
global GOSIChannel GOSIRunning GOSIQuestionTimer GOSIAdTimer
if {($chan != $GOSIChannel)||($GOSIRunning != 1)} {return}
set GOSIRunning 0
catch {killutimer $GOSIQuestionTimer}
catch {killutimer $GOSIAdTimer}
catch {unbind pubm - "*" GOSICheckGuess}
gosimsg "\00306Game is nostopped by \00304\[\00312$nick!$uhost\00304\]"
return 1
}
proc GOSIPickQuestion {} {
global GOSIAsked GOSIQCount KDebug
set GOSIUnasked [expr ($GOSIQCount - [llength $GOSIAsked])]
if {$GOSIUnasked < 1} {
GOSI_ResetAsked
}
set pickdone 0
while {$pickdone == 0} {
set kidx 0
set foundinasked 0
set pick [rand $GOSIQCount]
while {[lindex $GOSIAsked $kidx] != ""} {
if {[lindex $GOSIAsked $kidx] == $pick} {
set foundinasked 1
break
}
incr kidx
}
if {$foundinasked == 0} {incr pickdone}
}
GOSI_AddAsked $pick
return $pick
}
proc GOSIParseQuestion {QNum} {
global GOSIMarker GOSIQuestions GOSIQuestion GOSIAnswers GOSIAnswerCount GOSIForcedQuestion KDebug
set KAnswersLeft ""
if {$QNum < 0} {
set GOSIFileQuestion $GOSIForcedQuestion
} {
set GOSIFileQuestion $GOSIQuestions($QNum)
}
if {$KDebug > 1} {gosilog "gosi" "Picked:$QNum Question:$GOSIFileQuestion"}
if [info exists GOSIAnswers] {unset GOSIAnswers}
# Position of first "*"
set GOSIMarkerIDX [string first $GOSIMarker $GOSIFileQuestion]
if {$GOSIMarkerIDX < 1} {
gosilog "GOSI" "Malformed Question #$QNum"
}
set GOSIQuestionEndIDX [expr $GOSIMarkerIDX - 1]
set GOSIQuestion [string range $GOSIFileQuestion 0 $GOSIQuestionEndIDX]
incr GOSIMarkerIDX
set KAnswersLeft [string range $GOSIFileQuestion $GOSIMarkerIDX end]
set KDoneParsing 0
set GOSIAnswerCount 0
while {$KDoneParsing != 1 } {
set KAnswerEnd [string first $GOSIMarker $KAnswersLeft]
if {$KAnswerEnd < 1} {
set KDoneParsing 1
set KAnswerEnd [string length $KAnswersLeft]
}
set KAnswer [string range $KAnswersLeft 0 [expr $KAnswerEnd -1]]
set GOSIAnswers($GOSIAnswerCount) "# $KAnswer"
set GOSIMarkerIDX [expr $KAnswerEnd +1]
set KAnswersLeft [string range $KAnswersLeft $GOSIMarkerIDX end]
incr GOSIAnswerCount
}
}
proc GOSIAskQuestion {} {
global GOSIRunning GOSIQNumber GOSIAllAnswered GOSIRoundOver GOSIQuestion GOSIQCount
global GOSIPointsPerAnswer GOSIPointsName GOSINumAnswered GOSIAnswerCount
global GOSIQuestionTimer GOSIQuestionTime GOSIDisplayNum GOSIForced GOSILastGuesser
global tipno tiplist TipsToUse InfoItem GOSItimestart GOSItimeanswer
if {$GOSIRunning != 1} {return}
if {$GOSIForced == 1} {
GOSIParseQuestion -1
set GOSIQNumber 0
set GOSIForced 0
set GOSIForcedQuestion ""
} {
set GOSIQNumber [GOSIPickQuestion]
GOSIParseQuestion $GOSIQNumber
}
set GOSIAllAnswered 0
set GOSILastGuesser ""
set GOSIDisplayNum 0
set GOSINumAnswered 0
set GOSIRoundOver 0
set GOSIPointsPerAnswer [rand 3]
if {$GOSIPointsPerAnswer < 1} {set GOSIPointsPerAnswer 3}
set GOSIPointsPerAnswer [expr $GOSIPointsPerAnswer *10]
set GOSIBonus [expr $GOSIPointsPerAnswer *5]
set GOSIPointTotal [expr $GOSIPointsPerAnswer *$GOSIAnswerCount]
if {$GOSItimeanswer==1} {
set GOSItimestart [clock clicks -milliseconds]
}
if {$GOSIAnswerCount == 1} {
gosimsg "\0030,2 :: Question No. $GOSIQNumber\/$GOSIQCount \00308\[\00311 ®Gosip/Fakta® \00308\] \0030maluku@DALnet :: \003"
gosimsg "\002\037\0032Question\002\037: $GOSIQuestion \003"
gosimsg "\0030,2 ::\00311 +$GOSIPointsPerAnswer\0030 $GOSIPointsName Bila Anda Menjawab Benar :: \037-= GudLuck =-\037 :: "
}
set KRemain [expr int([expr $GOSIQuestionTime /2])]
set GOSIQuestionTimer [utimer $KRemain "GOSIDisplayRemainingTime $KRemain"]
}
proc GOSICheckGuess {nick uhost hand chan args} {
global GOSIChannel GOSIRunning GOSIAnswerCount GOSIAnswers GOSIRoundOver GOSItimeanswer GOSIcongrats
global GOSIPointsName GOSIPointsPerAnswer GOSINumAnswered GOSIAllAnswered GOSILastGuesser KDebug
global lastwinner lastwinnercount botnick userlist quizconf rankfile GOSItimestart GOSItimetoanswer
variable bestscore 0 lastbestscore 0 lastbest ""
variable userarray
variable authorsolved 0 waitforrank 0 gameend 0
if {($chan != $GOSIChannel)||($GOSIRunning != 1)||($GOSIRoundOver == 1)} {return}
mx_getcreate_userentry $nick $nick
array set userarray $userlist($nick)
set lastbest [lindex [lsort -command mx_sortrank [array names userlist]] 0]
if {$lastbest == ""} {
set lastbestscore 0
} else {
array set aa $userlist($lastbest)
set lastbestscore $aa(score)
}
regsub -all \[{',.!}] $args "" args
if {[string length args] == 0} {return}
set GOSIGuessOld $args
set GOSIGuess [string tolower $GOSIGuessOld]
if {$KDebug > 1} {gosilog "GOSI" "Guess: $nick $GOSIGuess"}
foreach z [array names GOSIAnswers] {
set GOSITry [lrange $GOSIAnswers($z) 1 end]
set GOSITryOld $GOSITry
regsub -all \[{',.!}] $GOSITry "" GOSITry
set GOSITry [string tolower $GOSITry]
if {$KDebug > 1} {gosilog "GOSI" "Try: $GOSITry"}
if {$GOSITry == $GOSIGuess} {
if {[lindex $GOSIAnswers($z) 0] == "#"} {
set GOSIAnswers($z) "$nick $GOSIGuessOld"
set GOSItimetoanswer ""
if {$GOSItimeanswer==1} {
set GOSItimetoanswer [expr [expr [clock clicks -milliseconds]-$GOSItimestart]/1000.00]
}
incr userarray(score) $GOSIPointsPerAnswer
if {$userarray(score) == 1} {
set userarray(started) [unixtime]
}
set userlist($nick) [array get userarray]
gosimsg "\00306[lindex $GOSIcongrats [rand [llength $GOSIcongrats]]] : \00302Answer Was \00306$GOSITryOld \00302by \00306$nick \00302score:\00306 +$GOSIPointsPerAnswer \00302- less then \00306$GOSItimetoanswer \00302seconds - Total Score: \00306$userarray(score) \00302Points and Ranked: \00306[mx_get_rank_pos $nick]"
pushmode $GOSIChannel +v $nick
tmcquiz_rank_save {} {} {}
incr GOSINumAnswered
if {$GOSINumAnswered == $GOSIAnswerCount} {
set GOSIAllAnswered 1
set GOSIRoundOver 1
if {$GOSIAnswerCount == 1} {
set GOSILastGuesser ""
gosimsg ""
GOSI_ShowResults
}
GOSI_Recycle
}
return
}
}
}
}
proc GOSIDisplayRemainingTime {remaining} {
global GOSIRunning GOSIAllAnswered GOSINumAnswered GOSIAnswerCount GOSIQuestionTimer GOSIQuestionTime GOSIDisplayNum
global GOSIQuestion
if {($GOSIRunning != 1)||($GOSIAllAnswered == 1)} {return}
if {$GOSIAnswerCount == 1} {
gosimsg "\00306$remaining \00302secs remaining"
}
incr GOSIDisplayNum
set KRemain [expr int([expr $GOSIQuestionTime /4])]
if {$GOSIDisplayNum < 2} {
set GOSIQuestionTimer [utimer $KRemain "GOSIDisplayRemainingTime $KRemain"]
} {
set GOSIQuestionTimer [utimer $KRemain GOSITimesUp]
}
}
proc GOSITimesUp {} {
global GOSIAnswers GOSIAllAnswered GOSIRoundOver GOSINumAnswered GOSIAnswerCount GOSIQuestionTimer GOSIAdTimer
global TRANSChannel TRANSRunning TRANSQCount TRANSQNumber TRANSQuestionFile TRANSAdNumber TRANSVersion KDebug CountAnswer CountNoAnswer
if {$GOSIAllAnswered == 1} { return 1}
set GOSIRoundOver 1
set gosimissed "Time's Up! \003 "
append KMissed "\00302You Missed. Answer Was: "
set KAnswersRemaining [expr ($GOSIAnswerCount - $GOSINumAnswered)]
set kcount 0
foreach z [array names GOSIAnswers] {
if {[lindex $GOSIAnswers($z) 0] == "#"} {
append KMissed "\00306[lrange $GOSIAnswers($z) 1 end]"
incr kcount
if {$kcount < $KAnswersRemaining} {append KMissed " - "}
}
}
gosimsg "$KMissed"
GOSI_ShowResults
if {$GOSINumAnswered > 0} {
gosimsg ""
} {
gosimsg "\00302Sekarang ke soal Translate"
}
set TRANSQCount 0
set TRANSAdNumber 0
TRANS_ReadCFG
set TRANSQCount [TRANS_ReadQuestionFile]
set TRANSAskedFileLen [TRANS_ReadAskedFile]
set TRANSRunning 1
bind pubm - "*" TRANSCheckGuess
TRANSAskQuestion
}
proc GOSI_Recycle {} {
global TRANSChannel TRANSRunning TRANSQCount TRANSQNumber TRANSQuestionFile TRANSAdNumber TRANSVersion KDebug CountAnswer CountNoAnswer
global GOSIAnswers GOSINumAnswered GOSIQuestionTimer GOSIAdTimer
catch {killutimer $GOSIQuestionTimer}
if [info exists GOSIAnswers] {unset GOSIAnswers}
set GOSIQuestion ""
set GOSINumAnswered 0
set TRANSQCount 0
set TRANSAdNumber 0
TRANS_ReadCFG
set TRANSQCount [TRANS_ReadQuestionFile]
set TRANSAskedFileLen [TRANS_ReadAskedFile]
set TRANSRunning 1
bind pubm - "*" TRANSCheckGuess
TRANSAskQuestion
}
proc GOSI_ShowResults {} {
global GOSIAnswers GOSIPointsPerAnswer GOSIPointsName GOSIAllAnswered GOSILastGuesser
global botnick quizconf rankfile userlist lastwinner lastwinnercount
if {$GOSIAllAnswered == 1} {
set GOSIBonus [expr $GOSIPointsPerAnswer *5]
set nick $GOSILastGuesser
mx_getcreate_userentry $nick $nick
array set userarray $userlist($nick)
set lastbest [lindex [lsort -command mx_sortrank [array names userlist]] 0]
if {$lastbest == ""} {
set lastbestscore 0
} else {
array set aa $userlist($lastbest)
set lastbestscore $aa(score)
}
incr userarray(score) $GOSIBonus
if {$userarray(score) == 1} {
set userarray(started) [unixtime]
}
set userlist($nick) [array get userarray]
gosimsg ""
tmcquiz_rank_save {} {} {}
}
}
proc GOSI_TriviaResults {} {
global GOSIAnswers GOSIPointsPerAnswer GOSIPointsName GOSIAllAnswered GOSILastGuesser
}
proc GOSI_AddAsked {KQnum} {
global GOSIAsked GOSIAskedFile
set f [open $GOSIAskedFile a]
puts $f $KQnum
close $f
lappend GOSIAsked $KQnum
}
proc GOSI_ReadAskedFile {} {
global GOSIAsked GOSIAskedFile
set KAsked 0
set GOSIAsked ""
if {![file exists $GOSIAskedFile]} {
set f [open $GOSIAskedFile w]
} {
set f [open $GOSIAskedFile r]
while {[gets $f KQnum] != -1} {
lappend GOSIAsked "$KQnum"
incr KAsked
}
}
close $f
return $KAsked
}
proc GOSI_ResetAsked {} {
global GOSIAskedFile GOSIAsked
set f [open $GOSIAskedFile w]
puts $f "0"
close $f
set GOSIAsked ""
}
proc GOSI_ReadQuestionFile {} {
global GOSIQuestionFile GOSIQuestions
set KQuestions 0
set f [open $GOSIQuestionFile r]
while {[gets $f q] != -1} {
set GOSIQuestions($KQuestions) $q
incr KQuestions
}
close $f
return $KQuestions
}
proc GOSI_ShowAsked {nick uhost hand chan args} {
global GOSIQCount GOSIAsked GOSIQuestions
set GOSIStatsAsked [llength $GOSIAsked]
set GOSIStatsUnasked [expr ($GOSIQCount - $GOSIStatsAsked)]
gosimsg "Total: $GOSIQCount Asked: $GOSIStatsAsked Remaining: $GOSIStatsUnasked \003"
}
proc GOSI_ReadCFG {} {
global GOSICFGFile GOSIChannel GOSIAutoStart GOSIAskedFile GOSIQuestionFile GOSIPointsName GOSIAd
if {[file exist $GOSICFGFile]} {
set f [open $GOSICFGFile r]
while {[gets $f s] != -1} {
set kkey [string tolower [lindex [split $s "="] 0]]
set kval [lindex [split $s "="] 1]
switch $kkey {
points { set GOSIPointsName $kval }
channel { set GOSIChannel $kval }
autostart { set GOSIAutoStart $kval }
askedfile { set GOSIAskedFile $kval }
GOSIfile { set GOSIQuestionFile $kval }
ad1 { set GOSIAd(0) $kval }
ad2 { set GOSIAd(1) $kval }
ad3 { set GOSIAd(2) $kval }
}
}
close $f
if {($GOSIAutoStart < 0)||($GOSIAutoStart > 1)} {set GOSIAutoStart 1}
return
}
gosilog "GOSI" "Config file $GOSICFGFile not found... using defaults"
}
proc GOSI_WriteCFG {} {
global GOSICFGFile GOSIChannel GOSIAutoStart GOSIAskedFile GOSIQuestionFile GOSIPointsName GOSIAd
set f [open $GOSICFGFile w]
puts $f "# This file is automatically overwritten"
puts $f "Points=$GOSIPointsName"
puts $f "Channel=$GOSIChannel"
puts $f "AutoStart=$GOSIAutoStart"
puts $f "AskedFile=$GOSIAskedFile"
puts $f "GOSIFile=$GOSIQuestionFile"
puts $f "Ad1=$GOSIAd(0)"
puts $f "Ad2=$GOSIAd(1)"
puts $f "Ad3=$GOSIAd(2)"
close $f
}
proc gosimsg {what} {
global GOSIChannel
putquick "PRIVMSG $GOSIChannel :$what"
}
proc gosilog {who what} {
putcmdlog "\[$who\] $what"
}
proc dcc_GOSIrehash {hand idx arg} {
global GOSIQCount
putcmdlog "#$hand# Rehashing GOSI config"
GOSI_ReadCFG
set GOSIQCount [GOSI_ReadQuestionFile]
if {$GOSIQCount < 2} {
gosilog "GOSI" "Not Enough Questions in Question File $GOSIQuestionFile"
return 0
}
set GOSIAskedFileLen [GOSI_ReadAskedFile]
if {$GOSIAskedFileLen >= $GOSIQCount} {
gosilog "GOSI" "Asked file out of sync with question database: resetting"
GOSI_ResetAsked
return 0
}
gosilog "GOSI" "Questions:$GOSIQCount Asked:$GOSIAskedFileLen Remaining:[expr ($GOSIQCount - $GOSIAskedFileLen)]"
}
GOSI_ReadCFG

putlog "Gosip/Fakta maluku DALnet Succesfully LoaDeD..."


