PK at7scripts/PK at7scripts/autoexec/PK u93燮scripts/autoexec/TCMSserv.cs// #name = TCMS (The-Construct Master/Auth Serv) // #version = A.2 // #date = 19th November 2007 // #description = A script to query servers off the web. Also includes auth system (Requires forum account) // #category = Support // #author = Krash123 // #warrior = Krash123 // #email = krash@raptorhideout.com // #web = http://www.the-construct.net/forums/ // #readme = tcmsreadme.txt //================================================================ // This file should contain pretty much everything that's needed. // For now it's just the basics; Auth and such It's pretty // straightforward stuff in here, so it shouldn't need much // explanation... If any. Free apples. if ($Host::TCbeat == "") $Host::TCbeat = 15; //Time between beats in minutes. if ($Host::TCauth == "") $Host::TCauth = 0; //Enable the auth system. if ($Host::TCecho == "") $Host::TCecho = 1; //Enable the MS echoes. if ($Host::TConln == "") $Host::TConln = 0; //Enable the MS queries in online mode. package AuthTC { // Basic auth system. Queries forum database for matching users. //================================================================ function chatMessageAll( %sender, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ) { if(getSubStr(%a2, 0, 1) $= "/" && $Host::TCauth && !$PlayingOnline){ %cmd=stripChars(getWord(%a2,0),"/"); switch$ (%cmd){ case "auth": TCAuthClient(%sender,"code",getWords(%a2,1)); return; } } Parent::chatMessageAll( %sender, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ); } function CreateServer(%mission, %missionType) { Parent::CreateServer(%mission, %missionType); if (!$PlayingOnline) TCHeartbeat($Host::Port); } function DestroyServer() { if(isEventPending($TNBeat)) cancel($TNBeat); Parent::DestroyServer(); } function TCHeartBeat(%port) { if ($PlayingOnline) return; if(isEventPending($TCBeat)) cancel($TCBeat); %server = "www.the-construct.net:80"; %path = "/tc/list/add/" @ %port @"/"; if (!isObject(AuthTCbite)) %bite = new HTTPObject(AuthTCbite){}; else %bite = AuthTCbite; %bite.get(%server, %path); if ($Host::TCecho) echo("-- Sent heartbeat to TC Master. ("@%server@")"); $TCBeat = schedule($Host::TCbeat*60000,0,"TCHeartbeat",$Host::Port); } function TCAuthClient(%client,%type,%args) { if ($PlayingOnline) return; //Smack my server up %type = %type @ "/"; %script = "/auth/" @ %type; if (!%args){ %param = %client.getAddress(); %pos = strstr( %param, ":" ); %param = getSubStr( %param, %pos + 1, strlen(%param) ); %pos = strstr( %param, ":" ); %param = getSubStr( %param, 0, %pos ); } else %param = %args; %param = %param @"_"@ %client; %server = "www.the-construct.net:80"; %filename = %script @ %param @ "/"; if (!isObject(AuthTCbite)) %bite = new HTTPObject(AuthTCbite){}; else %bite = AuthTCbite; %bite.get(%server, %filename); } function AuthTCbite::onLine(%this, %line) { %client = getSubStr( getWord(%line,1), strstr( getWord(%line,1), "_" ) +1, strlen(getWord(%line,1))); switch$ (%line) { case 0: if ($Host::TCecho) echo(" - Server added to list."); case 1: if ($Host::TCecho) { echo(" - Server could not be contacted."); echo(" - Check your IP / port configuration."); } case 2: if ($Host::TCecho) echo(" - Server already found on list."); default: if (getWordCount(%line != 3)) return; if(%client.isAuthed) {messageclient(%client, 'MsgClient', "\c2You are already logged in to the TC Auth system."); return;} if(getSubStr(%line, 0, 3) $= "0 0"){ messageclient(%client, 'MsgClient', "\c2TC Auth did not find an account matching your request. If you have an account, please use \c1/auth code\c2 with your unique code. If not, you may need to register at \c1http://www.the-construct.net/forums/"); messageclient(%client, 'MsgClient', "\c2(Your code can be found at \c1http://www.the-construct.net/forums/ \c2after a post)"); return; } if(getSubStr(%line, 0, 3) $= "M M"){ messageclient(%client, 'MsgClient', "\c2TC Auth found multiple accounts matching your address. Please use \c1/auth [code]\c2 with your unique code to ident and retrieve status."); return; } %guid = getSubStr(getWord(%line,1), 0, strstr( getWord(%line,1), "_" ) ); if (%guid == 20 || %guid $= ""){ %guid = getSubStr(getWord(%line,0), 4, strlen(getWord(%line,0))); %guid = %guid + 100000; %guid = getSubStr(%guid, 1, strlen(%guid)); %guid = "0."@%guid; } if(getSubStr(%line, 0, 4) $= "Code") { TCRevoClient(%client,getWords(%line,2),%guid,1); messageclient(%client, 'MsgClient', "\c2TC Auth has logged you in as \c1"@getWords(%line,2)@"\c2 with GUID: \c1"@%guid@"."); } else { TCRevoClient(%client,getWords(%line,2),%guid,0); messageclient(%client, 'MsgClient', "\c2TC Auth has changed your name to \c1" @ getWords(%line,2) @"\c2. Please use \c1/auth [code]\c2 with your unique code to ident and retrieve status."); } } } function TCRevoClient(%client,%name,%guid,%iscode){ if ($PlayingOnline) return; %client.oldName = %client.name; %client.namebase = %name; %name = "\cp\c6" @ %name @ "\co"; MessageAll( 'MsgClientNameChanged', "", %client.name, %name, %client ); removeTaggedString(%client.name); %client.name = addTaggedString(%name); setTargetName(%client.target, %client.name); %client.isSmurf = ""; if (!%iscode){ return; } else { %client.guid = %guid; %client.isAuthed = true; %client.sendGuid = %client.guid; if ( !%client.isSuperAdmin ) { if ( isOnSuperAdminList( %client ) ) { %client.isAdmin = true; %client.isSuperAdmin = true; MessageAll( 'MsgSuperAdminPlayer', "", %client); } else if ( isOnAdminList( %client ) ) { %client.isAdmin = true; MessageAll( 'MsgAdminAdminPlayer', "", %client); } } } } function AuthTCbite::onConnectFailed() { echo("Could not connect to auth server. Blast!"); } function AuthTCbite::onDisconnect(%this) { %this.delete(); } function GameConnection::onConnect( %client, %name, %raceGender, %skin, %voice, %voicePitch ){ Parent::onConnect( %client, %name, %raceGender, %skin, %voice, %voicePitch ); if ($Host::TCauth && !$PlayingOnline) TCAuthClient(%client,"ip"); } function queryTCServers() { %filename = "/tc/list/TC-ServerList.cs"; %server = "www.the-construct.net:80"; if (!isObject(TCbite)) %bite = new HTTPObject(TCbite){}; else %bite = TCbite; %bite.get(%server, %filename); } function TCbite::onLine(%this, %line) { if ((strpos(%line,"$pref::GameServerCount") != -1)) { //Nothing for now. Maybe later. } else if ((strpos(%line,"//EOF") != -1)) { %this.disconnect(); } else { %server = getSubStr(getWord(%line,2), 1, strlen(getWord(%line,2))-3 ); querySingleServer( %server ); } } function TCbite::onConnectFailed() { echo("Could not connect to master server. Blast!"); } function TCbite::onDisconnect(%this) { %this.delete(); } function GMJ_Browser::clearList( %this ) { Parent::clearList( %this ); if ( %this.lastQuery $= "LanServers" || $Host::TConln) queryTCServers(); } }; if ( !isActivePackage(AuthTC) ) activatepackage (AuthTC); PK ht7 textures/PK ht7textures/texticons/PK Er7:..textures/texticons/TC_logo1.pngPNG  IHDR\6gAMAXG cHRMz%u0`:o_F.(IDATxb` 0 Fi F 2`F,h] ́(h e< `a `Cll0΁@jaf`˰(# &32 ,qrpp"a.n..C|<<06H H-''7٣tpEt2$rfՀH 93?/? 2AL= y Avg :x@"|=32"e Pf@ FUCUYZ6"[כ3_ h/&;y#Xo"3G?QDe@LR TkA386ՄDLhn xLggkmd`gbhndabifmnceg >H auT 5A5*&Z)rfЁ43%,C7rՎD\șTA39,:3'(y99:GzEyFx%Fz'%h$jioMTuAvjg 뇂܎<3:/J@JW- kjHXePj*k2(3jDPlaʈ.N 瓒YRSSQW]PWX_P ~qb|-HMvTDqJhp(͊ MAT X&.?l4X͜4(XV.PdD j:Tk3#Y ʌΎ^qLZ]dU-uY9myJ*=zڅSMm_4k}{z +Azj3A87&49$(T3}jj2(5APBAAU- i;AihQ5]a$ JؠPX ː*je jIYڰ0> T2c}vfWka^?8#VΜXS9g4-Ѷz~OOߺ˦y˗_~3s(#ոia!yn(A@[Pjj2( ,fPEdBTKAPd5A!AFPMjaLKinZ`2(3M ʌ3[WXg0#n[;oǎ޾wo|OϦŋ2w{Q6PS<ePPm ς5 M h4s("gJ.8T5eH ^ jj4 9C.2iލ^={OʌX3?.[zpr}Xՠ }@D 7FqA ?[99 heJP4xD=jIP DD TC"gHXs!Axz_e,PT)W.:yݻ.>{ׯ?9gPPo-63ADiPaԼU՞!䩕I=@D-SF@XA<+h1hbLO#}CAMV l0!a}H`-9Q6xM`352" oAI \(. *T@T48{š*4H}JXM ˔5]A+r@}IH+@Ah *e PT[.2q㍋Qv$6nX`'hT{zj~@t`H 9}T42% ˔f(S@ AEZl 4e2dgIPeJXƄaX]3gW< Av *H@Mo h4 # 9A4<1)4)L ꃁb9A m: :A`-9 !1H T{2,ذ&(=s˗tA Z˜-PP8FkGEL ˔>% ˔EP ԗl5[$/ ʌ 6H f Ԅeba8HaMu7/]?ʠ hʤ R-HAР&=͘ڭ 0Bjd6L,np_/iDN)2Uև_&~j֓ d%@s l3YC Q|7cЬӸ]t?R/* !E '7 0Sv@,GDRgG$[rQФqDAҟqYJCPZxʀ%IV(S> H)*Y8?)[Hjz=A={TI5u}}xmf ݛ a^.dtpk7GnR+5{WrJTG¾PjR/265m kev8u`iɭ])(w*4L*|=~o&0W@^0d{&URgW&E^ jdD d[=R1\JRLSIbܑEfޕT$QH bӥ:/`wO(zsGhs>عA wC', H.hD)я@??Ƅͥ"wU@a h ۹q^\ v_73*4M5EAK@> Pfج꼜ƽ۶TZ(,O ؠ#Rڒz F7c2/g0_m ;CA3&,(#Aw3l C BeN\L?~b˔6?4@MV ~3. evPF"A @@3&=(S叁ӡ hAf,( 6hTjEH,24 $e&P @މ-S<%eP-w᳸mlټ?5,4 0 *l@58(!_AGPA uHlfJEPpNf BGba}KВ5Ѐ(#>?j‚2>Y shy`'$gelϟZ*ʻA !@=l @fnez@-aasȣ F%&@+e2P  ˘XH'V@M@r;P"^5fJy$iqՖ9 AWP|0ߡ?@ ʌ q:\轚4p/ћ5SA _a 6o ->De@MOPՂչM2%쪫| @7H#_ +Ю͔44P3&%d,Ո$Ќ ZjڂjjFb}K1 bkKi L r hBTj@W1OQ~.-rjy.4 _ː"40 [j$%@-hP& vwjUX49Xf@HeNAMLP-kRFUA{![KpMFbgMࠁ,=$ȫ@v5 /|͔4Z@s)Thv\;f,lt5!T[jnPA57hXzDXkW.T/K/ȵ%zs9!*r F"CӁjШ+lm,IKPm[\K}b-Q4 W7e;@#Z4; w g6b@H4X!@ AK9abA󅠦/h4yli( Y 3Af$Uܿ}!޽'%ՠ=QaPs?ռ2F&pdL&)-@ΘvؚؚjK@t@pb}SϘq>rAs 7CPaeFOL F{4#Vk#>֖CЈGX2& Z;1aW $-uj*&,ꠥw/ۊ+S۱~?d{aO 7@gPz[`G [<>^S7CĴUU~ 5y͠|Tn" ЈG$6e3&o ma'hm-l(ᚿĵi3hN`MԖvmڸDThm9@xDO uPD:4"[V[i!"`;4 h@OCdP+c~kmA^ l`@: F<"vo G. eJP ʘez *5#A۠ $>֥we!AYgùP4B{ӠZvEo [0Z[=@~$ 4Ɍ-I9o1X2濦ҒNТvP/5Gkˡ h1`_˘{AA)AMZ82&֦,RĹ0d̾ym|s箃-lIA}SP4h FɋKA A@,nKXm\6| ,Sj:C6e/>m9AT#\<4z4o% Ztaw_nzeRPզ|da+`b-az@z+x:\h~B FiA# Y ʘ-hTAYwD4g [æf@ V̛_~؁_0rm Gkˡh1D>hPՐ ʜЌ Ma' l Gba}KPm :/eG=ש裵4,a\۽@&L  4 RMm5WaWAO 6 -@_lfBeO}dZ.hm9t@"(@_ ;4ԜՒhiA5̠%ҩC@5eE5;Q @'˔o_z-AAɂh́Q@<Q;ԗMaF`A&h,h D qP۱ȇ_hE9-zMՖZ[fv=)QxV3H΂AP1A('j΂j@]%[@5'|N,lݯ_֖>| Wm9khEH|&iyr7P%A#ZԌaЀ :S4M.;4j|C5l9j˅ӧ-2)&QTFTk2"*;v,.P3/PA>dVhP}(Aݛ7"rA}Qhm9@"$9|;I 1@&(eLP 6a +4 ڂ@+(sBO;_ ݼv ;9~JbC (BFga{$j7UE ʈ ʜ~&htas ?ݒʜL PyGLcz륱 ŋב;H@6O:Z[/@ `[loD5A}Mm)I ʜ AP@TÁ2#( 6(Ârܺ/?-άBk-Q,5QT-(ざnceJ؂@]  h 4eJP>NE9̟1}h4aWa9` F>e*bqPsY@MVP*eNP-8ɃjWPFe>P&5_AB EA @sbmwo޸sh#IcAr)A-VjRL9|@䀷Ƈ&pGI9+j֡]#L"'0YVW 0p8Vmqlp7A/:) >,*~~i 0]+b~R-=)kքKci͓0!(ˤN'W"/Q*sFTdTlK,(kMؼ&?5iA5h@(Alḣ-:9AB ʀHTA((3jHP?Է ʔ&5(SFaA27 (ػc@?oAZi}diop T)Ь-,@Jkiz X= y&y{@xT|p~\K"&'re"P|@@"8PՔL 6H $85Au 3`CּeP68یA e΁Qع@øŃCBDǺS &wz8w/ |&'Uv+hی299_1 CѓxkCEߔvɩ~T=  |%<_?ԖlB p&+=lعc@GCBqM}sAG(%T(DW0ro *ap^-zphl0%;wlQt qAl,t]b>u™im2cbR| րH?)cn&[y@JIk}U:Y]VM1?j 0eAlm,~/kimYJ){ P3Z*`O)$l4ȄC.0OAD^? oeVQD9f#5'a'2(PIAPPM ʨ((cТP&v-FAnʎ1?QD%Df `'ze PFjL IaA OSy H$NA5WAMeP52`tTvETjOlT2(#FqA 4xd pZ1HvfH=,C|@Gה#C(@pePPF]ˤ@ YA@#HX&RˌKŗ)G34hlAa}PX&դ ˬ t$ /C_3;oE482(3z&դPX d p0LirEt2(z&M gVPլ0rF$e@(h I3*2mFϼqt4`02,R 3w< EL( ("`4,@hAhQ0@Q0 !Q4 F 4F( F((`E` B@hAhQ0@ROra@u 徇 h@@˟k Iu ҇l1OALX?6w㘘0V@D9? 9ȃĺR"22%f |Y [@ze(t;21fl| =<2 \z7@Fj%P& dG3H(s cb3&Bn%Rl^>0@͌ _ V F&T!ZdLb?l5 DH]_-p1A͘†dPS?1Av[܆M?2&@FBDπLV2BNlrj^l *8`dLlO/b=]z!F?(ɘArQ͈D6 ?@՜Dz"r _$G .Dt':b2&z‡IHp1刍cd@ @d#J3&4 >s#Ԝf>ğ1Ș21p>aMurFNƄ%zPr @ @d#J3&!bFeA1AMPD| ՚FAMtbȘa  FfX >s#YpfLX=AD7>Kߨ1AnW8 @d#J3&9018z! ZeLPU'̇mG|9t  #!chgL2&H qfᚷ7r3B^}"=Gel43&zSdu裐fLjP6BjA^[f/@_HAn$'Q+ch$dLLXöbg|qB.3@A86 J O1xE3ao+|`Y`@d1AP ȿ,6 J ئ-] W'[@Lt?ѫ Ƕ\_`VTZ%ByL" IP0.b'4GH$)DL `rԚ ȿCl1l42&Ehg P{6?!/NHݿH팉2PI(n@vSQ#~`Z F}-(C((Mmr3Xp%p!d@@Q0 !Q4 F 4F( Fd. lu]4 o Q)6 a' *'fԕ`0,,hm@Z@`xM$ɚq VN4UsNX?(-!0p#~6扇+ȳ`5p@` ]=3nɪ/2$ܺ F\|qӱ\O3N3P>i<3`؝Zل.c@H3ӁA`5"l5 :|5&`B_k- &7cw`-!3`+pUcRk }D sIo] Ӡ-mܘI?K*E,8_k?ik#7A51c']Lذ} L5IS&c1D^ Folder Options and click on the view tab. If you scroll down you should see the "Hide extensions for known file types" box. Make sure this is unchecked and click OK. 2 - Start up Tribes 2 in offline mode. Your shortcut should be similar to: "C:\Dynamix\Tribes2\GameData\Tribes2.exe" -nologin or "C:\Dynamix\Tribes2\GameData\Tribes2.exe" -nologin -mod classic (Substitute classic for the mod of your choice) 3 - Switch to your game tab and press "Refresh List". The game should then attempt to add the servers. You may get a bit of slowdown and have to wait a short time if a dead server is still on the list, but a server that fails the request over 10 times is removed from the list entirely. 4 - Join a server. Note: If the server is running with TCAuth mode enabled and you have a forum user, you should automatically be assigned a name. To retrieve a unique ID (useful for construction servers and places where you want to maintain a list), insert your auth code with "/auth 122234" (where 122234 is your secret code - found in the upper right info box of the forums after a post). Hosting: A modified executable is required for offline users to connect without being rejected by the subnet IP check. You can find this for windows in the following thread: http://www.the-construct.net/forums/showthread.php?t=251 Authentication: View this thread: http://www.the-construct.net/forums/showthread.php?t=265 Additional config: $Host::TCbeat = 15; //The time between heartbeats sent to the master in mins. Could really drop this down - Default is 15 (minutes) $Host::TCauth = 0; //Enable the auth system (http://www.the-construct.net/forums/showthread.php?t=265) - Default is 0 (off) $Host::TCecho = 0; //Enable console echos of heartbeat messages and such. - Default is 0 (off) $Host::TConln = 0; //Enable query of TC servers in online mode. Really a client pref, but grouped with these. - Default is 0 (off) PK at7scripts/PK at7&scripts/autoexec/PK u93燮 Uscripts/autoexec/TCMSserv.csPK ht7 =textures/PK ht7dtextures/texticons/PK Er7:.. textures/texticons/TC_logo1.pngPK ]N8t  oNtcmsreadme.txtPK8Y