############################################################################# # Membership Administration by Krayy ############################################################################# # This addon performs various membership administration tasks and also handles # member permissions. ############################################################################# # Ver 1.0.1 - 05 March 2010 Initial release ############################################################################# CatchEvent OnLapperStart() # Membership status GlobalVar $MEMBERTYPE_UNKNOWN; $MEMBERTYPE_UNKNOWN = -1; # Player has not been here before GlobalVar $MEMBERTYPE_VISITOR; $MEMBERTYPE_VISITOR = 0; # Player is a visitor GlobalVar $MEMBERTYPE_GUEST; $MEMBERTYPE_GUEST = 1; # Player is a vouched for guest GlobalVar $MEMBERTYPE_AFFILIATE;$MEMBERTYPE_AFFILIATE = 2; # Player is Affiliate Member and subject to review GlobalVar $MEMBERTYPE_FULL; $MEMBERTYPE_FULL = 3; # Player is a full member GlobalVar $MEMBERTYPE_ADMIN; $MEMBERTYPE_ADMIN = 4; # Player is an admin GlobalVar $MEMBERTYPE_MAX; $MEMBERTYPE_MAX = 5; # Used as a upper limit for iterators ### Global vars for Membership names #### GlobalVar $MemberTypes; $MemberTypes[$MEMBERTYPE_VISITOR] = "Visitor"; $MemberTypes[$MEMBERTYPE_GUEST] = "Guest"; $MemberTypes[$MEMBERTYPE_AFFILIATE] = "Affiliate"; $MemberTypes[$MEMBERTYPE_FULL] = "Full"; $MemberTypes[$MEMBERTYPE_ADMIN] = "Admin"; $MemberTypes[$MEMBERTYPE_MAX] = "MAX"; EndCatchEvent CatchEvent OnMSO( $userName, $text ) # Player event $idxOfFirstSpace = indexOf( $text, " "); IF( $idxOfFirstSpace == -1 ) THEN $command = $text; $argv = ""; ELSE $command = subStr( $text,0,$idxOfFirstSpace ); $argv = trim( subStr( $text,$idxOfFirstSpace ) ); ENDIF SWITCH( $command ) CASE "!ma": CASE "!memberadmin": IF ( UserIsAdmin( $userName ) == 1 ) THEN DoMemberAdmin(); ELSE privMsg( langEngine( "%{main_notadmin}%" ) ); ENDIF BREAK; ENDSWITCH EndCatchEvent Sub LoginMember($userName) $NickName = GetPlayerVar($userName, "NickName"); privMsg ("^7Welcome back, ^8" . $NickName); globalMsg ($NickName . "^8 has logged in"); EndSub Sub LoginNonMember($userName) $NickName = GetPlayerVar($userName, "NickName"); IF ( GetUserStoredNum("MemberType") < $MEMBERTYPE_VISITOR ) THEN SetUserStoredValue("MemberType", $MEMBERTYPE_VISITOR); privMsg ("^7Welcome ^8" . $NickName); globalMsg ($NickName . "^8, a new ^6Visitor^8 has logged in"); ELSE privMsg ("^7Welcome back, ^8" . $NickName); globalMsg ($NickName . "^8, a returning ^6" . GetMemberType($userName) . "^8 has logged in"); ENDIF EndSub ############################################################################# # Membership Administration Dialog Box ############################################################################# Sub DoMemberAdmin() ### Set Dialog prefix and initial left/right and top/bottom coordinates ### $DialogPrefix = "DoMa_"; # Dialog prefix...used in Close Regex $DialogTitle = "^0Membership Admin"; # Dialog title $origT = 37; # Top edge of main content window $origL = 47; # Left edge of main content window $origR = 101; $Width = 108; # ...width of Dialog box $Height = 107; # ...height of Dialog box $ShowClose = true; # ...show a close button? $secondsDisplayed = -1; # ...display for how many seconds (-1 = permanent) DialogCreate ( GetCurrentPlayerVar("UserName"), $DialogPrefix, $origL-1, $origT-1, $Width, $Height, $DialogTitle, $ShowClose, $secondsDisplayed); # Set initial values for left/right and top/bottom coordinates ### $rowheight = 5; # Set the header row openPrivButton ($DialogPrefix . "nick1",$origL,$origT,32,$rowheight,1,-1,96,"^7Name"); openPrivButton ($DialogPrefix . "status1",$origL+32,$origT,20,$rowheight,1,-1,96,"^7MemberType"); openPrivButton ($DialogPrefix . "nick2",$origL+54,$origT,32,$rowheight,1,-1,96,"^7Name"); openPrivButton ($DialogPrefix . "status2",$origL+86,$origT,20,$rowheight,1,-1,96,"^7MemberType"); $mList = GetListOfPlayers(); # dumpVar ($mList); $mCount = arrayCount( $mList ); $i=0; $LR=0; WHILE ($i < $mCount) IF ($LR == 0) THEN $origT = $origT + $rowheight; $origX = $origL; $LR = 1; ELSE $origX = $origR; $LR = 0; ENDIF $uUCID = GetPlayerVar($mList[$i],"UCID"); $uType = GetMemberType($mList[$i]); $uNick = GetPlayerVar($mList[$i],"NickName"); $PrefixTmp = $DialogPrefix . $uUCID . "_" . $i . "_"; # DEBUG ("Prefix for " . $uNick . " is " . $PrefixTmp); IF ( UserIsAdmin( GetCurrentPlayerVar("UserName") ) == 1 ) THEN # openPrivButton ( $PrefixTmp . "uname",$origX,$origT,32,$rowheight,1,-1,ISB_LEFT+ISB_DARK,GetPlayerVar($mList[$i],"UserName")); openPrivButton ( $PrefixTmp . "nick",$origX,$origT,32,$rowheight,1,-1,ISB_LEFT+ISB_DARK,GetPlayerVar($mList[$i],"NickName")); openPrivButton ( $PrefixTmp . "status",$origX+32,$origT,17,$rowheight,1,-1,ISB_LEFT+ISB_DARK,"^3" . $uType); openPrivButton ( $PrefixTmp . "plus",$origX+49,$origT,3,3,2,-1,ISB_DARK,"^2+",MemberTypeIncrease); openPrivButton ( $PrefixTmp . "minus",$origX+49,$origT+3,3,2,2,-1,ISB_DARK,"^1-",MemberTypeDecrease); ELSE openPrivButton ( $PrefixTmp . "nick",$origX,$origT,32,$rowheight,1,-1,ISB_LEFT+ISB_DARK,GetPlayerVar($mList[$i],"NickName")); openPrivButton ( $PrefixTmp . "status",$origX+32,$origT,20,$rowheight,1,-1,ISB_LEFT+ISB_DARK,"^3" . $uType); ENDIF $i = $i + 1; ENDWHILE EndSub Sub MemberTypeIncrease ( $KeyFlags, $id ) $Ucid = ToNum(split( $id,"_",1 )); $idIdx = ToNum(split( $id,"_",2 )); $uName = GetPlayerVarByUcid($Ucid, "UserName"); $mType = GetUserStoredNum($uName,"MemberType"); # DEBUG ("Current member type for " . $uName . " is " . $mType); IF ( $mType < ($MEMBERTYPE_MAX - 1) ) THEN SetUserStoredValue($uName, "MemberType", $mType +1); ENDIF DoMemberAdmin(); EndSub Sub MemberTypeDecrease ( $KeyFlags, $id ) $Ucid = ToNum(split( $id,"_",1 )); $idIdx = ToNum(split( $id,"_",2 )); $uName = GetPlayerVarByUcid($Ucid, "UserName"); $mType = GetUserStoredNum($uName,"MemberType"); # DEBUG ("Current member type for " . $uName . " is " . $mType); IF ( $mType > $MEMBERTYPE_VISITOR ) THEN SetUserStoredValue($uName, "MemberType", $mType - 1); ENDIF DoMemberAdmin(); EndSub Sub GetMemberType($userName) $mType = GetUserStoredNum($userName,"MemberType"); IF ( $mType <= $MEMBERTYPE_UNKNOWN ) THEN $mType = $MEMBERTYPE_VISITOR; SetUserStoredValue("MemberType", $MEMBERTYPE_VISITOR); ENDIF IF ( $mType >= $MEMBERTYPE_MAX ) THEN $mType = $MEMBERTYPE_MAX - 1; SetUserStoredValue("MemberType", $mType); ENDIF $mName = $MemberTypes[$mType]; # DEBUG ("Member type is: " . $mType . "," . $mName); return($mName); EndSub Sub UserIsAdmin($userName) IF ( UserIsServerAdmin( $userName ) == 1 || GetPlayerVar($userName,"UCID") == 0 || UserInGroup( "superusers",$userName) == 1 || GetUserStoredNum("MemberType") == $MEMBERTYPE_ADMIN ) THEN return(ToNum(1)); ELSE return(ToNum(0)); ENDIF EndSub Lang "EN" sponsor_1 = "^7Welcome {0} ^7to this ^1LFSLapper ^7powered server.%nl%^2Type ^7!help ^2after leaving garage for supported commands."; sponsor_2 = "^7If you are not yet a member of LFSNZ, you will need to abide by our rules.%nl%Respect other players, no crashing, and obey race flags%nl%Please follow these rules or you may be banned%nl%To join LFSNZ, go to http://www.lfsnz.com and sign up."; sponsor_accept = "Accept"; sponsor_deny = "Deny"; EndLang