| View previous topic :: View next topic |
| Author |
Message |
arfer Master

Joined: 26 Nov 2004 Posts: 436 Location: Manchester, UK
|
Posted: Tue Jan 13, 2009 5:07 pm Post subject: |
|
|
OK thanks for that, I see it now as per the following. Without -exact it doesn't work as expected due to glob style default where square brackets are present in the nick.
[21:03] <@arfer> % set testnick [subst -nocommands {a[rf]er}]
[21:03] <@Baal> a[rf]er
[21:03] <@arfer> % return [lsearch {me you a[rf]er} $testnick]
[21:03] <@Baal> -1
[21:04] <@arfer> % return [lsearch -exact {me you a[rf]er} $testnick]
[21:04] <@Baal> 2 |
|
| Back to top |
|
 |
ultralord Master

Joined: 06 Nov 2006 Posts: 255
|
Posted: Tue Jan 13, 2009 6:31 pm Post subject: |
|
|
ok.. sorry for any truble. if i make anyone.. i made that proc
| Code: | 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]
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
} |
but doesnt work.. i want to remove the g_serverholder nick from the list teamaserver or teambserver ( teamaserver has 5 nicks = nick1 nick2 nick3 nick4 nick5 ) and teambserver the same..
thanks but i have some problems with other things and i cant fix that  |
|
| Back to top |
|
 |
nml375 Revered One
Joined: 04 Aug 2006 Posts: 2857
|
Posted: Tue Jan 13, 2009 6:35 pm Post subject: |
|
|
Most likely, you are nesting your if-constructs in an improper way..
Indenting your code would probably make this easier to spot..
I'm going to have a deeper look at the code, and get back later. _________________ NML_375, idling at #eggdrop@IrcNET |
|
| Back to top |
|
 |
nml375 Revered One
Joined: 04 Aug 2006 Posts: 2857
|
Posted: Tue Jan 13, 2009 6:48 pm Post subject: |
|
|
You are indeed nesting your if-constructs, pretty much preventing any actions unless g_serverholder is equal to nick1. At that case, making the rest of the code useless.
Also, that huge block of code could really be condensed to something much smaller, making use of the fact that we're using variables..
| Code: | ...
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]
}
... |
Basically, if we get a positive hit in the first lsearch, do the replacement in g_teamaserver. If we don't, move on and test g_teambserver in the same manner... _________________ NML_375, idling at #eggdrop@IrcNET |
|
| Back to top |
|
 |
speechles Revered One

Joined: 26 Aug 2006 Posts: 1398 Location: emerald triangle, california (coastal redwoods)
|
Posted: Tue Jan 13, 2009 6:56 pm Post subject: |
|
|
| ultralord wrote: | | Code: | if { $g_serverholder == $nick10 } {
set idx [lsearch -exact $g_teambserver $nick10]
if {$idx != -1} {
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. | Code: | # 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] } |
This accomplishes the same thing with far less code expended.
@nml375, haw, we almost said the exact same thing simultaneously but you forgot to split. You forgot about his funky foreach that does nothing except span the value into 5 variables. | Code: | foreach {nick1 nick2 nick3 nick4 nick5} [split $g_teamaserver ] {}
foreach {nick6 nick7 nick8 nick9 nick10} [split $g_teambserver ] {} |
So I assume the greater part of the problem is the confusion of lists vs strings. _________________ speechles' eggdrop tcl archive
Last edited by speechles on Tue Jan 13, 2009 7:07 pm; edited 1 time in total |
|
| Back to top |
|
 |
nml375 Revered One
Joined: 04 Aug 2006 Posts: 2857
|
Posted: Tue Jan 13, 2009 7:03 pm Post subject: |
|
|
speechles, you do realize that the next time you iterate your code, you'll be splitting a list, not a string (assuming it has not been converted back into a string somewhere else) ?
Or simply, since we're lreplacing all over, I figured it'd be a list all of the time... _________________ NML_375, idling at #eggdrop@IrcNET |
|
| Back to top |
|
 |
speechles Revered One

Joined: 26 Aug 2006 Posts: 1398 Location: emerald triangle, california (coastal redwoods)
|
Posted: Tue Jan 13, 2009 7:08 pm Post subject: |
|
|
| Code: | | foreach {nick6 nick7 nick8 nick9 nick10} [split $g_teambserver ] {} |
Seeing this illustrates the author is converting a string $g_teambserver into a list to be iterated through the foreach. Meaning the author expects $g_teambserver to be a string, yet wants the ease of use provided by list commands. This is why I think the problem hasn't been solved yet.
Also, why would my code iterate? It's meant be replace his entire code, the foreach, everything. Only thing I left out were two [joins] at the bottom to return the two lists to strings. Mostly because I'm confused at this point.. laff _________________ speechles' eggdrop tcl archive |
|
| Back to top |
|
 |
nml375 Revered One
Joined: 04 Aug 2006 Posts: 2857
|
Posted: Tue Jan 13, 2009 7:17 pm Post subject: |
|
|
I believe this is straying away from the topic and turning into a mere academic question.
Needless to say, earlier posts by ultralord do suggest he is treating it as a list, adding elements with linsert.
And by iterate, I'm referring to the next time the command is executed...
@speechles:
Oh btw, my code is coherent, whereas yours isn't *nag*  _________________ NML_375, idling at #eggdrop@IrcNET |
|
| Back to top |
|
 |
speechles Revered One

Joined: 26 Aug 2006 Posts: 1398 Location: emerald triangle, california (coastal redwoods)
|
Posted: Tue Jan 13, 2009 7:20 pm Post subject: |
|
|
| nml375 wrote: | @speechles:
Oh btw, my code is coherent, whereas yours isn't *nag*  |
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.  _________________ speechles' eggdrop tcl archive |
|
| Back to top |
|
 |
ultralord Master

Joined: 06 Nov 2006 Posts: 255
|
Posted: Tue Jan 13, 2009 8:46 pm Post subject: |
|
|
thnkx again for all answers.. i try these ways to do my work.. 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 but the only thing what i want is to set 4 nicks of 5 (nick1 nick2 nick3 nick4 nick5) on g_teamaserver or g_teambserver if g_serverholder is one of these nicks(1...5)
thanks for all your opinion i unterestand now how it works lsearch .. but how i can do that ?
i have many confusions heh i havent so much time to do all the things but i try :/ |
|
| Back to top |
|
 |
speechles Revered One

Joined: 26 Aug 2006 Posts: 1398 Location: emerald triangle, california (coastal redwoods)
|
Posted: Tue Jan 13, 2009 9:17 pm Post subject: |
|
|
| 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 |
This is because it lacks the join necessary. | Code: | 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] |
Possibly? If there is still an issue, remove both pairs of set lines containing [splits] and [joins] (or simply use nml375's code) and try again. One of these ways has to work.. *crosses fingers*
note: the only way it wouldn't would be case insensitive detection. So if your using [string tolower] anywhere you might need to do it to the list and target before attempting the lsearch (it lacks -nocase option for some reason). _________________ speechles' eggdrop tcl archive |
|
| Back to top |
|
 |
ultralord Master

Joined: 06 Nov 2006 Posts: 255
|
Posted: Wed Jan 14, 2009 3:06 am Post subject: |
|
|
thnx again.. so.. i try again with 2 codes to fix my issue but nothing.. look one proc ( with that proc i add nicks on teamaserver teambserver)
| Code: | 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]"
}
}
}
}
}
|
and i have that error when i add
| Code: |
Tcl error [g_addme]: syntax error in expression "[set idx [lsearch -exact $g_teamaserver $g_serverholder]] =>...": extra tokens at end of expression |
thnx again.. |
|
| Back to top |
|
 |
speechles Revered One

Joined: 26 Aug 2006 Posts: 1398 Location: emerald triangle, california (coastal redwoods)
|
Posted: Wed Jan 14, 2009 7:25 am Post subject: |
|
|
| ultralord wrote: |
and i have that error when i add
| Code: |
Tcl error [g_addme]: syntax error in expression "[set idx [lsearch -exact $g_teamaserver $g_serverholder]] =>...": extra tokens at end of expression |
thnx again.. |
| Quote: | < > <= >=
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. |
Change the: => to look like this: >= _________________ speechles' eggdrop tcl archive |
|
| Back to top |
|
 |
ultralord Master

Joined: 06 Nov 2006 Posts: 255
|
Posted: Wed Jan 14, 2009 9:15 am Post subject: |
|
|
thnx. i change that you said and nothing.. also i modified my previus proc to :
| Code: | 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]"
}
}
} |
but nothing wotking ok.. but my nick is on g_teamaserver or g_teambservers doesnt removed.. :/ |
|
| Back to top |
|
 |
nml375 Revered One
Joined: 04 Aug 2006 Posts: 2857
|
Posted: Wed Jan 14, 2009 11:00 am Post subject: |
|
|
To me, it looks like you are doing pretty much the same thing over and over in the code, making it unnecessary complex with deep conditional-constructs.
In many cases, isolating dominant conditions helps making the code alot more manageable:
| Code: | 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
}
... |
Also, I'm not sure what purpose g_quality has, as I really can't see much difference between the codeblocks.. possibly other than one requires voice/op and the other doesn't?
Further, both of those blocks look.. rather messy, doing the very same lsearch'es over and over.
Also, in a few places, you've left out the puthelp/putserv command when trying to send a notice to the channel.
More, you have a test whether nick == g_serverholder, yet you try to remove both nick and g_serverholder from the lists - which should mean you are doing the same work over and over again. And to be honest, I can't see any differences in the code in the two blocks here either.
Now, I'm not trying to rant at your code or such, but I would suggest you try and "compact" and "group" your code. That is, try avoiding doing the very same tasks in 5 different places if you don't need to;
- The added voice/op-check when g_quality is set to 1 could simply be merged into a single conditional statement, rather than having two identical blocks doing the very same thing (apart for the added voice/op-check).
- Rather than doing one lsearch to see whether the item exists in the list, and then do a second one to store the index, save it to a variable first and then test it.
Doing these steps may not instantly fix your problems, but it would make it easier to find them as the code generally gets easier to read. _________________ NML_375, idling at #eggdrop@IrcNET |
|
| Back to top |
|
 |
|