Always snap to grid
UE3:UT MDB GameRules (UT3)
From Unreal Wiki, The Unreal Engine Documentation Site
Contents
- Package:
- UT_GameDex
- Known custom subclasses:
- UT_MDB_GR_DamageConversion (UT3), UT_MDB_GR_Bloodlust (UT3), UT_MDB_GR_Replacer (UT3)
Code[edit]
//==================================================== // Class: UT_MDB_GameRules // Creation date: 15/01/2009 07:02 // Last Updated: 18/04/2010 13:28 // Contributors: 00zX //---------------------------------------------------- //Added CheckReplacement support to this, wrapped spawn like timers through Master Actor //Rewrote LinkedReplicationInfo functionality, now uses forloop and checks for none (will work for all members of list) //---------------------------------------------------- // Attribution-Noncommercial-Share Alike 3.0 Unported // http://creativecommons.org/licenses/by-nc-sa/3.0/ //==================================================== class UT_MDB_GameRules extends UT_MDB config(UT_MDB_GR); var UT_GR_Info MasterGameRules; var UT_MDB_GameRules NextGameRules; var UT_MDB_EventNotifier EventNotifier; var() array<UT_MDB_GameRules> GameRules; //Sub-GameRules, that means these could contain Subs and so on var() array<Info.KeyValuePair> GameRulesInfo; function GetServerDetails(out GameInfo.ServerResponseLine ServerState) { local Info.KeyValuePair tPair; local int i; foreach GameRulesInfo(tPair) { i = ServerState.ServerInfo.Length; ServerState.ServerInfo.Length = i+1; ServerState.ServerInfo[i].Key = tPair.Key; ServerState.ServerInfo[i].Value = tPair.Value; } } //Wormbo - it's a notification, so the various rules actors shouldn't be able to break the chain // for (GR = GetBaseAddonRules(); GR != None; GR = GR.GetNextAddonRules()) // { // GR.NotifyPlayerReleased(PRI, OldJail); // } //00zX - there are acouple instances where the chain needs to be broken in mine but I call back to super and snap it there //i can actually jump the chain in some instances because its well, more of a flower shape then a chain :P //Wormbo - if breaking the chain makes sense, I add a return value or out parameter for modifying the iteration behavior // for (GR = GetBaseAddonRules(); GR != None; GR = GR.GetNextAddonRules()) // { // bIsJailFightWeapon = byte(bDefaultJailFightWeapon); // if (GR.OverrideJailFightWeapon(WeaponClass, Player, bIsJailFightWeapon)) // return bool(bIsJailFightWeapon); // } //// /** Initialize Gamerules - mainly for logging */ function Init() { `logd("Rules Object Initialized: "$self.name,,'GameRules'); Master = MasterGameRules.GameExp; if(Master == None) `logd("Master Mutator not found!",,'GameRules');//Send Object to GC else NextGameRules = UT_MDB_GameExp(Master).GetNextGameRules(self); } event PostBeginPlay(); function bool PickupQuery(UTPawn Other, class<Inventory> ItemClass, Actor Pickup) { return (NextGameRules != none) ? NextGameRules.PickupQuery(Other, ItemClass, Pickup) : false; } function int ModifyDamageTaken(UT_GR_Info.EnemyInfo Enemy, optional pawn injured) { if(NextGameRules != None) return NextGameRules.ModifyDamageTaken(Enemy, injured); /* else return (Enemy.ModifiedDamage != 0 && Enemy.Damage != Enemy.ModifiedDamage) ? Enemy.ModifiedDamage : Enemy.Damage;*/ } function int ModifySelfDamage(UT_GR_Info.EnemyInfo Enemy) { return (NextGameRules != none) ? NextGameRules.ModifySelfDamage(Enemy) : Enemy.Damage; } //Notifications function NotifyDamageTaken(UT_GR_Info.EnemyInfo Enemy, optional pawn injured); function NotifySelfDamage(UT_GR_Info.EnemyInfo Enemy); function NotifyEnteredVehicle(Pawn P); function NotifyExitedVehicle(Pawn P); function NotifyController(Controller PC); //---- //Some of these might need access to gameinfo/worldinfo simulated function ModifyPawnInfo(UT_GR_Info.PawnInfo PInfo, optional bool bRemoveBonus=false, optional int GlobalMultiplier) { if(nextGameRules != none) nextGameRules.ModifyPawnInfo(PInfo, bRemoveBonus, GlobalMultiplier); switch (PInfo.Type) { case ET_Infantry: break; case ET_Hero: break; case ET_Vehicle: break; case ET_Rook: break; case ET_Knight: break; case ET_Bishop: break; case ET_Turret: break; } } //Could do this in GameInfo, call once for all controllers (and for each logged in?) simulated function ModifyController(Controller PC, optional bool bRemoveBonus=false, optional int GlobalMultiplier); //TODO: Obsolete? Depreciate! //NOTE: This will only allow modification of defaults, might prove to be useful though being static simulated function ModifyPawn(Pawn P, optional bool bRemoveBonus=false, optional int GlobalMultiplier); simulated function ModifyRook(UTHeroPawn R, optional bool bRemoveBonus=false, optional int GlobalMultiplier); simulated function ModifyVehicle(Vehicle V, optional bool bRemoveBonus=false, optional int GlobalMultiplier); simulated function ModifyWeapon(Weapon W, optional bool bRemoveBonus=false, optional int GlobalMultiplier); simulated function ModifyVehicleOnEnter(Vehicle V, optional bool bRemoveBonus=false, optional int GlobalMultiplier); static function ScoreKill(Controller Killer, Controller Killed, bool bOwnedByKiller, optional int GlobalMultiplier); //// //Replacement functions function bool CheckReplacement(Actor Other) { return true; } //// /** Added to allow Gametype hook to UTLinkedReplicationInfo. Similar to Info attachment method but instead links a replication info to the PRI.*/ //NOTE: Should be called from check replacement! final function AddReplicationInfo(Actor Other, class<UTLinkedReplicationInfo> LRIC) { local UTLinkedReplicationInfo LRI; local UTPlayerReplicationInfo PRI; if(LRIC != None) return; PRI = UTPlayerReplicationInfo(Other); for(LRI = PRI.CustomReplicationInfo; LRI == None; LRI = LRI.NextReplicationInfo) { if(LRI.Class == LRIC) break; //Spawn(LRIC, Other.Owner); LRI = Master.Spawn(LRIC, Other.Owner); `logd("PRI.CustomReplicationInfo: "$LRI,,'GameExp'); } }