2015-02-07 21:24:47 -08:00
// TribesNext Project
// http://www.tribesnext.com/
// Copyright 2012-2013
// Tribes 2 Community System
// Browser UI Coercion
// This script implements connectivity between the Dynamix browser UI shipped with Tribes 2 and the community
// systems developed for TribesNext. The comunication to the TribesNext system via network is implemented in
// the robot client data interface script for the browser. This script merely connects (modified) Dynamix UI
// elements to query/invoke methods on this new data interface, instead of the IRC server command used initially.
// Several functional changes were made as part of this process. First, all players are now keyed by GUID, and
// all clans are now keyed by ClanID (CID). Neither clan or player names are immutable, and it is foolish to
// treat them as such. Secondly, in the initial Dynamix system, clan names were set during creation and could
// not be changed without disbanding and recreating a clan; clan names can now be changed in the new system.
// Thirdly, disbanding a clan now requires at least 50% consensus among rank 4 administrators to proceed with
// the clan disband. Fourth, all history elements for both the player and clan pages now track all major
// profile modification events, and include live links to the affected/affector player/clan profiles. These
// live links automatically reflect changes to the name and active tag of those entities. Fifth, clans are
// never fully deleted. If all members of a clan leave, or a disband consensus is reached, the clan is set
// to "inactive" status. The name and tag become available again for use by others, and it will not appear
// in searches for the clan name, but the "tombstone" of the clan can still be accessed by clicking on one
// of the "live" links in the history of any player who was a member. The tombstone will include full history,
// including who was responsible for initiating the dissolution actions. This sort of auditing should make
// players slightly more accountable, and disincentivize sabotaging a clan (since it cannot be done anonymously
// as it could in the original system). Finally, to prevent a clan from becoming leaderless, and breaking the
// ability to administer it (e.g. all rank 4 administrators leave), the browser system guarantees that any
// active clan (e.g. with at least one player) has a rank 4 by promoting an existing member. One user will be
// promoted automatically in a leaderless clan situation, and this user is decided by a combination of rank
// with join date as tie-breaker at the top rank level.
// redownload a clan profile only if at least this amount of time has passed since the last download
$ TribesNext : : Community : : BrowserUI : : MinRefreshTime = 30000 ;
// modify a few user interface elements to match some of the data rearrangements
function tn_community_browserui_modifyUIElements ( )
{
// change the second button from "roster" to "history"
// the clan roster will now always be visible in the player list portion
// of the user interface -- invites are now displayed in the center
// pane to allow more room to manage the additional invite information/options
TL_Roster . setText ( "HISTORY" ) ;
TL_Roster . setExtent ( 67 , 27 ) ;
// nudge the options/invites/admin buttons 2 pixels to the right
// but defined relative to TL_Roster's position
// note: TL_News is labeled as "OPTIONS" in the UI -- blame Dynamix
% pos = VectorAdd ( TL_Roster . getPosition ( ) , "64 0" ) ;
TL_News . setPosition ( getWord ( % pos , 0 ) , getWord ( % pos , 1 ) ) ;
% pos = VectorAdd ( TL_News . getPosition ( ) , "66 0" ) ;
TL_Invites . setPosition ( getWord ( % pos , 0 ) , getWord ( % pos , 1 ) ) ;
% pos = VectorAdd ( TL_Invites . getPosition ( ) , "63 0" ) ;
TW_Admin . setPosition ( getWord ( % pos , 0 ) , getWord ( % pos , 1 ) ) ;
// set all of the buttons to the same group number
TW_Admin . groupNum = 4 ;
TL_Invites . groupNum = 4 ;
TL_Profile . groupNum = 4 ;
TL_Roster . groupNum = 4 ;
TL_News . groupNum = 4 ;
// in the tribe admin panel: edit the tag max length to 12 -- looks like Dynamix had this at 9
TP_NewTag . maxLength = 12 ;
TP_TribeTagBtn . text = "CHANGE TAG" ;
// add a field to allow supporting changes to the clan name
% nameField = new ShellTextEditCtrl ( ) ;
% nameField . maxLength = 40 ;
% nameField . setPosition ( 0 , 243 ) ;
% nameField . setExtent ( 335 , 64 ) ;
ProfileControl . add ( % nameField ) ;
TribePropertiesDlg . nameField = % nameField ;
// ... and a button to apply it
% renameBtn = new ShellBitmapButton ( ) ;
% renameBtn . text = "RENAME" ;
% renameBtn . extent = "70 38" ;
% renameBtn . position = "320 243" ;
% renameBtn . command = "TribePropertiesDlg.RenameTribe();" ;
ProfileControl . add ( % renameBtn ) ;
// in the member profile editor for clans
tb_onProbation . setText ( "RANK 0: Probationary Member " ) ;
tb_tribeMember . setText ( "RANK 1: Standard Member " ) ;
tb_tribeAdmin . setText ( "RANK 2: Invitation Issuer " ) ;
tb_tribeController . setText ( "RANK 3: Secondary Administrator" ) ;
tb_sysAdmin . setText ( "RANK 4: Primary Administrator " ) ;
}
tn_community_browserui_modifyUIElements ( ) ;
// =========================================================================
// User interface update hook to data interface.
// =========================================================================
function tn_community_browserui_clearCheckStatus ( )
{
if ( isEventPending ( $ TribesNext : : Community : : BrowserUI : : StatusSchedule ) )
cancel ( $ TribesNext : : Community : : BrowserUI : : StatusSchedule ) ;
if ( $ TribesNext : : Community : : Browser : : Active )
{
$ TribesNext : : Community : : BrowserUI : : StatusSchedule = schedule ( 32 , 0 , tn_community_browserui_clearCheckStatus ) ;
return ;
}
error ( "Browser UI update hook occured." ) ;
if ( TribeAndWarriorBrowserGui . searchActive )
{
TribeAndWarriorBrowserGui . searchActive = 0 ;
tn_community_browserui_displaySearchResults ( ) ;
}
if ( TribePane . updateActive )
{
TribePane . updateActive = 0 ;
tn_community_browserui_showTribePane ( ) ;
}
if ( PlayerPane . updateActive )
{
PlayerPane . updateActive = 0 ;
tn_community_browserui_showPlayerPane ( ) ;
}
// reset the cursor to non-wait mode
Canvas . setCursor ( defaultCursor ) ;
}
// =========================================================================
// "WARRIOR SEARCH" and "TRIBE SEARCH"
// =========================================================================
// replacing function in webbrowser.cs, 618
function SearchWarriors ( )
{
if ( BrowserSearchPane . query ! $ = "player" )
{
// clear out the fields...
$ BrowserSearchField = "" ;
BrowserSearchMatchList . clear ( ) ;
}
Canvas . pushDialog ( BrowserSearchDlg ) ;
BrowserSearchPane . setTitle ( "WARRIOR SEARCH" ) ;
BrowserSearchPane . query = "player" ;
Search_EditField . makeFirstResponder ( 1 ) ;
}
// replacing function in webbrowser.cs, 321
function SearchTribes ( )
{
if ( BrowserSearchPane . query ! $ = "clan" )
{
// clear out the fields...
$ BrowserSearchField = "" ;
BrowserSearchMatchList . clear ( ) ;
}
Canvas . pushDialog ( BrowserSearchDlg ) ;
Search_EditField . makeFirstResponder ( 1 ) ;
BrowserSearchPane . setTitle ( "TRIBE SEARCH" ) ;
BrowserSearchPane . query = "clan" ;
}
// replacing function in webbrowser.cs, 57
function BrowserStartSearch ( )
{
// server will reject blank searches, save a round trip by also checking here
% search = trim ( strreplace ( $ BrowserSearchField , "%" , "" ) ) ;
if ( % search $ = "" )
{
MessageBoxOK ( "NOTICE" , "Blank searches are not allowed; enter one or more characters of text and try again." , "Search_EditField.makeFirstResponder(1);" ) ;
}
else
{
// removed the Dynamix text validation code from here; relying on client side
// validation makes for fragile systems
BrowserSearchPane . key = LaunchGui . key + + ;
BrowserSearchMatchList . clear ( ) ;
canvas . SetCursor ( ArrowWaitCursor ) ;
if ( isEventPending ( TribeAndWarriorBrowserGui . eid ) )
cancel ( TribeAndWarriorBrowserGui . eid ) ;
if ( BrowserSearchPane . query $ = "player" )
{
BrowserSearchPane . state = "warriorSearch" ;
tn_community_browser_user_search ( $ BrowserSearchField ) ;
}
else
{
BrowserSearchPane . state = "tribeSearch" ;
tn_community_browser_clan_search ( $ BrowserSearchField ) ;
}
//TribeAndWarriorBrowserGui.eid = schedule(250,0,ExecuteSearch,0,BrowserSearchPane);
TribeAndWarriorBrowserGui . searchActive = 1 ;
tn_community_browserui_clearCheckStatus ( ) ;
}
}
// replacing function in webbrowser.cs, 16
function BrowserSearchDone ( )
{
Canvas . popDialog ( BrowserSearchDlg ) ;
% id = BrowserSearchMatchList . getSelectedId ( ) ;
if ( % id ! = - 1 )
{
% row = BrowserSearchMatchList . getRowTextById ( % id ) ;
echo ( % id SPC % row ) ;
if ( BrowserSearchPane . query $ = "clan" )
TWBTabView . view ( % id , % row , "Tribe" ) ;
else
TWBTabView . view ( % id , % row ) ;
}
}
function tn_community_browserui_displaySearchResults ( )
{
if ( BrowserSearchPane . query $ = "clan" )
{
% count = $ Browser : : CCount ;
if ( % count $ = "" ) // no results
return ;
for ( % i = 0 ; % i < = % count ; % i + + )
{
% clan = $ Browser : : CResults [ % i ] ;
% cid = getField ( % clan , 0 ) ;
% cname = getField ( % clan , 1 ) ;
BrowserSearchMatchList . addRow ( % cid , % cname ) ;
}
}
else
{
% count = $ Browser : : PCount ;
if ( % count $ = "" ) // no results
return ;
for ( % i = 0 ; % i < = % count ; % i + + )
{
% player = $ Browser : : PResults [ % i ] ;
% pname = getField ( % player , 0 ) ;
//%ptag = getField(%player, 1);
//%pappend = getField(%player, 2);
% pguid = getField ( % player , 3 ) ;
BrowserSearchMatchList . addRow ( % pguid , % pname ) ;
}
}
}
// =========================================================================
// Profile Viewing Utilities
// =========================================================================
// replacing function in webbrowser.cs, 683
function TribeAndWarriorBrowserGui : : onWake ( % this )
{
MemberList . ClearColumns ( ) ;
W_MemberList . ClearColumns ( ) ;
MemberList . Clear ( ) ;
W_MemberList . clear ( ) ;
Canvas . pushDialog ( LaunchToolbarDlg ) ;
2015-02-08 00:57:57 -05:00
// DarkDragonDX: Set the BUDDYLIST and TRIBES profile
W_BuddyList . setProfile ( ShellRedRadioProfile ) ;
W_Tribes . setProfile ( ShellRedRadioProfile ) ;
2015-02-07 21:24:47 -08:00
if ( TWBTabView . tabCount ( ) = = 0 )
{
% info = WONGetAuthInfo ( ) ;
// decode the enhanced certificate
% cert = $ T2CSRI : : CommunityCertificate ;
if ( getFieldCount ( % cert ) > = 5 )
% authInfo = getField ( % cert , 4 ) ;
% len = strlen ( % authInfo ) ;
if ( % len = = 0 )
return "" ;
for ( % i = 0 ; % i < % len ; % i + = 2 )
{
% byte = getSubStr ( % authInfo , % i , 2 ) ;
% char = collapseEscape ( "\\x" @ % byte ) ;
% raw = % raw @ % char ;
}
// Open the player's page:
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
// (get current name from the enhanced cert)
TWBTabView . view ( % myguid , getField ( % raw , 0 ) ) ;
w_profile . setValue ( 1 ) ;
// Add tabs for the player's tribal pages:
% rcount = getRecordCount ( % raw ) ;
for ( % i = 2 ; % i < % rcount ; % i + + )
{
% record = getRecord ( % raw , % i ) ;
% cid = getField ( % record , 3 ) ;
% name = getField ( % record , 0 ) ;
TWBTabView . view ( % cid , % name , "Tribe" ) ;
}
// select the player's profile after loading clan tabs
TWBTabView . setSelected ( % myguid ) ;
}
else if ( PlayerPane . visible )
PlayerPane . onWake ( ) ;
else
TribePane . onWake ( ) ;
}
// replacing function in webbrowser.cs, 995
function TWBTabView : : onSelect ( % this , % id , % text )
{
% tabSet = % this . getTabSet ( % id ) ;
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
MemberList . clear ( ) ;
W_MemberList . clear ( ) ;
TWBScroll . scrollToTop ( ) ;
TWBTitle . OldText = TWBTitle . name ;
TWBTitle . setValue ( % text ) ; // This will get overwritten...
TWBTitle . name = % text ;
TWBClosePaneBtn . setVisible ( true ) ;
switch ( % tabSet )
{
case 0 : // Warrior
if ( isObject ( TProfileHdr ) )
{
TProfileHdr . delete ( ) ;
new GuiControl ( TProfileHdr ) ;
}
PlayerPane . setvisible ( 1 ) ;
TribePane . setvisible ( 0 ) ;
if ( W_memberList . rowCount ( ) < = 0 )
PlayerPane . needRefresh = 1 ;
else
PlayerPane . needRefresh = 0 ;
TWBTabFrame . setAltColor ( false ) ;
% isMe = ( % id = = % myguid ) ;
TWBClosePaneBtn . setVisible ( ! % isMe ) ;
if ( TWBTitle . OldText ! $ = TWBTitle . name )
W_Profile . setValue ( 1 ) ;
PlayerPix . setBitmap ( $ playerGfx ) ;
W_Profile . setVisible ( 1 ) ;
W_History . setVisible ( 1 ) ;
W_Tribes . setVisible ( 1 ) ;
if ( % isMe )
{
W_BuddyList . setText ( "BUDDYLIST" ) ;
W_BuddyList . setVisible ( 1 ) ;
W_BuddyList . command = "PlayerPane.ButtonClick(3);" ;
W_BuddyList . groupNum = 5 ;
}
else
{
W_BuddyList . setText ( "OPTIONS" ) ;
W_BuddyList . setVisible ( 1 ) ;
W_BuddyList . command = "PlayerPane.ButtonClick(4);" ;
W_BuddyList . groupNum = 4 ;
}
W_Admin . setVisible ( % isMe ) ;
case 1 : // Tribe
PlayerPane . setvisible ( 0 ) ;
TribePane . setvisible ( 1 ) ;
if ( memberList . rowCount ( ) < = 0 )
TribePane . needRefresh = 1 ;
else
TribePane . needRefresh = 0 ;
TWBTabFrame . setAltColor ( true ) ;
if ( TWBTitle . OldText ! $ = TWBTitle . name )
TL_Profile . setValue ( 1 ) ;
//%this.display();
}
}
// replacing function in webbrowser.cs, 1063
function GuiMLTextCtrl : : onURL ( % this , % url )
{
% i = 0 ;
while ( ( % fld [ % i ] = getField ( % url , % i ) ) ! $ = "" )
% i + + ;
2015-02-08 00:57:57 -05:00
2015-02-07 21:24:47 -08:00
% tribe = % fld [ 1 ] ;
% warrior = % fld [ 2 ] ;
switch $ ( % fld [ 0 ] )
{
case "player" :
2015-02-08 00:57:57 -05:00
LinkBrowser ( % fld [ 2 ] , "Warrior" ) ;
2015-02-07 21:24:47 -08:00
case "clan" : // used to be "tribe" in the Dynamix system -- it is this in TribesNext
LaunchTabView . viewTab ( "BROWSER" , TribeAndWarriorBrowserGui , 0 ) ;
TWBTabView . view ( % fld [ 1 ] , "" , "Tribe" ) ;
case "wwwlink" :
LinkWeb ( % fld [ 1 ] ) ;
case "retract" : // TribesNext version
% clan = tn_community_browser_getClanProfile ( % fld [ 1 ] ) ;
% target = % fld [ 2 ] ;
% player = tn_community_browser_getPlayerProfile ( % target ) ;
% tname = % player . name ;
if ( % tname $ = "" )
% tname = % fld [ 3 ] ;
MessageBoxYesNo ( "RETRACT" , "Are you sure you wish to retract\n<spush><color:FFBB33>" @ % tname @ "<spop>'s invite to\n\"<spush><color:FFBB33>" @ % clan . name @ "<spop>\"?" ,
"tn_community_browser_clan_retractInvite(" @ expandEscape ( % fld [ 1 ] ) @ ", " @ expandEscape ( % target ) @ ");" , "" ) ;
case "acceptinvite" : // TribesNext version
% clan = tn_community_browser_getClanProfile ( % fld [ 1 ] ) ;
% cname = % clan . name ;
if ( % cname $ = "" )
% cname = % fld [ 2 ] ;
MessageBoxYesNo ( "INVITATION" , "Accept invitation to join\n\"<spush><color:FFBB33>" @ % cname @ "<spop>\"?" ,
"tn_community_browser_user_acceptInvite(" @ expandEscape ( % fld [ 1 ] ) @ ");" , "" ) ;
case "rejectinvite" : // TribesNext version
% clan = tn_community_browser_getClanProfile ( % fld [ 1 ] ) ;
% cname = % clan . name ;
if ( % cname $ = "" )
% cname = % fld [ 2 ] ;
MessageBoxYesNo ( "INVITATION" , "Are you sure you want to REJECT invitation to join\n\"<spush><color:FFBB33>" @ % cname @ "<spop>\"?" ,
"tn_community_browser_user_rejectInvite(" @ expandEscape ( % fld [ 1 ] ) @ ");" , "" ) ;
case "email" : // TribesNext version
LinkEMail ( getFields ( % url , 1 ) ) ;
case "invite" : // TribesNext version
% clan = tn_community_browser_getClanProfile ( % fld [ 1 ] ) ;
% target = % fld [ 2 ] ;
% player = tn_community_browser_getPlayerProfile ( % target ) ;
% tname = % player . name ;
if ( % tname $ = "" )
% tname = % fld [ 3 ] ;
MessageBoxYesNo ( "RETRACT" , "Are you sure you wish to invite\n<spush><color:FFBB33>" @ % tname @ "<spop> to join\n\"<spush><color:FFBB33>" @ % clan . name @ "<spop>\"?" ,
"tn_community_browser_clan_sendInvite(" @ expandEscape ( % fld [ 1 ] ) @ ", " @ expandEscape ( % target ) @ ");" , "" ) ;
case "addBuddy" : // TribesNext Version
MessageBoxYesNo ( "CONFIRM" , "Add \"" @ % fld [ 2 ] @ "\" to Buddy List?" ,
"tn_community_mail_request_addListEntry(\"buddy\", \"" @ expandEscape ( % fld [ 1 ] ) @ "\"); PlayerPane.updateActive = 1; schedule(300, 0, tn_community_browserui_clearCheckStatus);" , "" ) ;
case "delBuddy" : // TribesNext Version
MessageBoxYesNo ( "CONFIRM" , "Remove \"" @ % fld [ 2 ] @ "\" from Buddy List?" ,
"tn_community_mail_request_delListEntry(\"buddy\", \"" @ expandEscape ( % fld [ 1 ] ) @ "\"); PlayerPane.updateActive = 1; schedule(300, 0, tn_community_browserui_clearCheckStatus);" , "" ) ;
case "gamelink" : // Leave this alone -- the score HUD uses this for interactivity with game servers
commandToServer ( ' ProcessGameLink ' , % fld [ 1 ] , % fld [ 2 ] , % fld [ 3 ] , % fld [ 4 ] , % fld [ 5 ] ) ;
case "joinPublicChat" : // FUTURE Implement for TribesNext?
joinPublicTribeChannel ( getField ( % url , 1 ) ) ;
case "joinPrivateChat" : // FUTURE Implement for TribesNext?
joinPrivateTribeChannel ( getField ( % url , 1 ) ) ;
case "activeclan" : // TribesNext version
% clan = tn_community_browser_getClanProfile ( % fld [ 1 ] ) ;
MessageBoxYesNo ( "CONFIRM" , "Are you sure you wish to set \n\"<spush><color:FFBB33>" @ % clan . name @ "<spop>\"\n as your active clan?" ,
"tn_community_browser_user_activeClan(" @ expandEscape ( % fld [ 1 ] ) @ "); PlayerPane.updateActive = 1; tn_community_browserui_clearCheckStatus();" , "" ) ;
case "leaveclan" : // TribesNext version
% clan = tn_community_browser_getClanProfile ( % fld [ 1 ] ) ;
MessageBoxYesNo ( "CONFIRM" , "Are you sure you wish to leave \n\"<spush><color:FFBB33>" @ % clan . name @ "<spop>\"?" ,
"tn_community_browser_user_leaveClan(" @ expandEscape ( % fld [ 1 ] ) @ "); PlayerPane.updateActive = 1; tn_community_browserui_clearCheckStatus();" , "" ) ;
case "emailclan" : // TribesNext version
% clan = tn_community_browser_getClanProfile ( % fld [ 1 ] ) ;
% pcount = % clan . pcount ;
% records = "" ;
if ( % pcount ! $ = "" )
{
for ( % i = 0 ; % i < = % pcount ; % i + + )
{
% player = % clan . player [ % i ] ;
% memberguid = getField ( % player , 3 ) ;
% membername = getField ( % player , 0 ) ;
% membertag = getField ( % player , 1 ) ;
% memberappend = getField ( % player , 2 ) ;
% record = % memberguid TAB % membername TAB % membertag TAB % memberappend ;
if ( % memberguid ! = getField ( WonGetAuthInfo ( ) , 3 ) )
% records = % records @ "\n" @ % record ;
}
% records = trim ( % records ) ;
}
LinkEMail ( % records ) ;
//if there is an unknown URL type, treat it as a weblink..
default :
LinkWeb ( % fld [ 0 ] ) ;
}
}
// =========================================================================
// Tribe Profile Viewing
// =========================================================================
// replacing function in webbrowser.cs, 960
function TWBTabView : : view ( % this , % id , % name , % type )
{
if ( % type $ = "Tribe" )
% tabSet = 1 ;
else
% tabSet = 0 ;
// see if we already have a tab with this clanid
if ( % this . getTabIndex ( % id ) ! = - 1 )
{
% this . setSelected ( % id ) ;
return ;
}
// Or else add the new tab:
% this . addTab ( % id , % name , % tabSet ) ;
% this . setSelected ( % id ) ;
if ( % tabSet = = 1 )
{
TribePane . targetid = % id ;
tn_community_browserui_showTribePane ( ) ;
}
else
{
PlayerPane . targetid = % id ;
tn_community_browserui_showPlayerPane ( ) ;
}
}
// replacing function in webbrowser.cs, 1550
function TribePane : : ButtonClick ( % this , % senderid )
{
canvas . SetCursor ( ArrowWaitCursor ) ;
% tribeName = TWBTabView . getSelectedText ( ) ;
% clanid = TWBTabView . getSelectedId ( ) ;
% this . tabstate = "TRIBE" ;
% this . targetid = % clanid ;
% this . state = "NONE" ;
% now = getSimTime ( ) ;
if ( % now < $ TribesNext : : Community : : BrowserUI : : MinRefreshTime )
% now = ( $ TribesNext : : Community : : BrowserUI : : MinRefreshTime + 1 ) ;
switch ( % senderid )
{
case 0 : //PROFILE
% this . state = "VIEW_CLAN" ;
% clanobj = tn_community_browser_getClanProfile ( % clanid ) ;
% delta = % now - % clanobj . lastRefresh ;
if ( $ TribesNext : : Community : : BrowserUI : : MinRefreshTime < % delta )
{
% this . updateActive = 1 ;
tn_community_browser_clan_view ( % clanid ) ;
tn_community_browserui_clearCheckStatus ( ) ;
}
else
{
tn_community_browserui_showTribePane ( ) ;
}
case 1 : //Formerly "Roster", now "History"
% this . state = "CLAN_HISTORY" ;
% clanobj = tn_community_browser_getClanProfile ( % clanid ) ;
% delta = % now - % clanobj . lastHistRefresh ;
if ( $ TribesNext : : Community : : BrowserUI : : MinRefreshTime < % delta )
{
% this . updateActive = 1 ;
% clanobj . lastHistRefresh = % now ;
tn_community_browser_clan_history ( % clanid ) ;
tn_community_browserui_clearCheckStatus ( ) ;
}
else
{
tn_community_browserui_showTribePane ( ) ;
}
case 2 : // "OPTIONS" button -- for some reason this was called "News" in the Dynamix code
% this . state = "CLAN_OPTIONS" ;
tn_community_browserui_showTribePane ( ) ;
case 3 : //INVITE BUTTON
% this . state = "CLAN_INVITES" ;
TribePane . updateActive = 1 ;
tn_community_browser_clan_viewInvites ( % clanid ) ;
tn_community_browserui_clearCheckStatus ( ) ;
case 4 : //Admin Tribe
TribePropertiesDlg . pendingChanges = "" ;
Canvas . PushDialog ( TribePropertiesDlg ) ;
}
}
// replacing function in webbrowser.cs, 1545
function TribePane : : RosterDblClick ( % this )
{
LaunchBrowser ( MemberList . getSelectedId ( ) , "Warrior" ) ;
}
function tn_community_browserui_amIMember ( % clanid )
{
return ( tn_community_browserui_myRankIn ( % clanid ) > = 0 ) ;
}
function tn_community_browserui_myRankIn ( % clanid )
{
// this pulls out data from the community certificate sent by the browser system
% cert = $ T2CSRI : : CommunityCertificate ;
if ( getFieldCount ( % cert ) > = 5 )
% authInfo = getField ( % cert , 4 ) ;
// decode the hex version of the auth info
% len = strlen ( % authInfo ) ;
if ( % len = = 0 )
return - 1 ;
for ( % i = 0 ; % i < % len ; % i + = 2 )
{
% byte = getSubStr ( % authInfo , % i , 2 ) ;
% char = collapseEscape ( "\\x" @ % byte ) ;
% raw = % raw @ % char ;
}
% rcount = getRecordCount ( % raw ) ;
for ( % i = 2 ; % i < % rcount ; % i + + )
{
% record = getRecord ( % raw , % i ) ;
% cid = getField ( % record , 3 ) ;
% rank = getField ( % record , 4 ) ;
if ( % cid = = % clanid )
return % rank ;
}
return - 1 ;
}
function tn_community_browserui_showTribePane ( )
{
% this = TribePane ;
% clanid = % this . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
% name = % clan . name ;
% tag = getField ( % clan . tag , 0 ) ;
% recru = % clan . recruiting ;
% site = % clan . site ;
% date = % clan . date ;
% pict = % clan . picture ;
% active = % clan . active ;
% info = % clan . info ;
% isMember = tn_community_browserui_amIMember ( % clanid ) ;
% myRank = tn_community_browserui_myRankIn ( % clanid ) ;
// hide inaccessible buttons for certain ranks
if ( % myRank < 3 )
{
// under administrative rank
TW_Admin . setVisible ( false ) ;
}
else
{
TW_Admin . setVisible ( true ) ;
}
if ( % myRank < 2 )
{
// under invitation rank
TL_Invites . setVisible ( false ) ;
}
else
{
TL_Invites . setVisible ( true ) ;
}
switch $ ( % this . state )
{
case "VIEW_CLAN" :
TWBText . clear ( ) ;
if ( % name ! $ = "" )
{
TWBTabView . setTabText ( % clanid , % name ) ;
}
// active status
if ( ! % active & & % name ! $ = "" )
{
% activeMsg = "<spush><font:Sui Generis:14><color:cc0000>\"" @ strupr ( % name ) @ "\" IS INACTIVE -- THIS IS A SNAPSHOT TAKEN AT TIME OF DEACTIVATION<spop>\n" ;
}
if ( % name $ = "" )
{
% activeMsg = "<spush><font:Sui Generis:14><color:00cc00>Loading...<spop>\n" ;
}
// variant of what the Dynamix system originally showed at the top of clan pages
% Tdesc = "<lmargin:10><just:left><Font:Univers Condensed:18><color:ADFFFA>" ;
% Tdesc = % Tdesc @ "Created: " @ % date @ "\n" ;
% Tdesc = % Tdesc @ "Website: <a:wwwlink\t" @ % site @ ">" @ % site @ "</a>\n" ;
% Tdesc = % Tdesc @ "Recruiting: <font:Univers Condensed:18>" ;
% Tdesc = % Tdesc @ ( ( % recru & & % active ) ? ( % isMember ? "YES" : "YES <a:requestlink\t" @ % clanid @ ">Request Invite</a>" ) : "NO" ) ;
% Tdesc = % Tdesc @ "<Font:Univers Condensed:18>" NL "<color:82BEB9><lmargin:30><Font:Univers:18>" ;
// set the window title
TWBTitle . name = % name ;
TWBTitle . setValue ( % name TAB % tag ) ;
// show the clan picture (or default if none)
if ( % pict ! $ = "" )
{
TeamPix . setBitmap ( % pict ) ;
}
else
TeamPix . setBitmap ( "texticons/twb/twb_Lineup.jpg" ) ;
// set the page description
TWBText . setText ( % activeMsg @ % Tdesc NL % info ) ;
// populate the membership roster
MemberList . Clear ( ) ;
MemberList . ClearColumns ( ) ;
MemberList . clearList ( ) ;
MemberList . addColumn ( 0 , "MEMBER" , 92 , 0 , 100 , "left" ) ;
MemberList . addColumn ( 1 , "TITLE" , 90 , 0 , 100 , "left" ) ;
MemberList . addColumn ( 2 , "RNK" , 30 , 0 , 40 , "numeric center" ) ;
% pcount = % clan . pcount ;
if ( % pcount ! $ = "" )
{
for ( % i = 0 ; % i < = % pcount ; % i + + )
{
% member = % clan . player [ % i ] ;
% mname = getField ( % member , 0 ) ;
% mguid = getField ( % member , 3 ) ;
% mrank = getField ( % member , 4 ) ;
% mtitle = collapseEscape ( getField ( % member , 5 ) ) ;
% monline = getField ( % member , 6 ) ;
MemberList . addRow ( % mguid , % mname TAB % mtitle TAB % mrank TAB % clanid ) ;
MemberList . setRowStylebyID ( % mguid , ! % monline ) ;
}
}
// } end case VIEW_CLAN
case "CLAN_HISTORY" :
TWBText . clear ( ) ;
% header = "<lmargin:10><just:left><Font:Univers Condensed:18><color:ADFFFA>History:\n\n<color:82BEB9><lmargin:20><Font:Univers:18>" ;
% text = "" ;
% hcount = % clan . hcount ;
if ( % hcount ! $ = "" )
{
for ( % i = % hcount ; % i > = 0 ; % i - - )
{
if ( % clan . historyCache [ % i ] $ = "" )
{
% event = % clan . history [ % i ] ;
% etype = getField ( % event , 0 ) ;
% etime = tn_community_mailui_epochToDate ( getField ( % event , 1 ) ) ;
% payload = collapseEscape ( getField ( % event , 2 ) ) ;
% template = getField ( % event , 3 ) ;
% player1 = getFields ( % event , 4 , 7 ) ;
% player2 = getFields ( % event , 8 ) ;
% expanded = tn_community_browserui_expandTemplate ( % template , % payload , % player1 , % player2 ) ;
% line = "<spush><color:ADFFFA>" @ % etime @ "<spop> " @ % expanded ;
% clan . historyCache [ % i ] = % line ;
}
else
{
% line = % clan . historyCache [ % i ] ;
}
% text = % text @ % line @ "\n" ;
}
}
TWBText . setText ( % header @ % text ) ;
// } end case CLAN_HISTORY
case "CLAN_OPTIONS" :
TWBText . clear ( ) ;
// this used to contain links to the clan forum, public IRC, and private IRC channels
// -- these are not really all that useful, so, instead...
// create link based options for a handful of TribesNext browser API calls
// go to clan website
// email all members of the clan
// Set Active Clan
// Leave Clan
// check membership in clan before displaying all options
% text = "<just:left><color:ADFFFA><lmargin:10><Font:Univers Condensed:18>" @ % name @ " Options:\n\n<lmargin:20>" @
"<spush><color:ADFFCC><a:wwwlink" TAB % site @ ">Visit Website</a><spop>\n\n" ;
if ( % isMember )
{
% text = % text @ "<spush><color:ADCCFF><a:emailclan" TAB % clanid @ ">E-mail Members</a><spop>\n" @
"<spush><color:ADCCFF><a:activeclan" TAB % clanid @ ">Set as Active Clan</a><spop>\n\n\n" @
"<spush><color:FF8D8D><a:leaveclan" TAB % clanid @ ">Leave Clan</a><spop>" ;
}
TWBText . SetText ( % text ) ;
// } end case CLAN_OPTIONS
case "CLAN_INVITES" :
// since we need a few more options, this is drawn as a table in the main text area
// not the prettiest configuration in the world, but it will do for now
TWBText . clear ( ) ;
% header = "<lmargin:10><just:left><Font:Univers Condensed:18><color:ADFFFA>Pending Invitations:\n\n<color:82BEB9><lmargin:20><Font:Courier New:18>" ;
% text = "<color:666666>" ;
% icount = % clan . icount ;
if ( % icount ! $ = "" )
{
% sLenM = 0 ;
% rLenM = 0 ;
for ( % i = 0 ; % i < = % icount ; % i + + )
{
// extract the data and determine longest values for padding calculation
% invite = % clan . invitee [ % i ] ;
% expiration = tn_community_mailui_epochToDate ( getField ( % invite , 0 ) ) ;
% sender = getFields ( % invite , 1 , 4 ) ;
% sLen = strlen ( getField ( % sender , 0 ) ) + strlen ( getField ( % sender , 1 ) ) ;
if ( % sLen > % sLenM )
% sLenM = % sLen ;
% recipient = getFields ( % invite , 5 , 8 ) ;
% rLen = strlen ( getField ( % recipient , 0 ) ) + strlen ( getField ( % recipient , 1 ) ) ;
if ( % rLen > % rLenM )
% rLenM = % rLen ;
% line [ % i , 0 ] = % expiration ;
% line [ % i , 1 ] = % sender ;
% line [ % i , 2 ] = % recipient ;
}
// produce header and footer lines
% separator = "+---------------------+" ;
% indicator = "| <spush><color:ADFFCC>Valid to Date/Time<spop> |" ;
% indSend = "Sender" ;
for ( % i = 0 ; % i < ( % sLenM + 2 ) ; % i + + )
{
% separator = % separator @ "-" ;
if ( strlen ( % indSend ) < = % sLenM )
% indSend = " " @ % indSend ;
}
% separator = % separator @ "+" ;
% indRec = "Recipient" ;
for ( % i = 0 ; % i < ( % rLenM + 2 ) ; % i + + )
{
% separator = % separator @ "-" ;
if ( strlen ( % indRec ) < % rLenM )
% indRec = " " @ % indRec ;
}
% separator = % separator @ "+---------+" ;
% text = % text @ % separator @ "\n" ;
% indicator = % indicator @ "<spush><color:ADFFCC>" @ % indSend @ "<spop> | <spush><color:ADFFCC>" @ % indRec @ "<spop> | <spush><color:ADFFCC>Retract<spop> |" ;
% text = % text @ % indicator @ "\n" ;
% text = % text @ % separator @ "\n" ;
for ( % i = 0 ; % i < = % icount ; % i + + )
{
// draw padded versions of the data in a table form
% expiration = "<spush><color:ADFFFA>" @ % line [ % i , 0 ] @ "<spop>" ;
% sender = % line [ % i , 1 ] ;
% recipient = % line [ % i , 2 ] ;
% sPad = "" ;
% rPad = "" ;
% sLen = strlen ( getField ( % sender , 0 ) ) + strlen ( getField ( % sender , 1 ) ) ;
% rLen = strlen ( getField ( % recipient , 0 ) ) + strlen ( getField ( % recipient , 1 ) ) ;
while ( ( strlen ( % sPad ) + % sLen ) < % sLenM )
% sPad = " " @ % sPad ;
while ( ( strlen ( % rPad ) + % rLen ) < % rLenM )
% rPad = " " @ % rPad ;
% senderguid = getField ( % sender , 3 ) ;
% sender = % sPad @ tn_community_browserui_liveLinkPlayer ( % sender ) ;
% recipientguid = getField ( % recipient , 3 ) ;
% recipient = % rPad @ tn_community_browserui_liveLinkPlayer ( % recipient ) ;
// rank 2 users have the ability to retract invites that they send, and rank 3+'s have the ability to retract any invite to the clan
if ( % senderguid = = getField ( WONGetAuthInfo ( ) , 3 ) | | % myRank > = 3 )
{
% retract = "<spush><color:FF6D6D><a:retract\t" @ % clanid TAB % recipientguid TAB getField ( % line [ % i , 2 ] , 0 ) @ ">Retract</a><spop> |" ;
}
else
{
% retract = " |" ;
}
% tLine = "| " @ % expiration @ " | " @ % sender @ " | " @ % recipient @ " | " @ % retract ;
% text = % text @ % tLine @ "\n" ;
}
% text = % text @ % separator @ "\n" ;
}
else
{
% text = "<spush><color:ADFFCC>There are no pending invites.<spop>" ;
}
TWBText . setText ( % header @ % text ) ;
}
// reset the cursor to non-wait mode
Canvas . setCursor ( defaultCursor ) ;
}
// create a live link to a player with their current GUID, name, and tag
function tn_community_browserui_liveLinkPlayer ( % player )
{
// %player format: name \t tag \t append \t guid
% name = getField ( % player , 0 ) ;
% tag = getField ( % player , 1 ) ;
% append = getField ( % player , 2 ) ;
% guid = getField ( % player , 3 ) ;
% colorhex = "" ;
for ( % i = 0 ; % i < = 2 ; % i + + )
{
% byte = DecToHex ( getWord ( $ TribeTagColor , % i ) ) ;
while ( strlen ( % byte ) < 2 )
% byte = "0" @ % byte ;
% colorhex = % colorhex @ % byte ;
}
% tag = "<color:" @ % colorhex @ ">" @ % tag ;
% colorhex = "" ;
for ( % i = 0 ; % i < = 2 ; % i + + )
{
% byte = DecToHex ( getWord ( $ PlayerNameColor , % i ) ) ;
while ( strlen ( % byte ) < 2 )
% byte = "0" @ % byte ;
% colorhex = % colorhex @ % byte ;
}
% name = "<color:" @ % colorhex @ ">" @ % name ;
if ( % append )
% colored = % name @ % tag ;
else
% colored = % tag @ % name ;
return "<spush><a:player\t" @ % guid @ ">" @ % colored @ "</a><spop>" ;
}
function tn_community_browserui_liveLinkClan ( % clan )
{
% id = getField ( % clan , 0 ) ;
% name = getField ( % clan , 1 ) ;
// tag, append are fields 2/3 respectively, but unused here
% colorhex = "" ;
for ( % i = 0 ; % i < = 2 ; % i + + )
{
% byte = DecToHex ( getWord ( $ PlayerNameColor , % i ) ) ;
while ( strlen ( % byte ) < 2 )
% byte = "0" @ % byte ;
% colorhex = % colorhex @ % byte ;
}
% name = "<color:" @ % colorhex @ ">" @ % name ;
return "<spush><a:clan\t" @ % id @ ">" @ % name @ "</a><spop>" ;
}
// expands a template and fills in details with live links where requred
function tn_community_browserui_expandTemplate ( % template , % payload , % player1 , % player2 , % player , % clan )
{
% pre = "<spush><color:ADFFAD>" ;
% val [ "@player" ] = tn_community_browserui_liveLinkPlayer ( % player ) ;
% val [ "@clan" ] = tn_community_browserui_liveLinkClan ( % clan ) ;
% val [ "@player1" ] = tn_community_browserui_liveLinkPlayer ( % player1 ) ;
% val [ "@player2" ] = tn_community_browserui_liveLinkPlayer ( % player2 ) ;
% val [ "@payload" ] = % pre @ % payload @ "<spop>" ;
% val [ "@payload^" ] = % pre @ ( % payload ? "YES" : "NO" ) @ "<spop>" ;
% pcount = getFieldCount ( % payload ) ;
for ( % i = 0 ; % i < % pcount ; % i + + )
{
% field = getField ( % payload , % i ) ;
% val [ "@payload;" @ % i ] = % pre @ % field @ "<spop>" ;
if ( % field )
% val [ "@payload;" @ % i @ "^" ] = % pre @ "YES<spop>" ;
else
% val [ "@payload;" @ % i @ "^" ] = % pre @ "NO<spop>" ;
}
% output = "" ;
% index = strstr ( % template , "@" ) ;
while ( % index ! = - 1 )
{
// scan ahead for a non alphanum, semicolon, or ^ character
% strlen = strlen ( % template ) ;
for ( % i = % index ; % i < % strlen ; % i + + )
{
% char = strcmp ( getSubStr ( % template , % i , 1 ) , "" ) ;
if ( ! ( ( % char > = 48 & & % char < = 57 ) | | ( % char > = 97 & & % char < = 122 ) | | % char = = 64 | | % char = = 59 | | % char = = 94 ) )
break ;
}
% lookup = getSubStr ( % template , % index , % i - % index ) ;
% value = % val [ % lookup ] ;
% output = % output @ getSubStr ( % template , 0 , % index ) ;
% output = % output @ % value ;
% template = getSubStr ( % template , % i , % strlen ) ;
% index = strstr ( % template , "@" ) ;
}
return % output @ % template ;
}
// =========================================================================
// Tribe Profile Admin
// =========================================================================
// replacing function in webbrowser.cs, 2336
function TribePropertiesDlg : : onWake ( % this )
{
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
% name = % clan . name ;
% tag = getField ( % clan . tag , 0 ) ;
% append = getField ( % clan . tag , 1 ) ;
% recru = % clan . recruiting ;
% info = % clan . info ;
if ( % recru )
TP_RecruitFlagBtn . setValue ( 1 ) ;
else
TP_RecruitFlagNoBtn . setValue ( 1 ) ;
if ( % append )
TP_AppendFlagBtn . setValue ( 1 ) ;
else
TP_PrePendFlagBtn . setValue ( 1 ) ;
TP_CurrentTag . setText ( % tag ) ;
TP_NewTag . setText ( % tag ) ;
TP_TribeDescription . setText ( % info ) ;
% this . RefreshTag ( ) ;
% this . pendingChanges = "" ;
Canvas . setCursor ( defaultCursor ) ;
// add new UI elements to change the clan name
ProfileControl . extent = "385 280" ;
% this . getObject ( 0 ) . setText ( "Tribe Administration" ) ;
// move the close button to the top-right and make it an "X"
TP_OKBtn . text = "X" ;
TP_OKBtn . extent = "40 38" ;
TP_OKBtn . position = "365 1" ;
// update the clan rename field with this clan's name
// store it so we know if we're actually changing it when the rename button is hit
% this . nameField . setText ( % name ) ;
% this . nameField . cname = % name ;
}
// this is a new function for TribesNext
function TribePropertiesDlg : : RenameTribe ( % this )
{
% field = % this . nameField ;
% clanid = TribePane . targetid ;
% org = % field . cname ;
% new = % field . getValue ( ) ;
if ( % org $ = % new )
{
MessageBoxOK ( "NO ACTION" , "Current and new name is the same." , "" ) ;
}
else
{
// verify they want to do it
MessageBoxYesNo ( "CONFIRM" , "Are you sure you want to change the clan name from \n\"<spush><color:FFBB33>" @ % org @ "<spop>\"\nto\n\"<spush><color:FFBB33>" @ % new @ "<spop>\"?" ,
"tn_community_browser_clan_rename(\"" @ expandEscape ( % clanid ) @ "\", \"" @ expandEscape ( % new ) @ "\");" , "" ) ;
}
}
// replacing function in webbrowser.cs, 2371
function TribePropertiesDlg : : DisbandTribe ( % this )
{
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
% name = % clan . name ;
MessageBoxYesNo ( "AUTHORIZE" , "At least 50% of Rank 4 members must authorize a disband." NL " " NL
"Click YES to authorize, or NO to deauthorize disband of \"" @ % name @ "\"." ,
"tn_community_browser_clan_disband(\"" @ expandEscape ( % clanid ) @ "\", 1);" ,
"tn_community_browser_clan_disband(\"" @ expandEscape ( % clanid ) @ "\", 0);" ) ;
}
// replacing function in webbrowser.cs, 2378
function TribePropertiesDlg : : ChangeRecruiting ( % this )
{
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
% recru = % clan . recruiting ;
if ( TP_RecruitFlagBtn . getValue ( ) )
% recruiting = 1 ;
else
% recruiting = 0 ;
if ( % recru ! = % recruiting )
{
// fire off a request to change the recruiting flag
tn_community_browser_clan_recruiting ( % clanid , % recruiting ) ;
% this . pendingChanges = "" ;
}
}
// replacing function in webbrowser.cs, 2400
function TribePropertiesDlg : : ChangeTag ( % this )
{
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
if ( TP_NewTag . getValue ( ) ! $ = "" )
{
% tag = TP_NewTag . getValue ( ) ;
% append = TP_AppendFlagBtn . getValue ( ) ;
// fire off request to change tag
tn_community_browser_clan_retag ( % clanid , % tag , % append ) ;
}
else
{
MessageBoxOK ( "WARNING" , "Tribe Tag cannot be blank" , "TP_NewTag.makeFirstResponder(1);" ) ;
}
}
// replacing function in webbrowser.cs, 2391
function TribePropertiesDlg : : ToggleAppending ( % this )
{
% this . RefreshTag ( ) ;
}
// replacing function in webbrowser.cs, 2486
function TribePropertiesDlg : : setTribeGraphic ( % this )
{
% picture = TribeGraphic . bitmap ;
TeamPix . setBitmap ( % picture ) ;
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
tn_community_browser_clan_picture ( % clanid , % picture ) ;
}
// replacing function in webbrowser.cs, 2429
function TribePropertiesDlg : : ClearDescription ( % this )
{
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
MessageBoxYesNo ( "DESCRIPTION" , "Are you sure you want to clear the clan info description?" ,
"tn_community_browser_clan_info(" @ % clanid @ ", \"\");TP_TribeDescription.setText(\"\");" , "" ) ;
}
// replacing function in webbrowser.cs, 2423
function TribePropertiesDlg : : EditDescription ( % this )
{
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
% info = % clan . info ;
TWBText . editType = "tribe" ;
Canvas . pushDialog ( BrowserEditInfoDlg ) ;
EditDescriptionText . setValue ( % info ) ;
}
// replacing function in webbrowser.cs, 199
function EditDescriptionApply ( )
{
% desc = EditDescriptionText . getValue ( ) ;
if ( TWBText . editType $ = "tribe" )
{
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
% clan . info = % desc ;
tn_community_browser_clan_info ( % clanid , % desc ) ;
}
else
{
tn_community_browser_user_info ( % desc ) ;
Canvas . popDialog ( BrowserEditInfoDlg ) ;
PlayerPane . updateActive = 1 ;
tn_community_browserui_clearCheckStatus ( ) ;
WP_WarriorDescription . setText ( % desc ) ;
}
}
// replacing function in webbrowser.cs, 2187
function MemberList : : onRightMouseDown ( % this , % column , % row , % mousePos )
{
MemberList . setSelectedRow ( % row ) ;
% tguid = MemberList . getSelectedId ( ) ;
% clanid = TribePane . targetid ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
//echo("Right clicked on " @ %tguid @ " in clan " @ %clanid);
TribeMemberPopup . position = % mousePos ;
Canvas . pushDialog ( TribeMemberPopupDlg ) ;
TribeMemberPopupDlg . onWake ( ) ;
TribeMemberPopup . forceOnAction ( ) ;
}
// replacing function in webbrowser.cs, 2240
function TribeMemberPopupDlg : : onWake ( % this )
{
% tguid = MemberList . getSelectedId ( ) ;
% trow = MemberList . getRowTextById ( % tguid ) ;
% tname = getField ( % trow , 0 ) ;
% ttitle = getField ( % trow , 1 ) ;
% trank = getField ( % trow , 2 ) ;
% tclanid = getField ( % trow , 3 ) ;
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
TribeWarriorBrowserGui . TDialogOpen = true ;
TribeMemberPopup . clear ( ) ;
% isMember = tn_community_browserui_amIMember ( % tclanid ) ;
TribeMemberPopup . add ( % tname , - 1 ) ;
if ( % tguid ! = % myguid )
{
TribeMemberPopup . add ( "--------------------------------------------" , - 1 ) ;
TribeMemberPopup . add ( "Send E-mail" , 2 ) ;
TribeMemberPopup . add ( "Add to Buddylist" , 3 ) ;
TribeMemberPopup . add ( "Add to Blocklist" , 4 ) ;
}
if ( % isMember )
{
TribeMemberPopup . add ( "--------------------------------------------" , - 1 ) ;
// only show the options if they can be done.
// obviously these are all enforced on the server side too, so this is to minimize error messages shown to users
% myRank = tn_community_browserui_myRankIn ( % tclanid ) ;
if ( % tguid = = % myguid )
{
// targeting self
TribeMemberPopup . add ( "Leave Tribe" , 0 ) ; //can always leave a clan
if ( % myRank > 0 ) // must be at least rank 1 to change title
{
// anyone can downrank themselves if they so choose, however, once they are rank 1
TribeMemberPopup . add ( "Edit Rank/Title" , 1 ) ;
}
else
{
TribeMemberPopup . add ( "Too low rank to edit own title" , - 1 ) ;
}
}
else
{
// targeting another user
if ( % myRank > = 3 )
{
// see if the target rank is same/lower
if ( % trank < % myRank )
{
TribeMemberPopup . add ( "Kick from Tribe" , 0 ) ;
TribeMemberPopup . add ( "Edit Rank/Title" , 1 ) ;
}
else
{
TribeMemberPopup . add ( "Too low rank to kick/edit member" , - 1 ) ;
}
}
else
{
TribeMemberPopup . add ( "Too low rank to kick/edit member" , - 1 ) ;
}
}
}
Canvas . rePaint ( ) ;
}
// replacing function in webbrowser.cs, 2282
function TribeMemberPopup : : onSelect ( % this , % id , % text )
{
% tguid = MemberList . getSelectedId ( ) ;
% trow = MemberList . getRowTextById ( % tguid ) ;
% tname = getField ( % trow , 0 ) ;
% ttitle = getField ( % trow , 1 ) ;
% trank = getField ( % trow , 2 ) ;
% tclanid = getField ( % trow , 3 ) ;
% clan = tn_community_browser_getClanProfile ( % tclanid ) ;
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
switch ( % id )
{
case 0 : // Kick
if ( % tguid ! = % myguid )
{
MessageBoxYesNo ( "CONFIRM" , "Are you sure you want to kick \"<spush><color:FFBB33>\n" @ % tname @ "<spop>\" from \"<spush><color:FFBB33>" @ % clan . name @ "<spop>\"?" ,
"tn_community_browser_clan_kick(\"" @ expandEscape ( % tclanid ) @ "\", \"" @ expandEscape ( % tguid ) @ "\");" , "" ) ;
}
else
{
// targeting self -- make it a leave
MessageBoxYesNo ( "CONFIRM" , "Are you sure that you want to leave \"<spush><color:FFBB33>" @ % clan . name @ "<spop>\"?" ,
"tn_community_browser_user_leaveClan(\"" @ expandEscape ( % tclanid ) @ "\");" , "" ) ;
}
case 1 : // Admin Member
LinkEditMember ( % trow , TribeAdminMemberDlg ) ;
case 2 : // EMail Member
LinkEMail ( % tguid ) ;
case 3 : // Add To Buddylist
MessageBoxYesNo ( "CONFIRM" , "Add \"" @ % tname @ "\" to Buddy List?" ,
"tn_community_mail_request_addListEntry(\"buddy\", \"" @ expandEscape ( % tguid ) @ "\");" , "" ) ;
case 4 : // Add To Blocklist
MessageBoxYesNo ( "CONFIRM" , "Block Email from \"" @ % tname @ "\"?" ,
"tn_community_mail_request_addListEntry(\"ignore\", \"" @ expandEscape ( % tguid ) @ "\");" , "" ) ;
}
canvas . popDialog ( TribeMemberPopupDlg ) ;
}
// replacing function in webbrowser.cs, 389
function LinkEditMember ( % row , % owner )
{
% name = getField ( % row , 0 ) ;
% title = getField ( % row , 1 ) ;
% rank = getField ( % row , 2 ) ;
% clanid = getField ( % row , 3 ) ;
% guid = MemberList . getSelectedId ( ) ;
% clan = tn_community_browser_getClanProfile ( % clanid ) ;
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
% myRank = tn_community_browserui_myRankIn ( % clanid ) ;
//initialize buttons
% button [ 0 ] = tb_onProbation ;
% button [ 1 ] = tb_tribeMember ;
% button [ 2 ] = tb_tribeAdmin ;
% button [ 3 ] = tb_tribeController ;
% button [ 4 ] = tb_sysAdmin ;
for ( % i = 0 ; % i < 5 ; % i + + )
{
% button [ % i ] . setVisible ( true ) ;
% button [ % i ] . setActive ( false ) ;
% button [ % i ] . setValue ( false ) ;
}
% owner . vTribe = % clanid ;
% owner . vPlayer = % guid ;
t_whois . setValue ( % name ) ;
E_Title . setValue ( % title ) ;
for ( % i = 0 ; % i < = % myRank ; % i + + )
{
% button [ % i ] . setActive ( true ) ;
}
% button [ % rank ] . setValue ( true ) ;
Canvas . pushDialog ( % owner ) ;
}
// replacing function in webbrowser.cs, 632
function SetMemberProfile ( )
{
if ( strLen ( trim ( E_Title . getValue ) ) < = 0 )
{
% title = E_Title . getValue ( ) ;
% rank = TribeAdminMemberDlg . vPerm ;
% clanid = TribeAdminMemberDlg . vTribe ;
% guid = TribeAdminMemberDlg . vPlayer ;
tn_community_browser_clan_changeRank ( % clanid , % guid , % rank , % title ) ;
Canvas . popDialog ( TribeAdminMemberDlg ) ;
// initiate a UI update for the browser
TribePane . updateActive = 1 ;
tn_community_browserui_clearCheckStatus ( ) ;
}
else
MessageBoxOK ( "WARNING" , "Member Title cannot be blank." ) ;
}
// =========================================================================
// Warrior Profile Viewing
// =========================================================================
// replacing function in webbrowser.cs, 1864
function PlayerPane : : ButtonClick ( % this , % senderid )
{
canvas . SetCursor ( ArrowWaitCursor ) ;
% this . tabstate = "WARRIOR" ;
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
% guid = TWBTabView . getSelectedId ( ) ;
% this . targetid = % guid ;
% this . state = "NONE" ;
% now = getSimTime ( ) ;
if ( % now < $ TribesNext : : Community : : BrowserUI : : MinRefreshTime )
% now = $ TribesNext : : Community : : BrowserUI : : MinRefreshTime + 1 ;
switch ( % senderid )
{
case 0 : // Player Profile
% this . state = "VIEW_PLAYER" ;
% playerobj = tn_community_browser_getPlayerProfile ( % guid ) ;
% delta = % now - % playerobj . lastRefresh ;
if ( $ TribesNext : : Community : : BrowserUI : : MinRefreshTime < % delta )
{
% this . updateActive = 1 ;
tn_community_browser_user_view ( % guid ) ;
tn_community_browserui_clearCheckStatus ( ) ;
}
else
{
tn_community_browserui_showPlayerPane ( ) ;
}
case 1 :
//Player History
% this . state = "PLAYER_HISTORY" ;
% playerobj = tn_community_browser_getPlayerProfile ( % guid ) ;
% delta = % now - % playerobj . lastHistRefresh ;
if ( $ TribesNext : : Community : : BrowserUI : : MinRefreshTime < % delta )
{
% this . updateActive = 1 ;
% playerobj . lastHistRefresh = % now ;
tn_community_browser_user_history ( % guid ) ;
tn_community_browserui_clearCheckStatus ( ) ;
}
else
{
tn_community_browserui_showPlayerPane ( ) ;
}
case 2 :
//TribeList
% this . state = "VIEW_PLAYER" ;
W_MemberList . CID = 0 ;
tn_community_browserui_showPlayerPane ( ) ;
case 3 :
//Player Buddylist
% this . state = "VIEW_PLAYER" ;
W_MemberList . CID = 1 ;
tn_community_browserui_showPlayerPane ( ) ;
case 4 :
//Visitor Options
% this . state = "PLAYER_OPTIONS" ;
% playerobj = tn_community_browser_getPlayerProfile ( % guid ) ;
% delta = % now - % playerobj . lastRefresh ;
if ( $ TribesNext : : Community : : BrowserUI : : MinRefreshTime < % delta )
{
% this . updateActive = 1 ;
tn_community_browser_user_view ( % guid ) ;
tn_community_browserui_clearCheckStatus ( ) ;
}
else
{
tn_community_browserui_showPlayerPane ( ) ;
}
case 5 :
//Admin Options
WarriorPropertiesDlg . pendingChanges = "" ;
Canvas . PushDialog ( WarriorPropertiesDlg ) ;
}
}
function tn_community_browserui_showPlayerPane ( )
{
% this = PlayerPane ;
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
% guid = % this . targetid ;
% player = tn_community_browser_getPlayerProfile ( % guid ) ;
switch $ ( % this . state )
{
case "VIEW_PLAYER" :
if ( % player . name ! $ = "" )
{
% append = getField ( % player . tag , 1 ) ;
% titletag = getField ( % player . tag , 0 ) ;
TWBTitle . setText ( ( % append ? % player . name @ % titletag : % titletag @ % player . name ) ) ;
TWBTabView . setTabText ( % guid , % player . name ) ;
}
W_Text . clear ( ) ;
// pretty much a straight copy of the header created by Dynamix -- just activated the previously commented out online status line
% profileText = "<just:left><lmargin:10><color:ADFFFA><Font:Univers Condensed:10> \n<Font:Univers Condensed:18>" ;
% profileText = % profileText @ "Registered:<spush><color:FFAA00>" SPC % player . date @ "<spop>\n" ;
% profileText = % profileText @ "Online: <spush>" SPC ( % player . online ? "<color:33FF33>YES" : "<color:FF3333>NO" ) @ "<spop>\n" ;
% profileText = % profileText @ "Website: " SPC "<spush><color:CCAA33><a:wwwlink\t" @ % player . site @ ">" @ % player . site @"</a><spop>\n\n" ;
% profileText = % profileText @ "<color:82BEB9><Font:Univers:18><just:left><lmargin:20>" ;
W_Text . setText ( % profileText @ % player . info ) ;
if ( ! W_MemberList . CID )
{
// populate the membership data
W_MemberList . Clear ( ) ;
W_MemberList . ClearColumns ( ) ;
W_MemberList . clearList ( ) ;
W_MemberList . addColumn ( 0 , "TRIBE" , 94 , 0 , 330 ) ;
W_MemberList . addColumn ( 1 , "TITLE" , 80 , 0 , 300 ) ;
W_MemberList . addColumn ( 2 , "RNK" , 38 , 0 , 50 , "numeric center" ) ;
% mcount = % player . mcount ;
if ( % mcount ! $ = "" )
{
% ptag = getField ( % player . tag , 0 ) ;
for ( % i = 0 ; % i < = % mcount ; % i + + )
{
% membership = % player . membership [ % i ] ;
% mid = getField ( % membership , 0 ) ;
% mname = getField ( % membership , 1 ) ;
% mrank = getField ( % membership , 2 ) ;
% mtitle = getField ( % membership , 3 ) ;
% mtag = getField ( % membership , 4 ) ;
W_MemberList . addRow ( % mid , % mname TAB % mtitle TAB % mrank TAB % mid ) ;
W_MemberList . setRowStylebyID ( % mid , ( % mtag ! $ = % ptag ) ) ;
}
}
}
else
{
W_MemberList . Clear ( ) ;
W_MemberList . ClearColumns ( ) ;
W_MemberList . clearList ( ) ;
W_MemberList . addColumn ( 0 , "BUDDY" , 212 , 0 , 250 ) ;
// populate buddylist
if ( $ TMail : : ListMax [ "buddy" ] ! $ = "" )
{
% buddycount = $ TMail : : ListMax [ "buddy" ] ;
for ( % i = 0 ; % i < = % buddycount ; % i + + )
{
% buddy = $ TMail : : ListVals [ "buddy" , % i ] ;
% buddyname = getField ( % buddy , 0 ) ;
% buddyguid = getField ( % buddy , 3 ) ;
W_MemberList . addRow ( % buddyguid , % buddyname ) ;
}
}
}
// show the player picture (or default if none)
if ( % pict ! $ = "" )
{
PlayerPix . setBitmap ( % pict ) ;
}
else
{
PlayerPix . schedule ( 300 , "setBitmap" , "texticons/twb/twb_Lineup.jpg" ) ;
}
case "PLAYER_HISTORY" :
W_Text . clear ( ) ;
% header = "<lmargin:10><just:left><Font:Univers Condensed:10>\n<Font:Univers Condensed:18><color:ADFFFA>History:\n\n<color:82BEB9><lmargin:20><Font:Univers:18>" ;
% text = "" ;
% hcount = % player . hcount ;
% start = getRealTime ( ) ;
if ( % hcount ! $ = "" )
{
for ( % i = 0 ; % i < = % hcount ; % i + + )
{
if ( % player . historyCache [ % i ] $ = "" )
{
% event = % player . history [ % i ] ;
% etype = getField ( % event , 0 ) ;
% etime = tn_community_mailui_epochToDate ( getField ( % event , 1 ) ) ;
% payload = collapseEscape ( getField ( % event , 2 ) ) ;
% template = getField ( % event , 3 ) ;
% playerv = getFields ( % event , 4 , 7 ) ;
% clan = getFields ( % event , 8 ) ;
% expanded = tn_community_browserui_expandTemplate ( % template , % payload , "" , "" , % playerv , % clan ) ;
% line = "<spush><color:ADFFFA>" @ % etime @ "<spop> " @ % expanded ;
% player . historyCache [ % i ] = % line ;
}
else
{
% line = % player . historyCache [ % i ] ;
}
% text = % line @ "\n" @ % text ;
}
}
% end = getRealTime ( ) ;
//echo("Draw Time: " @ %end - %start);
W_Text . setText ( % header @ % text ) ;
case "PLAYER_OPTIONS" :
W_Text . clear ( ) ;
% text = "<just:left><color:ADFFFA><lmargin:10><Font:Univers Condensed:10>\n<Font:Univers Condensed:18>Options for " @ % player . name @ ":\n\n<lmargin:20>" @
"<spush><color:ADFFCC><a:wwwlink" TAB % player . site @ ">Visit Website</a><spop>\n" ;
% text = % text @ "<spush><color:ADFFCC><a:email" TAB % guid @ ">Send E-mail</a><spop>\n" ;
// check if on buddy list already and switch this to remove if so
if ( tn_community_isUserBuddy ( % guid ) ! $ = "" )
% text = % text @ "<spush><color:ADFFCC><a:delBuddy" TAB % guid TAB % player . name @ ">Remove from Buddylist</a><spop>\n" ;
else
% text = % text @ "<spush><color:ADFFCC><a:addBuddy" TAB % guid TAB % player . name @ ">Add to Buddylist</a><spop>\n" ;
% text = % text @ "\n<spush><color:ADCCFF>" ;
// add invitation links to clans that the current player has invitation ability to, and the target player is not a member of
% self = tn_community_browser_getPlayerProfile ( % myguid ) ;
if ( % self . mcount ! $ = "" )
{
% idxs = "" ;
for ( % i = 0 ; % i < = % self . mcount ; % i + + )
{
% membership = % self . membership [ % i ] ;
% crank = getField ( % membership , 2 ) ;
if ( % crank > = 2 )
% idxs = % idxs @ "\t" @ % i ;
}
% idxs = trim ( % idxs ) ;
}
% cnt = getFieldCount ( % idxs ) ;
for ( % i = 0 ; % i < % cnt ; % i + + )
{
% thisidx = getField ( % idxs , % i ) ;
% checkagainst = getField ( % self . membership [ % thisidx ] , 0 ) ;
% found = 0 ;
if ( % player . mcount ! $ = "" )
{
for ( % j = 0 ; % j < = % player . mcount ; % j + + )
{
% checkid = getField ( % player . membership [ % j ] , 0 ) ;
if ( % checkagainst = = % checkid )
% found = 1 ;
}
}
if ( ! % found )
% outIdx = % outIdx @ "\t" @ % thisidx ;
}
% outIdx = trim ( % outIdx ) ;
% cnt = getFieldCount ( % outIdx ) ;
for ( % i = 0 ; % i < % cnt ; % i + + )
{
% membership = % self . membership [ getField ( % outIdx , % i ) ] ;
% clanid = getField ( % membership , 0 ) ;
% clanname = getField ( % membership , 1 ) ;
% text = % text @ "<a:invite" TAB % clanid TAB % guid TAB % clanname @ ">Invite " @ % player . name @ " to join \"" @ % clanname @ "\"</a>\n" ;
}
W_Text . setText ( % text ) ;
}
// reset the cursor to non-wait mode
Canvas . setCursor ( defaultCursor ) ;
}
// replacing function in webbrowser.cs, 1851
function PlayerPane : : DblClick ( % this )
{
% id = W_MemberList . getSelectedId ( ) ;
% text = getField ( W_MemberList . getRowTextById ( % id ) , 0 ) ;
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
% tabid = TWBTabView . getSelectedId ( ) ;
if ( w_buddylist . getValue ( ) & & ( % myguid = = % tabid ) )
{
TWBTabView . view ( % id , % text ) ;
}
else
{
TWBTabView . view ( % id , % text , "Tribe" ) ;
}
}
// =========================================================================
// Warrior Profile Admin
// =========================================================================
// replacing function in webbrowser.cs, 2002
function W_MemberList : : onRightMouseDown ( % this , % column , % row , % mousePos )
{
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
% tabid = TWBTabView . getSelectedId ( ) ;
// Open the action menu:
W_MemberList . setSelectedRow ( % row ) ;
if ( % myguid = = % tabid )
{
% id = W_MemberList . getSelectedId ( ) ;
% text = W_MemberList . getRowTextById ( % id ) ;
if ( w_buddylist . getValue ( ) )
{
// buddylist
WarriorPopup . text = % text ;
WarriorPopup . id = % id ;
WarriorPopup . position = % mousePos ;
Canvas . pushDialog ( WarriorPopupDlg ) ;
WarriorPopUpDlg . onWake ( ) ;
WarriorPopup . forceOnAction ( ) ;
}
else
{
// clan
WarriorPopup . text = getField ( % text , 0 ) ;
WarriorPopup . id = getField ( % text , 3 ) ;
WarriorPopup . position = % mousePos ;
Canvas . pushDialog ( WarriorPopupDlg ) ;
WarriorPopUpDlg . onWake ( ) ;
WarriorPopup . forceOnAction ( ) ;
}
}
}
// replacing function in webbrowser.cs, 2058
function WarriorPopupDlg : : onWake ( % this )
{
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
% tabid = TWBTabView . getSelectedId ( ) ;
TribeAndWarriorBrowserGui . WDialogOpen = true ;
warriorPopUP . clear ( ) ;
if ( % myguid = = % tabid )
{
switch ( W_MemberList . CID )
{
case 0 :
WarriorPopUp . add ( WarriorPopup . text , - 1 ) ;
WarriorPopUp . add ( "---------------------------------------------" , - 1 ) ;
WarriorPopup . add ( "Clear Primary Tribe setting" , 0 ) ;
WarriorPopUp . add ( "Make Primary Tribe" , 1 ) ;
WarriorPopup . add ( "Leave Tribe" , 2 ) ;
case 1 :
WarriorPopUp . add ( WarriorPopup . text , - 1 ) ;
WarriorPopUp . add ( "---------------------------------------------" , - 1 ) ;
WarriorPopup . add ( "Contact By EMail" , 3 ) ;
WarriorPopup . add ( "Remove from Buddylist" , 4 ) ;
WarriorPopup . add ( "............................................." , - 1 ) ;
WarriorPopup . add ( "EMail BuddyList" , 5 ) ;
}
}
Canvas . rePaint ( ) ;
}
// replacing function in webbrowser.cs, 2092
function WarriorPopup : : onSelect ( % this , % id , % text )
{
switch ( % id )
{
case 0 : // set active clan tag to none (but retain membership)
MessageBoxYesNo ( "CONFIRM" , "Are you sure you wish to hide your tag?" ,
"tn_community_browser_user_activeClan(-1); PlayerPane.updateActive = 1; tn_community_browserui_clearCheckStatus();" , "" ) ;
case 1 : // set active clan tag to one of the clans the user is a member of
MessageBoxYesNo ( "CONFIRM" , "Are you sure you wish to set \n\"<spush><color:FFBB33>" @ % this . text @ "<spop>\"\n as your active clan?" ,
"tn_community_browser_user_activeClan(" @ expandEscape ( % this . id ) @ "); PlayerPane.updateActive = 1; tn_community_browserui_clearCheckStatus();" , "" ) ;
case 2 : // leave Tribe
MessageBoxYesNo ( "CONFIRM" , "Are you sure you wish to leave \n\"<spush><color:FFBB33>" @ % this . text @ "<spop>\"?" ,
"tn_community_browser_user_leaveClan(" @ expandEscape ( % this . id ) @ "); PlayerPane.updateActive = 1; tn_community_browserui_clearCheckStatus();" , "" ) ;
case 3 : // EMail Buddy -- FUTURE this is a little fritzy
% record = WarriorPopup . id TAB WarriorPopup . text ;
LinkEMail ( % record ) ;
case 4 : // Remove Buddy
MessageBoxYesNo ( "CONFIRM" , "Remove \"" @ WarriorPopup . text @ "\" from Buddy List?" ,
"tn_community_mail_request_delListEntry(\"buddy\", \"" @ expandEscape ( WarriorPopup . id ) @ "\"); PlayerPane.updateActive = 1; schedule(300, 0, tn_community_browserui_clearCheckStatus);" , "" ) ;
case 5 : // TODO EMail Buddylist
% count = w_memberlist . rowCount ( ) ;
for ( % x = 0 ; % x < % count ; % x + + )
{
% mailList = % mailList TAB w_memberList . getRowId ( % x ) ;
}
% mailList = trim ( % mailList ) ;
error ( % mailList ) ;
//LinkEMail(%mailList);
}
canvas . PopDialog ( WarriorPopupDlg ) ;
}
// replacing function in webbrowser.cs, 2507
function WarriorPropertiesDlg : : onWake ( % this )
{
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
% player = tn_community_browser_getPlayerProfile ( % myguid ) ;
% this . pendingChanges = "" ;
UrlEdit . setValue ( % player . site ) ;
WP_CurrentName . setValue ( % player . name ) ;
NewNameEdit . setValue ( "" ) ;
WP_WarriorDescription . setText ( % player . info ) ;
% this . LoadGfxPane ( ) ;
}
// replacing function in webbrowser.cs, 2531
function WarriorPropertiesDlg : : EditDescription ( % this )
{
% myguid = getField ( WONGetAuthInfo ( ) , 3 ) ;
% player = tn_community_browser_getPlayerProfile ( % myguid ) ;
TWBText . editType = "player" ;
Canvas . pushDialog ( BrowserEditInfoDlg ) ;
EditDescriptionText . setValue ( % player . info ) ;
}
// replacing function in webbrowser.cs, 2538
function WarriorPropertiesDlg : : ClearDescription ( % this )
{
MessageBoxYesNo ( "CONFIRM" , "Clear your profile description?" , "WarriorPropertiesDlg.doClearDescription();" , "" ) ;
}
// replacing function in webbrowser.cs, 2543
function WarriorPropertiesDlg : : doClearDescription ( % this )
{
% this . pendingChanges = "" ;
EditDescriptionText . setText ( "" ) ;
WP_WarriorDescription . setText ( EditDescriptionText . getText ( ) ) ;
tn_community_browser_user_info ( "" ) ;
PlayerPane . updateActive = 1 ;
tn_community_browserui_clearCheckStatus ( ) ;
}
// replacing function in webbrowser.cs, 2582
function WarriorPropertiesDlg : : setPlayerGraphic ( % this )
{
PlayerPix . setBitmap ( PlayerGraphic . bitmap ) ;
% this . pendingChanges = "" ;
tn_community_browser_user_picture ( PlayerGraphic . bitmap ) ;
PlayerPane . updateActive = 1 ;
tn_community_browserui_clearCheckStatus ( ) ;
}
// replacing function in webbrowser.cs, 2594
function WarriorPropertiesDlg : : UpdateUrl ( % this )
{
if ( trim ( UrlEdit . getValue ( ) ) $ = "" )
{
UrlEdit . setValue ( "www.tribesnext.com" ) ;
MessageBoxYesNo ( "CONFIRM" , "Your URL is blank, by default www.tribesnext.com will become your URL. Continue?" , "WarriorPropertiesDlg.setURL();" , "UrlEdit.setValue(\"\");" ) ;
}
else
WarriorPropertiesDlg . setURL ( ) ;
}
// replacing function in webbrowser.cs, 2606
function WarriorPropertiesDlg : : setURL ( % this )
{
% this . pendingChanges = "" ;
% url = UrlEdit . getValue ( ) ;
tn_community_browser_user_website ( % url ) ;
PlayerPane . updateActive = 1 ;
tn_community_browserui_clearCheckStatus ( ) ;
}
// replacing function in webbrowser.cs, 2617
function WarriorPropertiesDlg : : ChangePlayerName ( % this )
{
MessageBoxYesNo ( "CONFIRM" , "Are you sure you want to change your player name?" , "WarriorPropertiesDlg.ProcessNameChange();" , "NewNameEdit.setValue(\"\");" ) ;
}
// replacing function in webbrowser.cs, 2623
function WarriorPropertiesDlg : : ProcessNameChange ( % this )
{
% this . pendingChanges = "" ;
% name = NewNameEdit . getValue ( ) ;
tn_community_browser_user_rename ( % name ) ;
PlayerPane . updateActive = 1 ;
tn_community_browserui_clearCheckStatus ( ) ;
}
// replacing function in webbrowser.cs, 2631
function WarriorGraphicsList : : onSelect ( % this )
{
% jpg = "texticons/twb/" @ % this . getRowText ( % this . getSelectedRow ( ) ) @ ".jpg" ;
PlayerGraphic . setBitmap ( % jpg ) ;
}
// =========================================================================
// "CREATE TRIBE"
// =========================================================================
// replacing function in webbrowser.cs, 110
function CreateTribe ( )
{
$ CreateTribeName = "" ;
$ CreateTribeTag = "" ;
$ CreateTribeAppend = true ;
$ CreateTribeRecruiting = true ;
if ( isObject ( CreateTribeDlg ) )
CreateTribeDlg . delete ( ) ;
LoadGui ( CreateTribeDlg ) ;
// modify the UI here, since it is reloaded every time it is needed
CT_TagText . maxLength = 12 ; // max tag length = 12
CT_TagText . IRCName = 0 ; // disables wierd/wrong tag text validation
CreateTribeDlg . getObject ( 0 ) . getObject ( 3 ) . maxLength = 40 ; // max length of clan name
CreateTribeDlg . getObject ( 0 ) . getObject ( 3 ) . IRCName = 0 ; // disable wierd/wrong tag name validation
Canvas . pushDialog ( CreateTribeDlg ) ;
}
// replacing function in webbrowser.cs, 124
function CreateTribeProcess ( )
{
% name = trim ( $ CreateTribeName ) ;
if ( strlen ( % name ) = = 0 )
{
MessageBoxOK ( "WARNING" , "Tribe Name cannot be blank." ) ;
return ;
}
% tag = $ CreateTribeTag ;
if ( strlen ( % tag ) = = 0 )
{
MessageBoxOK ( "WARNING" , "Tribe Tag cannot be blank." ) ;
return ;
}
% append = $ CreateTribeAppend ;
% recru = $ CreateTribeRecruiting ;
% info = CreateTribeDescription . getText ( ) ;
// send the creation request
tn_community_browser_user_createClan ( % tag , % append , % name , % info , % recru ) ;
2015-02-08 00:57:57 -05:00
}
// New ShellRadioProfile for TRIBES and BUDDYLIST
new GuiControlProfile ( ShellRedRadioProfile ) {
tab = "1" ;
canKeyFocus = "1" ;
modal = "1" ;
opaque = "0" ;
fillColor = "255 0 0 255" ;
fillColorHL = "255 255 255 255" ;
fillColorNA = "255 255 255 255" ;
border = "0" ;
borderColor = "0 0 0 255" ;
borderColorHL = "0 0 0 255" ;
borderColorNA = "0 0 0 255" ;
fontType = "Univers Condensed" ;
fontSize = "16" ;
fontColors [ 0 ] = "255 0 0 255" ;
fontColors [ 1 ] = "205 165 0 255" ;
fontColors [ 2 ] = "5 5 5 255" ;
fontColors [ 3 ] = "255 255 255 255" ;
fontColors [ 4 ] = "255 255 255 255" ;
fontColors [ 5 ] = "255 255 255 255" ;
fontColors [ 6 ] = "255 255 255 255" ;
fontColors [ 7 ] = "255 255 255 255" ;
fontColors [ 8 ] = "255 255 255 255" ;
fontColors [ 9 ] = "255 255 255 255" ;
fontColor = "255 0 0 255" ;
fontColorHL = "255 0 0 255" ;
fontColorNA = "5 5 5 255" ;
fontColorSEL = "255 255 255 255" ;
justify = "center" ;
textOffset = "0 0" ;
autoSizeWidth = "0" ;
autoSizeHeight = "0" ;
returnTab = "0" ;
numbersOnly = "0" ;
cursorColor = "0 0 0 255" ;
bitmap = "gui/shll_radio" ;
soundButtonDown = "sButtonDown" ;
soundButtonOver = "sButtonOver" ;
fixedExtent = "1" ;
} ;