[Setup] Product=CTFDoTheRightThing Version=100 Archive=CTFDoTheRightThing.umod SrcPath=. MasterPath=.. Requires=UnrealTournamentRequirement Group=SetupGroup Group=umodINIGroup Group=CTFDoTheRightThingGroup Group=umodIncludeFilesGroup [UnrealTournamentRequirement] Product=UnrealTournament Version= [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=749,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=546,Flags=3) [umodINIGroup] Ini=System\Unreal.ini,Engine.GameEngine.ServerPackages=CTFDoTheRightThing Ini=System\UnrealTournament.ini,Engine.GameEngine.ServerPackages=CTFDoTheRightThing [CTFDoTheRightThingGroup] File=(Src=System\CTFDoTheRightThing.int,Size=138) File=(Src=System\CTFDoTheRightThing.u,Size=7481) [umodIncludeFilesGroup] File=(Src=CTFDoTheRightThing\Help\CTFDoTheRightThing.txt,Size=3777) [Setup] LocalProduct=CTFDoTheRightThing ReadMe=CTFDoTheRightThing\Help\CTFDoTheRightThing.txt SetupWindowTitle=CTFDoTheRightThing AutoplayWindowTitle=CTFDoTheRightThing Options ProductURL=mailto:hollschris@sprynet.com VersionURL=mailto:hollschris@sprynet.com Developer=*Bubba DeveloperURL=mailto:hollschris@sprynet.com [UnrealTournamentRequirement] LocalProduct=UnrealTournament ProductURL=http://www.unrealtournament.com/ VersionURL=http://unreal.epicgames.com/ Developer=Epic Games, Inc. DeveloperURL=http://www.epicgames.com/ [Public] Object=(Name=CTFDoTheRightThing.CTFDoTheRightThingMutator,Class=Class,MetaClass=Engine.Mutator,Description="CTFDoTheRightThing")Áƒ*žEI@' *ŕ@Ń՘SÔÓ‚v€­En'INoneCTFDoTheRightThingCoreSystemEngine ScoreKillBroadcastLocalizedMessage CheckTargetBotpack GetStringdoTheWrongThingStringCTFDoTheWrongThingMessageCTFDoTheRightThingMutatorPostBeginPlaydoTheRightThingString PlayerPawnBotCTFDoTheRightThingMessageClassPackageSwitchStructActor InventoryPawnWeaponMutatorPlayerReplicationInfo TextBuffer ReturnValue ScriptTextYZObjectStructPropertyObjectProperty ByteProperty LocalMessage bIsPlayer StrProperty FunctionX RelatedPRI_2Killer PlayerNameEnemyScoreHasFlagbestAimStartOwner RelatedPRI_1OptionalObject NextMutatorRotator PawnOwner FireOffset ViewRotation bestDistFloatPropertyETarget BoolPropertyCriticalEventPlusAimRotdiff IntPropertyCalcDrawOffset LocationVectorTTTheKilledGuysTargetOtherTeam€ƒ€ƒ €ƒƒ$ƒ ˆˆ%„‰ˆ„ˆ ‰" ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙2X9؞plé„.ę;ű† ]65fragged a teammate trying to stop the enemy carrier!€@!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙2áFŽŔplé„.ę;ű†]defended the flag carrier!€@Z'//============================================================================= // CTFDoTheRightThingMutator // author *Bubba //============================================================================= class CTFDoTheRightThingMutator expands Mutator; function PostBeginPlay() { Super.PostBeginPlay(); } function ScoreKill(pawn Killer, pawn Other) { local Actor TT; local Pawn TheKilledGuysTarget; // If someone kills someone else (not a suicide) if( (Killer != Other) && (Killer != None) && Killer.bIsPlayer && Other.bIsPlayer ) { // Determine the victims target. TT = checkTarget(Other); // cast results from check target to a pawn TheKilledGuysTarget = Pawn(TT); // If the person just killed was targeting anyone and the target wasn't the killer. if ( TheKilledGuysTarget != None && TheKilledGuysTarget != Killer) { //Determine if the killed player was viewing the flag carrier if ( TheKilledGuysTarget.PlayerReplicationInfo.HasFlag != None ) { // If the killer killed an enemy if (Killer.PlayerReplicationInfo.Team != Other.PlayerReplicationInfo.Team) { //increment the Killers socre if he killed an enemy Killer.PlayerReplicationInfo.Score += 2; // Announce to all players that the carrier was defended. BroadcastLocalizedMessage( class'CTFDoTheRightThingMessage', 0, Killer.PlayerReplicationInfo, None, None ); } else { //decrement the Killers socre if he killed a friend trying to kill the carrier Killer.PlayerReplicationInfo.Score -= 5; // Announce to all players that the TK occurred. BroadcastLocalizedMessage( class'CTFDoTheWrongThingMessage', 0, Killer.PlayerReplicationInfo, None, None ); } } } } if ( NextMutator != None ) { NextMutator.ScoreKill(Killer, Other); } } function Actor CheckTarget(Pawn Owner) { local Actor ETarget; local Vector Start, X,Y,Z; local float bestDist, bestAim; local Pawn PawnOwner; local rotator AimRot; local int diff; PawnOwner = Owner; if ( Owner.IsA('PlayerPawn') || Owner.IsA('Bot') ) { GetAxes(PawnOwner.ViewRotation,X,Y,Z); Start = Owner.Location + Owner.Inventory.CalcDrawOffset() + Owner.Weapon.FireOffset.X * X + Owner.Weapon.FireOffset.Y * Y + Owner.Weapon.FireOffset.Z * Z; bestAim = 0.93; ETarget = PawnOwner.PickTarget(bestAim, bestDist, X, Start); } else if ( PawnOwner.Enemy == None ) { return None; } Return ETarget; }  $ y //============================================================================= // doTheWrongThingmessage // author *Bubba //============================================================================= class CTFDoTheWrongThingMessage extends CriticalEventPlus; var localized string doTheWrongThingString; static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == None) { return ""; } return RelatedPRI_1.PlayerName@Default.doTheWrongThingString; } ŚÝlF‚‚‚w w*-–-– .ƒ F‚w* wFw‡§*›:‡—:‡—¸‡ž?, %‡**Fš‡ž?, %‡**jwš*𠀉‹ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙!B2ă‹l€¤ăƒ9ë }ƒ9ë }ƒ9ë }ƒ9ë }ƒ9ë }›Ěj@ك9ë }Оtůƒ9ë }Оtůƒ9ë }Оtůƒ9ë }ƒ9ë }ƒ9ë }ƒ9ë }ƒ9ë }„.ę;űƒ9ë }„.ę;űƒ9ë }„.ę;űƒ9ë }„.ę;űƒ9ë }ƒ9ë }„.ę;űƒ9ë }‹l€¤ă†Ÿ &r *¨ œ  FC%„a/!a/!ĺ Ľ  ×××× Ą  ¤Ő6Ş“ ’Ő6¨“ ’ Ő6Š“ ’{n?b ;;rŁ** „ †€@y //============================================================================= // doTheRightThingmessage // author *Bubba //============================================================================= class CTFDoTheRightThingMessage extends CriticalEventPlus; var localized string doTheRightThingString; static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == None) { return ""; } return RelatedPRI_1.PlayerName@Default.doTheRightThingString; } Ÿ# &r *¨ œ  ˘&„'†€@˙˙˙˙˙˙˙˙ţ˙˙˙#ţ˙˙˙!#ý˙˙˙ú˙˙˙D˙˙˙˙˙˙˙˙˙˙˙˙ţ˙˙˙"ţ˙˙˙(ţ˙˙˙'đ˙˙˙>ţ˙˙˙"ö˙˙˙8#ý˙˙˙ţ˙˙˙ţ˙˙˙A=ý˙˙˙&$ü˙˙˙Hţ˙˙˙;˙˙˙˙%#ő˙˙˙5˙˙˙˙'ü˙˙˙,(÷˙˙˙ ;ü˙˙˙.(ç˙˙˙ #÷˙˙˙"÷˙˙˙Cú˙˙˙6#ý˙˙˙-(ĺ˙˙˙B"ý˙˙˙9(ő˙˙˙#ü˙˙˙/;ř˙˙˙;ř˙˙˙ ;ř˙˙˙)…+ }…2 J…G W…F d…7 qŒ) ~Œ  K˜0 X…"3 d…E qŒ1 ~…3 KŒ X…< e Xr˜: JŽ  V~bŽ `‘4e'l QB‘4D oBŚAsL… tP‹ ZAQ•@ [VŸ 3gV• ZW^fW…* D[…4 Q[Ž ^[‘4D j[Ÿ 3ne•" afŒ? mf…"* zf…"4 GgŽ" Tg+=============================+ | CTF Do The Right Thing v1.0 | | By: *Bubba | | Build Time: 15 Hours | | Date: 1-25-2000 | +=============================+ What is "Do The Right Thing v1.0"? Do The Right Thing is a general mutator for UnrealTournament that adds a new message and a scoring bonus when a player kills someone whom is aiming at his or her team's flag carrier. Why? This mutator is designed to encourage protecting the flag carrier by awarding points to those individuals who frag opponents targeting their flag carrier. What types of messages are there? When the flag carrier is protected, a message is sent to all players announcing that "Player X defended the flag carrier". This mod also frowns on those who TK someone trying to frag the opposing flag carrier. "Player X fragged a teammate trying to stop the enemy carrier!" Cool, does it effect game play? Yes. It adds a new opportunity to score points in CTF. Other than that, game play is not effected. How is scoring modified? The person who fragged the enemy aiming at the flag carrier gets 2 bonus points. This is in addition to the 1 point for the frag. Almost forgot. . . you lose five additional points for fragging your teammate if he or she is targeting the opposing flag carrier. So don't TK. Why do you call it "CTF Do The Right Thing"? First of all, the CTF designates that this is a CTF mutation. When playing CTF you have to help the poor guy or gal running with the flag. In pick up matches there is absolutely no motivation for anyone to do this, where as there is plenty of motivation to sit at the base and defend the flag. Hopefully, this may encourage a bit more teamplay. How do I install it? Well, it should already be installed. Just start a game and select the CTFDoTheRightThing mutator. I'm having trouble getting CTFDoTheRightThing to run on my server, what's wrong? The UMod file should have set things up automatically, but if something went wrong during the install, you can try this: Use notepad or whatever text editor you like, and open up your UnrealTournament.ini and your Unreal.ini files (found in your UnrealTournament/System directory). Once it is open find the tag that reads [Engine.GameEngine], then add this line of code directly below it: ServerPackages=CTFDoTheRightThing That should do it! I found a bug/glitch/messup, where do I report it? You can email me at my address, hollschris@sprynet.com. I really enjoy this mutation, how do I contact the developer? You can email me at my address, hollschris@sprynet.com. Official Legal Stuff: This MOD is not affiliated with Epic/GT interactive in any way, and its not their problem if it doesn't work. This mutation is not to be distributed as part of any commercial product without the author's permission. You can use this mod for any personal or non-commercial uses, as long as you give the author credit for developing it. Please don't make me break out my lawyer. :) Thanks to: My Wife: For being a good sport about my late nights. Epic Megagames: For making Unreal/UT. ^Soul^ For pointing me in the right direction when it didn't work on the net. You are a guru. CORV For the infinite patience, testing help and suffering through the downloading of Yoshi. CORV represents all that is good in community. Necron_99: For the readme file template. Pain Supplier For the testing and recruiting of testers help. BTW, He runs a great site. http://www.unreality.org/painfuldetail/ Eclypse For the testing help. Acadian For the testing help. And last but not least. . . anyone who actually downloaded this mod. Copyright *Bubba 2000 System\Manifest.inixSystem\Manifest.intx"System\CTFDoTheRightThing.intšŠSystem\CTFDoTheRightThing.u$9/CTFDoTheRightThing\Help\CTFDoTheRightThing.txt]#ÁŁĹăŸ23`@Ú[