[Setup] Product=RPUT Version=100 Archive=RPUT100.umod SrcPath=. MasterPath=.. Requires=UnrealTournamentRequirement Group=SetupGroup Group=RPUTGroup [UnrealTournamentRequirement] Product=UnrealTournament Version= [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=384,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=522,Flags=3) [RPUTGroup] File=(Src=System\RPUT.u,Size=34287) File=(Src=System\RPUT.int,Size=181) File=(Src=Help\RPUT100.txt,Size=2113) [Setup] LocalProduct=RPUT ReadMe=Help\RPUT100.txt SetupWindowTitle=Role-Playing UT AutoplayWindowTitle=RPUT Options ProductURL=http://www.cgocable.net/~alamar/UTDev/ VersionURL=http://www.cgocable.net/~alamar/UTDev/ Developer=Worlds of Wonder Games DeveloperURL=http://www.cgocable.net/~alamar/ [UnrealTournamentRequirement] LocalProduct=UnrealTournament ProductURL=http://www.unrealtournament.com/ VersionURL=http://unreal.epicgames.com/ Developer=Epic Games, Inc. DeveloperURL=http://www.epicgames.com/ *E@~d~[C{Y߂L0~NoneAddItemSetText GetValueCreateControlLevelEffect1LevelEffect2LevelEffect3FindInventoryType SetValueRPUTCoreSetFont SetRangeSystem SetLevelEngineSetSelectedIndexGetSelectedIndex RPUTPickupSetLevelEffects SetEditableUWindow PickupQueryGiveToSetNumericOnlyBotpackPlayPickupMessageSetNumericFloatHandlePickupQueryClientMessageSetMaxLengthCreatedPlayerJumpZScalingMeshLevelSpeedPercent VampPercentHeightPercent RegenMultPostBeginPlayReceiveLocalizedMessage MutatorsRPUTCfgMenuItemShieldPercentRPUTCfgMenuWindowRPUTPickupMessageRPUTCfgMenuClientClose MenuCaption MenuHelpExecute SetRespawn ScoreKillUMenuMaxDesireabilityPickupMessageMutatorTakeDamageModifyPlayer RemoteRoleut_jumpbootsCheckReplacement GetStringUDamagePickupViewMeshNotify PickupSoundDamagePercentIconRegisterDamageMutatorTimer WindowTitle XPPerLevel ClientClassHealth PlayerListJumpZ bNetOwnerOtherMsg LocationGame nextPawnOwner GroundSpeedOptionalObject PawnListbSuperRelevantVictimTempPlayerReplicationInfo MomentumRole InventoryRelatedPRI_2Killer TextBufferactualDamage HitLocation StrPropertyECObjectItem PlayerNameMutator LevelInfoRelatedPRI_1ActorUWindowEditControlTextureUWindowPulldownMenuItemUWindowSmallCloseButtonUWindowDialogClientWindowinstigatedByUWindowComboControlUWindowClientWindowUWindowRootWindowUWindowCheckboxUWindowDialogControlUWindowWindowUWindowPulldownMenuUWindowLabelControlCreateWindow DamageTypeAlignWinLeftEditBoxWidth WinHeight WinWidth OldLevelWinTopRootIcons bByParent CloseButtonPawnPickups I_Health GameInfoVector FunctionStructUMenuModMenuItem MenuItemSound UnrealShareClassTournamentPickupPickupMessagePlusVial UTHealthThePawnObjectPropertyConst ReturnValuei ScriptTextStructPropertyPickupXP DamageLevel HeightLevel VampLevel RegenLevel ShieldLevel SpeedLevelStaticSaveConfig bLeveledFloatPropertyTheXPXPListSwitchNamePropertyLodMeshPackageClassPropertyUWindowHSliderControl EFF_None EFF_Damage EFF_Height EFF_Regen EFF_Shield EFF_Speed EFF_VampBoolProperty IntPropertyByteProperty MaxHealth NewDamage VampDamageVampVal KillerXPOtherXP OtherLevelUWindowFramedWindow PawnLevelModEffTypeDisplayCheckDamageModSliderHeightModSliderShieldModSliderSpeedModSliderVampModSliderRegenModEditXPPerLevelEdit EffectLabelLevelEffect1ComboLevelEffect2ComboLevelEffect3CombotW - ::$6:"Xu69 }:"j@:"j@j@  *#"H"8]You earned 1 Experience Point@7$?BD;"w\ WRM'l9 }9 }9 }9 }Rù9 }9 }9 }9 }RùR9 }9 }9 }.;9 }9 }9 }:":":":":":"9 }j@j@:":"j@9 }:"9 }:":":"Rùj@j@9 }:":":":"Rùj@j@9 }:":":"Rùj@j@9 }:":"9 }:"9 }9 }9 }9 }9 }9 }R9 }9 }:":"9 }9 }:"9 }9 }9 }==Rù  C"&"%" '","$""""E@  Q +G ;(Nzg2"@> #@$@%@&@9@?@:XHUF0.,-<6 @ @45 @8 =1 OB/*K@LMb'yCoh-2R>vҠMo o   ITG]Role-Playing UT Optionsrs. S}tz =:"j@:"j@  m{/ETkn~|[$|[$|[$|[$|[$|[$|[$|[$|[$|[$RM'|[$RM'|[$RM'tRM'|[$RM'|[$RM'|[$RM'_4RM'_4RM'_4RM':"t:"|[$|[$|[$RM'|[$|[$|[$RM'ttttttttRM'|[$|[$|[$RM'|[$|[$|[$RM'|[$|[$|[$RM'tttttttt:"_4_4_4_4_4_4_4_4_4_4_4_4RM'_4_4_4_4_4_4_4_4_4_4_4RM'_4_4_4_4_4_4_4_4_4_4_4RM'  n7,7 G&P7'7', -?(~G-?' Z9K(bw*  bw*A.@/.Cw2*2  w*B.H.,dA B%,d?.?L>.D?L>./%0,d/, 0,~,2,2F,/#,dF00 ]3F1w*  w*.*%3,d.*, 3.*$33 Y: %5, +r!5;, a w*. >. a  w*.(!*>%a w*. %. a d!+&%j+,,(D??,(%-,9(&-,5(,-,6- %` &:` !,4` 0,<` ?,=` N,8` ],1` f?,d1&?,d?,d4"?,d!-UYou are now Level: w*w9pp is now Level S+ '&You are Level: pS+pp, Dam: S,d: pp%, Ht: S,d4"pp%, Rgn: S=$pp/s, Shd: S,d8%pp%, Spd: S,d1&ppp%, Vmp: S<#% '  w*.@:, .H8, .O4, .C<, .*=, .L1,  iD=$8Da/!<(,Da/!?(K$'  )i)a/!  .) .a  @)4' ) a 1p 6! 0u[5T%1, 'r!*1, !w*a/!>. ,E.bBw*w  .w*N. a   Bw*. E&. .  a  Bw*.-?'.' j 4@ RH?,?, `(K$a?'E q 3dclass RPUTCfgMenuItem expands UMenuModMenuItem; function Execute() { MenuItem.Owner.Root.CreateWindow( class'RPUTCfgMenuWindow', 10, 10, 300, 390 ); } k~+2l~ͷ;aGնmo  6 1]&Role-Playing UT Options2]Configure the RPUT OptionsHuclass RPUTCfgMenuClient expands UWindowDialogClientWindow; var UWindowCheckBox DisplayCheck; var UWindowHSliderControl DamageModSlider, HeightModSlider, ShieldModSlider, SpeedModSlider, VampModSlider; var UWindowEditControl RegenModEdit, XPPerLevelEdit; var UWindowLabelControl EffectLabel; var UWindowComboControl LevelEffect1Combo[9], LevelEffect2Combo[9], LevelEffect3Combo[9]; var UWindowSmallCloseButton CloseButton; function Created() { local int i; Super.Created(); DamageModSlider = UWindowHSliderControl( CreateControl( class'UWindowHSliderControl', 10, 10, 280, 1 )); DamageModSlider.SetText( "Damage Percentage:" ); DamageModSlider.SetRange( 5, 50, 5 ); DamageModSlider.SetValue( class'RPUT'.Default.DamagePercent, True ); HeightModSlider = UWindowHSliderControl( CreateControl( class'UWindowHSliderControl', 10, 30, 280, 1 )); HeightModSlider.SetText( "Height Percentage:" ); HeightModSlider.SetRange( 5, 50, 5 ); HeightModSlider.SetValue( class'RPUT'.Default.HeightPercent, True ); RegenModEdit = UWindowEditControl( CreateControl( class'UWindowEditControl', 160, 50, 130, 1 )); RegenModEdit.SetText( "Regen Multiplier" ); RegenModEdit.SetFont( F_Normal ); RegenModEdit.SetNumericOnly( True ); RegenModEdit.SetNumericFloat( False ); RegenModEdit.SetMaxLength( 2 ); RegenModEdit.Align = TA_Left; RegenModEdit.EditBoxWidth = 20; RegenModEdit.SetValue( String( class'RPUT'.Default.RegenMult )); ShieldModSlider = UWindowHSliderControl( CreateControl( class'UWindowHSliderControl', 10, 70, 280, 1 )); ShieldModSlider.SetText( "Shield Percentage:" ); ShieldModSlider.SetRange( 5, 50, 5 ); ShieldModSlider.SetValue( class'RPUT'.Default.ShieldPercent, True ); SpeedModSlider = UWindowHSliderControl( CreateControl( class'UWindowHSliderControl', 10, 90, 280, 1 )); SpeedModSlider.SetText( "Speed Percentage:" ); SpeedModSlider.SetRange( 5, 50, 5 ); SpeedModSlider.SetValue( class'RPUT'.Default.SpeedPercent, True ); VampModSlider = UWindowHSliderControl( CreateControl( class'UWindowHSliderControl', 10, 110, 280, 1 )); VampModSlider.SetText( "Vampiric Percentage:" ); VampModSlider.SetRange( 5, 50, 5 ); VampModSlider.SetValue( class'RPUT'.Default.VampPercent, True ); XPPerLevelEdit = UWindowEditControl( CreateControl( class'UWindowEditControl', 10, 130, 280, 1 )); XPPerLevelEdit.SetText( "Experience Points Needed Per Level" ); XPPerLevelEdit.SetFont( F_Normal ); XPPerLevelEdit.SetNumericOnly( True ); XPPerLevelEdit.SetNumericFloat( False ); XPPerLevelEdit.SetMaxLength( 2 ); XPPerLevelEdit.Align = TA_Left; XPPerLevelEdit.EditBoxWidth = 20; XPPerLevelEdit.SetValue( String( class'RPUTPickup'.Default.XPPerLevel )); EffectLabel = UWindowLabelControl( CreateControl( class'UWindowLabelControl', 10, 150, 280, 1 )); EffectLabel.SetText( "Bonus Effects By Level:" ); EffectLabel.SetFont( F_Normal ); for( i = 0; i < 9; i++ ) { LevelEffect1Combo[i] = UWindowComboControl( CreateControl( class'UWindowComboControl', 15, 170 + 20 * i, 100, 1 )); LevelEffect1Combo[i].EditBoxWidth = 60; LevelEffect1Combo[i].SetText( "Level " $ i + 2 ); LevelEffect1Combo[i].SetFont( F_Normal ); LevelEffect1Combo[i].SetEditable( False ); LevelEffect1Combo[i].AddItem( "None" ); LevelEffect1Combo[i].AddItem( "Damage" ); LevelEffect1Combo[i].AddItem( "Height" ); LevelEffect1Combo[i].AddItem( "Regen" ); LevelEffect1Combo[i].AddItem( "Shield" ); LevelEffect1Combo[i].AddItem( "Speed" ); LevelEffect1Combo[i].AddItem( "Vampiric" ); LevelEffect1Combo[i].SetSelectedIndex( class'RPUT'.Default.LevelEffect1[i] ); LevelEffect2Combo[i] = UWindowComboControl( CreateControl( class'UWindowComboControl', 140, 170 + 20 * i, 60, 1 )); LevelEffect2Combo[i].EditBoxWidth = 60; LevelEffect2Combo[i].SetFont( F_Normal ); LevelEffect2Combo[i].SetEditable( False ); LevelEffect2Combo[i].AddItem( "None" ); LevelEffect2Combo[i].AddItem( "Damage" ); LevelEffect2Combo[i].AddItem( "Height" ); LevelEffect2Combo[i].AddItem( "Regen" ); LevelEffect2Combo[i].AddItem( "Shield" ); LevelEffect2Combo[i].AddItem( "Speed" ); LevelEffect2Combo[i].AddItem( "Vampiric" ); LevelEffect2Combo[i].SetSelectedIndex( class'RPUT'.Default.LevelEffect2[i] ); LevelEffect3Combo[i] = UWindowComboControl( CreateControl( class'UWindowComboControl', 225, 170 + 20 * i, 60, 1 )); LevelEffect3Combo[i].EditBoxWidth = 60; LevelEffect3Combo[i].SetFont( F_Normal ); LevelEffect3Combo[i].SetEditable( False ); LevelEffect3Combo[i].AddItem( "None" ); LevelEffect3Combo[i].AddItem( "Damage" ); LevelEffect3Combo[i].AddItem( "Height" ); LevelEffect3Combo[i].AddItem( "Regen" ); LevelEffect3Combo[i].AddItem( "Shield" ); LevelEffect3Combo[i].AddItem( "Speed" ); LevelEffect3Combo[i].AddItem( "Vampiric" ); LevelEffect3Combo[i].SetSelectedIndex( class'RPUT'.Default.LevelEffect3[i] ); } CloseButton = UWindowSmallCloseButton( CreateWindow( class'UWindowSmallCloseButton', WinWidth - 48, WinHeight - 19, 48, 16 )); } function Close( Optional bool bByParent ) { local int i; class'RPUT'.Default.DamagePercent = DamageModSlider.GetValue(); class'RPUT'.Default.HeightPercent = HeightModSlider.GetValue(); class'RPUT'.Default.RegenMult = int( RegenModEdit.GetValue()); class'RPUT'.Default.ShieldPercent = ShieldModSlider.GetValue(); class'RPUT'.Default.SpeedPercent = SpeedModSlider.GetValue(); class'RPUT'.Default.VampPercent = VampModSlider.GetValue(); for( i = 0; i < 9; i++ ) { class'RPUT'.Default.LevelEffect1[i] = LevelEffect1Combo[i].GetSelectedIndex(); class'RPUT'.Default.LevelEffect2[i] = LevelEffect2Combo[i].GetSelectedIndex(); class'RPUT'.Default.LevelEffect3[i] = LevelEffect3Combo[i].GetSelectedIndex(); } class'RPUT'.Static.StaticSaveConfig(); class'RPUTPickup'.Default.XPPerLevel = int( XPPerLevelEdit.GetValue()); class'RPUTPickup'.Static.StaticSaveConfig(); Super.Close( bByParent ); } function Notify( UWindowDialogControl C, byte E ) { switch( E ) { case DE_Change: switch( C ) { case DisplayCheck: break; case DamageModSlider: DamageModSlider.SetText( "Damage Percentage: " $ int( DamageModSlider.GetValue()) $ "%" ); break; case HeightModSlider: HeightModSlider.SetText( "Height Percentage: " $ int( HeightModSlider.GetValue()) $ "%" ); break; case ShieldModSlider: ShieldModSlider.SetText( "Shield Percentage: " $ int( ShieldModSlider.GetValue()) $ "%" ); break; case SpeedModSlider: SpeedModSlider.SetText( "Speed Percentage: " $ int( SpeedModSlider.GetValue()) $ "%" ); break; case VampModSlider: VampModSlider.SetText( "Vampiric Percentage: " $ int( VampModSlider.GetValue()) $ "%" ); break; } break; } } ^J%#J) S%** Kclass RPUTCfgMenuWindow expands UWindowFramedWindow; function Created() { Super.Created(); WinLeft = ( Root.WinWidth - WinWidth ) / 2; WinTop = ( Root.WinHeight - WinHeight ) / 2; } f 5_ 2a class RPUTPickupMessage expands PickupMessagePlus; static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if( OptionalObject != None ) { if( Class( OptionalObject ) != None ) { if( Class( OptionalObject ).Default.XP == 1 ) return Class( OptionalObject ).Default.PickupMessage; else return "You earned " $ Class( OptionalObject ).Default.XP $ " Experience Points"; } else return Class( OptionalObject ).Default.PickupMessage; } } c>w*w*K &ppYou earned S  Experience Points  s// Role Playing UT class RPUTPickup expands TournamentPickup config( Mutators ); var int XP, Level, OldLevel; var int DamageLevel, HeightLevel, VampLevel, RegenLevel, ShieldLevel, SpeedLevel; var config int XPPerLevel; var bool bLeveled; replication { // Things the server should send to the client. reliable if( bNetOwner && ( Role == ROLE_Authority )) XP, Level; } function bool HandlePickupQuery( inventory Item ) { if( Item.IsA( 'RPUTPickup' )) { XP = XP + RPUTPickup( Item ).XP; SetLevel(); PlayPickupMessage( Pawn( Owner )); PlaySound( PickupSound,,2.5 ); Item.SetRespawn(); return True; } return Inventory.HandlePickupQuery( Item ); } function PlayPickupMessage( Pawn Other ) { Other.ReceiveLocalizedMessage( class'RPUTPickupMessage', 0, None, None, Self.Class ); } function SetLevel() { local int TheXP; TheXP = XP; OldLevel = Level; for( Level = 1; TheXP >= ( Level * XPPerLevel ); Level++ ) TheXP -= ( Level * XPPerLevel ); Level = Min( Level, 10 ); bLeveled = False; If( OldLevel != Level ) bLeveled = True; } eV  .  A AC?Damage Percentage:@HB, ?  '.  AAC?Height Percentage:@HB, ? "'.  CHBC?Regen Multiplier %'(,$A S $.  ABC?Shield Percentage:@HB, ? %'.  ABC?Speed Percentage:@HB, ? &'.  ABC?Vampiric Percentage:@HB, ? #'.  ACC?*Experience Points Needed Per Level %'(,$A S ';.  ACC?;Bonus Effects By Level:; %%^ ,  . pA*C?,B? pB pLevel S,  % ( None Damage Height Regen Shield Speed Vampiric  $9 .  C*C?,pB? pB  % ( None Damage Height Regen Shield Speed Vampiric  $5 . aC*C?,pB? pB  % ( None Damage Height Regen Shield Speed Vampiric  $6Q. ?,0?,@BA ~// Role Playing UT class RPUT expands Mutator; var Pawn PlayerList[32]; var int XPList[32]; var config int DamagePercent; var config int HeightPercent; var config int VampPercent; var config int RegenMult; var config int ShieldPercent; var config int SpeedPercent; const EFF_None = 0; const EFF_Damage = 1; const EFF_Height = 2; const EFF_Regen = 3; const EFF_Shield = 4; const EFF_Speed = 5; const EFF_Vamp = 6; var config int LevelEffect1[9], LevelEffect2[9], LevelEffect3[9]; var Inventory Item; var Pawn ThePawn; function PostBeginPlay() { SetTimer( 1, True ); Level.Game.RegisterDamageMutator( Self ); } function bool CheckReplacement( Actor Other, out byte bSuperRelevant ) { if( Other.IsA( 'UT_JumpBoots' )) return False; if( Other.IsA( 'UDamage' )) return False; bSuperRelevant = 0; return True; } function Timer() { local int MaxHealth; for( ThePawn = Level.PawnList; ThePawn != None; ThePawn = ThePawn.nextPawn ) { Item = ThePawn.FindInventoryType( class'RPUTPickup' ); if( Item != None ) { if( RPUTPickup( Item ).RegenLevel > 0 ) { MaxHealth = 100 + RPUTPickup( Item ).RegenLevel * 10; if( ThePawn.Health < MaxHealth ) { ThePawn.Health += RPUTPickup( Item ).RegenLevel * RegenMult; if( ThePawn.Health > MaxHealth ) ThePawn.Health = MaxHealth; } } } } } function MutatorTakeDamage( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation, out Vector Momentum, name DamageType ) { local int DamageLevel, ShieldLevel, VampLevel, NewDamage, Temp, VampDamage, VampVal; if( InstigatedBy != None ) { Item = InstigatedBy.FindInventoryType( class'RPUTPickup' ); if( Item != None ) { DamageLevel = RPUTPickup( Item ).DamageLevel; VampLevel = RPUTPickup( Item ).VampLevel; } } if( Victim != None ) { Item = Victim.FindInventoryType( class'RPUTPickup' ); if( Item != None ) ShieldLevel = RPUTPickup( Item ).ShieldLevel; } NewDamage = ( ActualDamage * ( 100 + ( DamageLevel * DamagePercent - ShieldLevel * ShieldPercent ))) / 100; if( NewDamage < ActualDamage * 0.2 ) NewDamage = ActualDamage * 0.2; ActualDamage = NewDamage; if( VampLevel > 0 ) { Temp = 100 + VampLevel * 10; if( InstigatedBy.Health < Temp ) { VampDamage = ActualDamage; if( VampDamage > Victim.Health ) VampDamage = Victim.Health; VampVal = ( VampDamage * ( VampLevel * VampPercent )) / 100; InstigatedBy.Health += VampVal; if( InstigatedBy.Health > Temp ) InstigatedBy.Health = Temp; } } // if( NextDamageMutator != None ) // NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); } function ModifyPlayer( Pawn Other ) { local int i; local Inventory Item; for( i = 0; i < 32; i++ ) if( PlayerList[i] == Other ) break; if( i < 32 ) { Item = Spawn( class'RPUTPickup', Other ); if( Item != None ) { RPUTPickup( Item ).XP = XPList[i]; RPUTPickup( Item ).SetLevel(); if( Level.Game.PickupQuery( Other, Item )) Item.GiveTo( Other ); else Item.Destroy(); } Item = Other.FindInventoryType( class'RPUTPickup' ); if( Item != None ) SetLevelEffects( Other, RPUTPickup( Item ).Level, False ); PlayerList[i] = None; XPList[i] = 0; } else { Item = Spawn( class'RPUTPickup', Other ); if( Item != None ) { RPUTPickup( Item ).XP = 0; RPUTPickup( Item ).SetLevel(); if( Level.Game.PickupQuery( Other, Item )) Item.GiveTo( Other ); else Item.Destroy(); } } // if( NextMutator != None ) // NextMutator.ModifyPlayer( Other ); Super.ModifyPlayer( Other ); } function ScoreKill( Pawn Killer, Pawn Other ) { local int i, KillerXP, OtherXP; local Inventory Item; local int OtherLevel; for( i = 0; i < 32; i++ ) if( PlayerList[i] == None ) break; if( i < 32 ) { PlayerList[i] = Other; for( Item = Other.Inventory; Item != None; Item = Item.Inventory ) { if( Item.IsA( 'RPUTPickup' )) { XPList[i] = RPUTPickup( Item ).XP / 2; OtherLevel = RPUTPickup( Item ).Level; } } } // If this is a Normal kill if( Killer != None && Killer != Other ) { Item = Killer.FindInventoryType( class'RPUTPickup' ); if( Item != None ) KillerXP = RPUTPickup( Item ).XP; Item = Spawn( class'RPUTPickup', , , Other.Location ); if( Item != None ) { RPUTPickup( Item ).XP = Max( OtherLevel, 1 ); RPUTPickup( Item ).Default.XP = RPUTPickup( Item ).XP; if( Level.Game.PickupQuery( Killer, Item )) { Item.GiveTo( Killer ); } else Item.Destroy(); Item = Killer.FindInventoryType( class'RPUTPickup' ); if( Item != None && RPUTPickup( Item ).bLeveled == True ) SetLevelEffects( Killer, RPUTPickup( Item ).Level, True ); } } // if( NextMutator != None ) // NextMutator.ScoreKill( Killer, Other ); Super.ScoreKill( Killer, Other ); } function SetLevelEffects( Pawn Victim, int PawnLevel, bool bLeveled ) { local int i; local int Mod, DamageLevel, ShieldLevel, HeightLevel, VampLevel, RegenLevel, SpeedLevel; local int EffType; local string Msg; Victim.Groundspeed = Victim.Default.Groundspeed; Victim.Jumpz = Victim.Default.Jumpz * Level.Game.PlayerJumpZScaling(); if( PawnLevel > 1 ) { for( i = 0; i < PawnLevel * 3 - 3; i++ ) { Mod = i % 3; if( Mod == 0 ) EffType = LevelEffect1[ i / 3 ]; else if( Mod == 1 ) EffType = LevelEffect2[ i / 3 ]; else if( Mod == 2 ) EffType = LevelEffect3[ i / 3 ]; switch( EffType ) { case EFF_None: break; case EFF_Damage: DamageLevel++; break; case EFF_Height: HeightLevel++; break; case EFF_Vamp: VampLevel++; break; case EFF_Regen: RegenLevel++; break; case EFF_Shield: ShieldLevel++; break; case EFF_Speed: SpeedLevel++; break; } } Victim.Groundspeed = ( Victim.Default.Groundspeed * ( 100 + SpeedLevel * SpeedPercent )) / 100; Victim.Jumpz = ( Victim.Default.Jumpz * ( 100 + HeightLevel * HeightPercent )) / 100 * Level.Game.PlayerJumpZScaling(); ; if( bLeveled ) { Msg = "You are now Level: "; for( ThePawn = Level.PawnList; ThePawn != None; ThePawn = ThePawn.nextPawn ) if( ThePawn != Victim ) ThePawn.ClientMessage( Victim.PlayerReplicationInfo.PlayerName $ " is now Level " $ PawnLevel, , True ); } else Msg = "You are Level: "; Msg = Msg $ PawnLevel; Msg = Msg $ ", Dam: " $ ( 100 + DamageLevel * DamagePercent ); Msg = Msg $ "%, Ht: " $ ( 100 + HeightLevel * HeightPercent ); Msg = Msg $ "%, Rgn: " $ ( RegenLevel * RegenMult ); Msg = Msg $ "/s, Shd: " $ ( 100 + ShieldLevel * ShieldPercent ); Msg = Msg $ "%, Spd: " $ ( 100 + SpeedLevel * SpeedPercent ); Msg = Msg $ "%, Vmp: " $ ( VampLevel * VampPercent ) $ "%"; Victim.ClientMessage( Msg, , True ); Item = Victim.FindInventoryType( class'RPUTPickup' ); if( Item != None ) { RPUTPickup( Item ).DamageLevel = Min( DamageLevel, 10 ); RPUTPickup( Item ).ShieldLevel = Min( ShieldLevel, 10 ); RPUTPickup( Item ).HeightLevel = Min( HeightLevel, 10 ); RPUTPickup( Item ).VampLevel = Min( VampLevel, 10 ); RPUTPickup( Item ).RegenLevel = Min( RegenLevel, 10 ); RPUTPickup( Item ).SpeedLevel = Min( SpeedLevel, 10 ); } } } vP0s5  D "D $J %D &D #D%U,  $9  $5  $6   'J -P |xIAM $I V e3ppDamage Percentage: SD% 3ppHeight Percentage: SD% 3ppShield Percentage: SD% 92ppSpeed Percentage: SD% 5ppVampiric Percentage: SD%   }A3M< R A ACC  o o o SH Ss Sz Sq SS SY Sm S] Sl Sj SM Sx Sf zJ o Y# Si SZ YQ S` SK Sy Sz SZ SO o6 iL iT SC Su Sq i Y] Sw i@ iA Sp YD SU Mg YR YV S{ M5 c8 Sc S^ NL M:nV St So M M0 {} i ST M{ M M Sy MF iC M( YS ch i~ {\ M= yM YB Sv YZ MA oR oEnJ ^P pS YP M3 S_ YS Sm M> oIQW M9iA7v\ j: tv:dgjKgxK[gEL\O RLX^LTPkL`xLTRFMTQTM\XaM#nM[N}MTNJNTMWNx\ dNTJpNTH}NTLJO[\ WOTIcOTKpOd_}O\\ JPd\VPYrcPsUqPdNPYa LQC XQKdQ& qQ% }Q' IR, UR$ aRH mR\E yR^gESdSS\D`SY~mS\F zSY} FTYc RTYY ^T\f jTYXvTZ| CU\b OU [U gUWj sU\e U KV\a WVTOcV\c pV\d |Vk HWh TWa`WYamWYe zWc FX]NRXdB `XY lXBxXeEY{eRYnN`Y]WmYf {Y{dGZd@TZbaZxF nZTGzZ-LG[.aS]/tt_\h hsTGtsfBt^[ hu9EtuF{yz:tt}Hh=Hphxs`xhrp][ wslC5EPs^Uvbs[ jR Hv(7~uul]4o}+qlT]4Su]5pR]4Vew{tCS]4l KS>Lw]4~CskAT {O]4JJT0WTdA kYbwTAYEY[^Y|ll3Jy[Public] Object=(Name=RPUT.RPUT,Class=Class,MetaClass=Engine.Mutator,Description="Role Playing UT") Object=(Name=RPUT.RPUTCfgMenuItem,Class=Class,MetaClass=UMenu.UMenuModMenuItem)Mod Name: RPUT Mod Type: Mutator Author: Nathan Davies(alamar@cgocable.net) Build: 100 Info: RPUT is a Level Based Mutator. This mutator is completely original except for the level aspect, taken from most RP games. This fully configurable mutator will work great in combination with 'any' other mutators, and 'any' game modes. The effect for a level are customizable and can be huge or tiny. Jump Boots and UDamage are removed because of Damage and Speed Effects. XP/Level: Every player has an XP Count and a Level. Killing other players scores the killer XP in the amount of the Victim's level. Dying halves a Player's XP. At either of these times, your Level is assigned, along with any effects those levels give. Up to three effects can be applied to any level from level 2 to level 10. Each effect can be added up to ten times effectively. Effects: The six effects are Damage, Height, Regen, Shield, Speed and Vampiric. The value of each is also fully configurable. A percentage can be applied to each of: Damage, Height, Shield and Speed, while a multiplier can be applied to Regen and Points. DamageMult = 100 + DamageLevel * DamagePercent Ex. DamageMult = 100 + 3 * 20 = 160% of damage is dealt. Height = DefaultHeight * ( 100 + HeightLevel * HeightPercent ) Ex. Height = DefaultHeight * ( 100 + 2 * 20 ) = DefaultHeight * 140% RegenPerSec = RegenLevel * RegenMult Ex. RegenPerSec = 3 * 2 = 6 / s ShieldMult = 100 - ShieldLevel * ShieldPercent Ex. ShieldMult = 100 - 2 * 20 = 60% of damage is taken. Speed = DefaultSpeed * ( 100 + SpeedLevel * SpeedPercent ) Ex. Speed = DefaultSpeed * ( 100 + 4 * 20 ) = DefaultSpeed * 180% VampAmt = Damage * ( VampLevel * VampPercent ) Ex. VampAmt = Damage * ( 2 * 10 ) = Damage * 20% Note: Each of the Percent calculations are also divided by 100 to get an actual Percent Value -== Version History ==- 100 - Initial public release System\Manifest.ini System\Manifest.int  System\RPUT.uSystem\RPUT.intHelp\RPUT100.txtAE