Code: Select all
proc g_findadmin { } {
global g_pickupchan nick1 nick2 nick3 players g_players nick4 g_plstats g_teambserver g_teamaserver nick5 nick6 g_serverholder nick7 nick8 nick9 nick10 g_lastinfoteama g_lastinfoteamb
foreach {nick1 nick2 nick3 nick4 nick5} [split $g_teamaserver ] {}
foreach {nick6 nick7 nick8 nick9 nick10} [split $g_teambserver ] {}
if { $g_serverholder == $nick1 } {
set idx [lsearch -exact $g_teamaserver $nick1]
if {$idx != -1} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
} else {
if { $g_serverholder == $nick2 } {
set idx [lsearch -exact $g_teamaserver $nick2]
if {$idx != -1} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
} else {
if { $g_serverholder == $nick3 } {
set idx [lsearch -exact $g_teamaserver $nick3]
if {$idx != -1} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
} else {
if { $g_serverholder == $nick4 } {
set idx [lsearch -exact $g_teamaserver $nick4]
if {$idx != -1} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
} else {
if { $g_serverholder == $nick5 } {
set idx [lsearch -exact $g_teamaserver $nick5]
if {$idx != -1} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
} else {
if { $g_serverholder == $nick6 } {
set idx [lsearch -exact $g_teambserver $nick6]
if {$idx != -1} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
} else {
if { $g_serverholder == $nick7 } {
set idx [lsearch -exact $g_teambserver $nick7]
if {$idx != -1} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
} else {
if { $g_serverholder == $nick8 } {
set idx [lsearch -exact $g_teambserver $nick8]
if {$idx != -1} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
} else {
if { $g_serverholder == $nick9 } {
set idx [lsearch -exact $g_teambserver $nick9]
if {$idx != -1} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
} else {
if { $g_serverholder == $nick10 } {
set idx [lsearch -exact $g_teambserver $nick10]
if {$idx != -1} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Code: Select all
...
if {[set idx [lsearch -exact $g_teamaserver $g_serverholder]] => 0} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
} elseif {[set idx [lsearch -exact $g_teambserver $g_serverholder]] =>0} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
}
...
Upon deconstructing this, one wonders why we test if $g_serverholder equals $nick10, just to lsearch for $nick10. You realize if $g_serverholder == nickANY, then we can just search using $g_serverholder. There doesn't need to be this elaborate nested if to accomplish it either. The foreach, converting into 5 elements, then compare using an elaborate if-then procedure, just to in the end lreplace the thing out. Boy, what a long road when the short one is so obvious. Let me point you towards a much cleaner, elegant and simpler solution.ultralord wrote:Code: Select all
if { $g_serverholder == $nick10 } { set idx [lsearch -exact $g_teambserver $nick10] if {$idx != -1} { set g_teambserver [lreplace $g_teambserver $idx $idx] }
Code: Select all
# split here once for simplicity, this creates a list
# remember when i asked if you were doing this
# on a string or list? we want a list.
set g_teamaserver [split $g_teamaserver]
set g_teambserver [split $g_teamaserver]
# search each list a and b and return the lindex
# position for each into founda and foundb
set founda [lsearch -exact $g_teamaserver $g_serverholder]]
set foundb [lsearch -exact $g_teambserver $g_serverholder]]
# if we have positive lsearches (found it!) let's remove it from
# the list on either of them.
If {$founda != -1} { set g_teamaserver [lreplace $g_teamaserver $founda $founda] }
If {$foundb != -1} { set g_teambserver [lreplace $g_teambserver $foundb $foundb] }
Code: Select all
foreach {nick1 nick2 nick3 nick4 nick5} [split $g_teamaserver ] {}
foreach {nick6 nick7 nick8 nick9 nick10} [split $g_teambserver ] {}
Code: Select all
foreach {nick6 nick7 nick8 nick9 nick10} [split $g_teambserver ] {}
Mine is simplified on purpose to show ultralord how to do this himself. I wasn't trying to show off or anything, just trying to be helpful was all. Not to stray off topic or anything, but yes, I do believe ultralord has some confusion regarding strings vs lists.nml375 wrote:@speechles:
Oh btw, my code is coherent, whereas yours isn't *nag*
This is because it lacks the join necessary.ultralord wrote:and i have one last problem the problem is when i split like speechles the g_teamaserver or g_teambserver the problem is from others of my procs because is "reading" all the nicks
Code: Select all
set g_teamaserver [split $g_teamaserver]
set g_teambserver [split $g_teambserver]
If {[set founda [lsearch -exact $g_teamaserver $g_serverholder]] != -1} {
set g_teamaserver [lreplace $g_teamaserver $founda $founda]
} elseif {[set foundb [lsearch -exact $g_teambserver $g_serverholder]] != -1} {
set g_teambserver [lreplace $g_teambserver $foundb $foundb]
}
set g_teamaserver [join $g_teamaserver]
set g_teambserver [join $g_teambserver]
Code: Select all
proc g_addme { nick uhost handle channel team } {
global g_teamaserver g_teambserver g_playernumber addid addteama addteamb g_serverholder g_lastinfoteama g_lastinfoteamb ids g_last g_last2 g_spamchannel g_spamchannel2 g_spamchannel3 g_spamchanneltest g_spamchannel4 g_spamchannel5 g_spamchannel6 g_spamchannel7 g_spamchannel8 g_spamchannel9 g_maxpl g_pickupchan g_active g_quality g_shutupchan g_playerleft
set channel [string tolower $channel]
if { $channel == $g_pickupchan } {
if { $g_shutupchan == 0 } {
if { $g_active == 1 } {
set team [string tolower $team]
set nick [g_charfilter $nick]
if { $team == "" } {
set numberteama [lsearch -exact $g_teamaserver $nick ]
set numberteamb [lsearch -exact $g_teambserver $nick ]
set ispresent [expr $numberteama + $numberteamb]
if { $ispresent == -2 } {
if { [llength $g_teambserver] < [llength $g_teamaserver] } {
set team b
} else {
set team a
}
} else {
putserv "NOTICE $nick :[g_txt addme1]"
return 0
}
}
if { $g_quality == 1 } {
if { ( [isvoice $nick $channel] ) || ( [isop $nick $channel] ) } {
if { ( [lsearch -exact $team a ] >-1 ) && ( [lsearch -exact $g_teamaserver $nick ] <0 ) && ( [llength $g_teamaserver] < [expr $g_maxpl/2] ) } {
set g_teamaserver [linsert $g_teamaserver end $nick ]
if {[lsearch -exact $g_teambserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teambserver $nick ]
set g_teambserver [lreplace $g_teambserver $playerindex $playerindex ]
if {[set idx [lsearch -exact $g_teamaserver $g_serverholder]] => 0} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} elseif { ( [lsearch -exact $team b] >-1 ) && ( [lsearch -exact $g_teambserver $nick ] <0 ) && ( [llength $g_teambserver] < [expr $g_maxpl/2] ) } {
set g_teambserver [linsert $g_teambserver end $nick ]
if {[lsearch -exact $g_teamaserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teamaserver $nick ]
set g_teamaserver [lreplace $g_teamaserver $playerindex $playerindex ]
if {[set idx [lsearch -exact $g_teambserver $g_serverholder]] => 0} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} else {
putserv "NOTICE $nick :[g_txt addme1]"
}
if { $g_playernumber == $g_maxpl } {
g_launchgame
set g_quality 0
} elseif { $g_playernumber > [expr $g_maxpl - $g_playerleft] } {
set g_playerneeded [expr $g_maxpl -$g_playernumber]
putserv "NOTICE $channel :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
NOTICE $g_spamchanneltest :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
}
} else {
putserv "NOTICE $nick :[g_txt addme2]"
}
} elseif { $g_quality == 0 } {
if { ( [lsearch -exact $team a ] >-1 ) && ( [lsearch -exact $g_teamaserver $nick ] <0 ) && ( [llength $g_teamaserver] < [expr $g_maxpl/2] ) } {
set g_teamaserver [linsert $g_teamaserver end $nick ]
if {[lsearch -exact $g_teambserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teambserver $nick ]
set g_teambserver [lreplace $g_teambserver $playerindex $playerindex ]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} elseif { ( [lsearch -exact $team b] >-1 ) && ( [lsearch -exact $g_teambserver $nick ] <0 ) && ( [llength $g_teambserver] < [expr $g_maxpl/2] ) } {
set g_teambserver [linsert $g_teambserver end $nick ]
if {[lsearch -exact $g_teamaserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teamaserver $nick ]
set g_teamaserver [lreplace $g_teamaserver $playerindex $playerindex ]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} else {
putserv "NOTICE $nick :[g_txt addme1]"
}
if { $g_playernumber == $g_maxpl } {
g_launchgame
} elseif { $g_playernumber > [expr $g_maxpl - $g_playerleft] } {
set g_playerneeded [expr $g_maxpl - $g_playernumber]
putserv "NOTICE $channel :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
putserv "NOTICE $g_spamchanneltest :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
}
}
} else {
putserv "NOTICE $nick :[g_txt addme3]"
}
} else {
putserv "NOTICE $nick :[g_txt addme4]"
}
}
}
}
}
Code: Select all
Tcl error [g_addme]: syntax error in expression "[set idx [lsearch -exact $g_teamaserver $g_serverholder]] =>...": extra tokens at end of expression
ultralord wrote: and i have that error when i addthnx again..Code: Select all
Tcl error [g_addme]: syntax error in expression "[set idx [lsearch -exact $g_teamaserver $g_serverholder]] =>...": extra tokens at end of expression
Change the: => to look like this: >=< > <= >=
Boolean less, greater, less than or equal, and greater than or equal. Each operator produces 1 if the condition is true, 0 otherwise. These operators may be applied to strings as well as numeric operands, in which case string comparison is used.
Code: Select all
proc g_addme { nick uhost handle channel team } {
global g_teamaserver g_teambserver g_playernumber g_findadmin g_serverholder addid addteama addteamb g_lastinfoteama g_lastinfoteamb ids g_last g_last2 g_spamchannel g_spamchannel2 g_spamchannel3 g_spamchanneltest g_spamchannel4 g_spamchannel5 g_spamchannel6 g_spamchannel7 g_spamchannel8 g_spamchannel9 g_maxpl g_pickupchan g_active g_quality g_shutupchan g_playerleft
set channel [string tolower $channel]
if { $channel == $g_pickupchan } {
if { $g_shutupchan == 0 } {
if { $g_active == 1 } {
if { $nick == $g_serverholder } {
set team [string tolower $team]
set nick [g_charfilter $nick]
if { $team == "" } {
set numberteama [lsearch -exact $g_teamaserver $nick ]
set numberteamb [lsearch -exact $g_teambserver $nick ]
set ispresent [expr $numberteama + $numberteamb]
if { $ispresent == -2 } {
if { [llength $g_teambserver] < [llength $g_teamaserver] } {
set team b
} else {
set team a
}
} else {
putserv "NOTICE $nick :[g_txt addme1]"
return 0
}
}
if { $g_quality == 1 } {
if { ( [isvoice $nick $channel] ) || ( [isop $nick $channel] ) } {
if { ( [lsearch -exact $team a ] >-1 ) && ( [lsearch -exact $g_teamaserver $nick ] <0 ) && ( [llength $g_teamaserver] < [expr $g_maxpl/2] ) } {
set g_teamaserver [linsert $g_teamaserver end $nick ]
if {[lsearch -exact $g_teambserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teambserver $nick ]
set g_teambserver [lreplace $g_teambserver $playerindex $playerindex ]
if {[set idx [lsearch -exact $g_teamaserver $g_serverholder]] >= 0} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
} elseif {[set idx [lsearch -exact $g_teambserver $g_serverholder]] >= 0} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
}
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} elseif { ( [lsearch -exact $team b] >-1 ) && ( [lsearch -exact $g_teambserver $nick ] <0 ) && ( [llength $g_teambserver] < [expr $g_maxpl/2] ) } {
set g_teambserver [linsert $g_teambserver end $nick ]
if {[lsearch -exact $g_teamaserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teamaserver $nick ]
set g_teamaserver [lreplace $g_teamaserver $playerindex $playerindex ]
if {[set idx [lsearch -exact $g_teamaserver $g_serverholder]] >= 0} {
set g_teamaserver [lreplace $g_teamaserver $idx $idx]
} elseif {[set idx [lsearch -exact $g_teambserver $g_serverholder]] >= 0} {
set g_teambserver [lreplace $g_teambserver $idx $idx]
}
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} else {
putserv "NOTICE $nick :[g_txt addme1]"
}
if { $g_playernumber == $g_maxpl } {
g_launchgame
set g_quality 0
} elseif { $g_playernumber > [expr $g_maxpl - $g_playerleft] } {
set g_playerneeded [expr $g_maxpl -$g_playernumber]
putserv "NOTICE $channel :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
NOTICE $g_spamchanneltest :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
}
} else {
putserv "NOTICE $nick :[g_txt addme2]"
}
} elseif { $g_quality == 0 } {
if { ( [lsearch -exact $team a ] >-1 ) && ( [lsearch -exact $g_teamaserver $nick ] <0 ) && ( [llength $g_teamaserver] < [expr $g_maxpl/2] ) } {
set g_teamaserver [linsert $g_teamaserver end $nick ]
if {[lsearch -exact $g_teambserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teambserver $nick ]
set g_teambserver [lreplace $g_teambserver $playerindex $playerindex ]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} elseif { ( [lsearch -exact $team b] >-1 ) && ( [lsearch -exact $g_teambserver $nick ] <0 ) && ( [llength $g_teambserver] < [expr $g_maxpl/2] ) } {
set g_teambserver [linsert $g_teambserver end $nick ]
if {[lsearch -exact $g_teamaserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teamaserver $nick ]
set g_teamaserver [lreplace $g_teamaserver $playerindex $playerindex ]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} else {
putserv "NOTICE $nick :[g_txt addme1]"
}
if { $g_playernumber == $g_maxpl } {
g_launchgame
} elseif { $g_playernumber > [expr $g_maxpl - $g_playerleft] } {
set g_playerneeded [expr $g_maxpl - $g_playernumber]
putserv "NOTICE $channel :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
putserv "NOTICE $g_spamchanneltest :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
}
}
} else {
set team [string tolower $team]
set nick [g_charfilter $nick]
if { $team == "" } {
set numberteama [lsearch -exact $g_teamaserver $nick ]
set numberteamb [lsearch -exact $g_teambserver $nick ]
set ispresent [expr $numberteama + $numberteamb]
if { $ispresent == -2 } {
if { [llength $g_teambserver] < [llength $g_teamaserver] } {
set team b
} else {
set team a
}
} else {
putserv "NOTICE $nick :[g_txt addme1]"
return 0
}
}
if { $g_quality == 1 } {
if { ( [isvoice $nick $channel] ) || ( [isop $nick $channel] ) } {
if { ( [lsearch -exact $team a ] >-1 ) && ( [lsearch -exact $g_teamaserver $nick ] <0 ) && ( [llength $g_teamaserver] < [expr $g_maxpl/2] ) } {
set g_teamaserver [linsert $g_teamaserver end $nick ]
if {[lsearch -exact $g_teambserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teambserver $nick ]
set g_teambserver [lreplace $g_teambserver $playerindex $playerindex ]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} elseif { ( [lsearch -exact $team b] >-1 ) && ( [lsearch -exact $g_teambserver $nick ] <0 ) && ( [llength $g_teambserver] < [expr $g_maxpl/2] ) } {
set g_teambserver [linsert $g_teambserver end $nick ]
if {[lsearch -exact $g_teamaserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teamaserver $nick ]
set g_teamaserver [lreplace $g_teamaserver $playerindex $playerindex ]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} else {
putserv "NOTICE $nick :[g_txt addme1]"
}
if { $g_playernumber == $g_maxpl } {
g_launchgame
set g_quality 0
} elseif { $g_playernumber > [expr $g_maxpl - $g_playerleft] } {
set g_playerneeded [expr $g_maxpl -$g_playernumber]
putserv "NOTICE $channel :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
NOTICE $g_spamchanneltest :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
}
} else {
putserv "NOTICE $nick :[g_txt addme2]"
}
} elseif { $g_quality == 0 } {
if { ( [lsearch -exact $team a ] >-1 ) && ( [lsearch -exact $g_teamaserver $nick ] <0 ) && ( [llength $g_teamaserver] < [expr $g_maxpl/2] ) } {
set g_teamaserver [linsert $g_teamaserver end $nick ]
if {[lsearch -exact $g_teambserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teambserver $nick ]
set g_teambserver [lreplace $g_teambserver $playerindex $playerindex ]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} elseif { ( [lsearch -exact $team b] >-1 ) && ( [lsearch -exact $g_teambserver $nick ] <0 ) && ( [llength $g_teambserver] < [expr $g_maxpl/2] ) } {
set g_teambserver [linsert $g_teambserver end $nick ]
if {[lsearch -exact $g_teamaserver $nick ] >-1 } {
set playerindex [lsearch -exact $g_teamaserver $nick ]
set g_teamaserver [lreplace $g_teamaserver $playerindex $playerindex ]
}
set g_playernumber [expr [llength $g_teamaserver]+[llength $g_teambserver]]
g_settopic
} else {
putserv "NOTICE $nick :[g_txt addme1]"
}
if { $g_playernumber == $g_maxpl } {
g_launchgame
} elseif { $g_playernumber > [expr $g_maxpl - $g_playerleft] } {
set g_playerneeded [expr $g_maxpl - $g_playernumber]
putserv "NOTICE $channel :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
putserv "NOTICE $g_spamchanneltest :[g_txt start5] $channel !! [g_txt separator2] $g_playerneeded [g_txt start6]"
}
}
}
} else {
putserv "NOTICE $nick :[g_txt addme3]"
}
} else {
putserv "NOTICE $nick :[g_txt addme4]"
}
}
}
Code: Select all
if {$channel == $g_pickupchan} {
if {$g_shutupchan == 0} {
if {$g_active == 1} {
...
} else {
putserv "NOTICE $nick :[g_txt addme3]"
}
} else {
putserv "NOTICE $nick :[g_txt addme4]"
}
}
## considder using this instead:
if {$channel != $g_pickupchan} {
return 0
}
if {$g_shutupchan != 0} {
putserv "NOTICE $nick :[g_txt addme4]"
return 0
}
if {$g_active != 1} {
putserv "NOTICE $nick :[g_txt addme3]"
return 0
}
...