$v1 is the first parameter of the last if-condition that was matched/true. $v2 would be the second parameter, given there is one.
Example:
Code:
//if (3 isnum 1-5) echo -a $v1 is a number in the range of $v2 

Another example:
Code:
if (%a <= %b) && (%b > %a) { echo -s %a }
is the same as:
Code:
if (%a <= %b) && ($v2 > $v1) { echo -s $v2 }

In this piece of code:
Code:
while ($read(expletives.txt,n,%n)) {
    if ($v1 isin $1-) {
This loop keeps looping as long as $read(expletives.txt,n,%n) returns something (OK, as pointed out by some previous posts, something that is neither 0 nor $false smile )
The "$v1" in "if ($v1 isin $1-)" is the value returned by $read = the line that was read.
Using $v1 in the kick reason works as well, because the value of the first parameter of "if ($v1 isin $1-)" is the very same:
" kick $chan $nick You said something that contains $v1 "


But in this piece of code:
Code:
while ($read(expletives.txt,n,%n)) {
    if ($findtok($1-,$v1,32)) {
      kick $chan $nick Your message contained the badword $gettok($1-,$v1,32)
The $v1 in "if ($findtok($1-,$v1,32))" is the value of the first (and only) parameter of the while - the text returned by $read.
However in the kick command, $v1 refers to the value of the first (and only) parameter of the condition "if ($findtok($1-,$v1,32))", which is not the line read but the position of the token in the text message $1-.

...wish I could explain this in a more intelligible way smirk