1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Two Factor Authentication is now available on BeyondUnreal Forums. To configure it, visit your Profile and look for the "Two Step Verification" option on the left side. We can send codes via email (may be slower) or you can set up any TOTP Authenticator app on your phone (Authy, Google Authenticator, etc) to deliver codes. It is highly recommended that you configure this to keep your account safe.

SmartDM for UT99

Discussion in 'Dev Team' started by ProAsm, Jul 12, 2013.

  1. The_Cowboy

    The_Cowboy Member

    Joined:
    Jun 18, 2010
    Messages:
    61
    Likes Received:
    0
    Hehe not to put any load, but I found this funky article. Might interest you (only few code lines) in adding tool tips for configurable scoreboard settings in menu. Tooltips
     
  2. ProAsm

    ProAsm Active Member

    Joined:
    Mar 20, 2002
    Messages:
    2,108
    Likes Received:
    0
    Basically, yes.
    It was the only way I can fit 16 players onto the screen using the common 1024x768 and 1280x800 resolutions.

    Bit of a mess atm, but I'll mail you a copy to check out to see what you think.

    Interesting on the Tooltips :)
     
  3. ProAsm

    ProAsm Active Member

    Joined:
    Mar 20, 2002
    Messages:
    2,108
    Likes Received:
    0
    LOL, I now remember those ToolTips which uses the SetHelpText for each component.
    This only seems to work with the UT Main Menu as it has the Statusbar at the bottom where the tooltips are written to.
     
  4. The_Cowboy

    The_Cowboy Member

    Joined:
    Jun 18, 2010
    Messages:
    61
    Likes Received:
    0
    oh. I thought completely different :lol:.
     
  5. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    changed public post to here
     
    Last edited: Jul 23, 2013
  6. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    also with slim-scoreboard is that toggled through f3? like normal/slim or through menu? or as standard.
     
    Last edited: Jul 23, 2013
  7. ProAsm

    ProAsm Active Member

    Joined:
    Mar 20, 2002
    Messages:
    2,108
    Likes Received:
    0
    The slim scoreboard is only set via the menu.
    It's the only way if a player wants to make it permanent.
    Toggling it through F3 you cannot set it as permanent.
    The chances of it being used much is small because as you said earlier, you very rarely find more than 10 to 12 players on a DM or TDM server.
     
  8. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    is good to have the option though and also to utilize the !menu imo.
    *the assumption is that once NewNet is complete that more players will come back.

    just an off thought but alot of players are used to !r / !b / !p / !s / !v
    alternatively !red / !blue / !play / !spec / !vote (mutate bdbmapvote votemenu)
    ^this is incorporated into ATB already but Iam thinking of server's that don't use teamSwitcher/ATB
    perhaps could offer this option via Chat Input Mayb offer also !smrtdm or !sm to open the menu.
    just put your mind into the state of a new player to unreal (one who does not know 'mutate' cmds)
    that is where say !spec etc comes from. Useability from a client perspective.

    Like this;

    Code:
    // Do we care if it's a teamgame?  Maybe they just want to change skin colour!
    function bool CheckMessage(String Msg, Pawn Sender) {
     if (bEnablePlayerCommands) {
      if (bEnableTeamSwitchCommands && Sender.IsA('PlayerPawn') && !Sender.IsA('Spectator') && (TeamGamePlus(Level.Game)!=None && !TeamGamePlus(Level.Game).bNoTeamChanges)) {
       if (Msg ~= "!RED" || Msg ~= "!R") {
        ChangePlayerToTeam(PlayerPawn(Sender),0,false);
        BroadcastTeamStrengths();
       }
       if (Msg ~= "!BLUE" || Msg ~= "!B") {
        ChangePlayerToTeam(PlayerPawn(Sender),1,false);
        BroadcastTeamStrengths();
       }
       if (Msg ~= "!GREEN" || Msg ~= "!G") {
        ChangePlayerToTeam(PlayerPawn(Sender),2,false);
        BroadcastTeamStrengths();
       }
       if (Msg ~= "!GOLD" || Msg ~= "!YELLOW" || Msg ~= "!Y") {
        ChangePlayerToTeam(PlayerPawn(Sender),3,false);
        BroadcastTeamStrengths();
       }
      }
      if (Sender.IsA('PlayerPawn') && !Sender.IsA('Spectator')) {
       if (Msg ~= "!SPEC" || Msg ~= "!SPECTATE" || Msg ~= "!S") {
        PlayerPawn(Sender).PreClientTravel(); // not sure if this is actually needed
        PlayerPawn(Sender).ClientTravel("?OverrideClass=Botpack.CHSpectator",TRAVEL_Relative, False);
       }
      }
      if (Sender.IsA('Spectator')) {
       if (Msg ~= "!PLAY" || Msg ~= "!P") {
        PlayerPawn(Sender).PreClientTravel(); // not sure if this is actually needed
        PlayerPawn(Sender).ClientTravel("?OverrideClass=",TRAVEL_Relative, False);
       }
      }
      if (Msg ~= "!VOTE" || Msg ~= "!MAPVOTE" || Msg ~= "!V") {
       Level.Game.BaseMutator.Mutate("bdbmapvote votemenu",PlayerPawn(Sender));
      }
      if (Msg ~= "!CTFSTATS" || Msg ~= "!CTF") {
       Level.Game.BaseMutator.Mutate("smartctf stats",PlayerPawn(Sender));
      }
      if (Msg ~= "!STATS") {
       Level.Game.BaseMutator.Mutate("smartctf stats",PlayerPawn(Sender));
       ShowStrengthsTo(PlayerPawn(Sender),True);
      }
       if (Msg ~= "!STRENGTHS") {
        ShowStrengthsTo(PlayerPawn(Sender),False);
       }
       if ( Msg ~= "!WHO" && (bAllowUsersToListFakes || PlayerPawn(Sender).bAdmin) ) {
        ListFakesTo(PlayerPawn(Sender));
       }
      if (Sender.IsA('PlayerPawn')) {
       if (Msg ~= "!WEBSITE" || Msg ~= "!W" || Msg ~= "!WEB" || Msg ~= "!WWW") {
        if (WebsiteURL != "") {
         SendPlayerToUrl(PlayerPawn(Sender),WebsiteURL);
        }
       }
       if (Msg ~= "!FORUM") {
        if (ForumURL != "") {
         SendPlayerToUrl(PlayerPawn(Sender),ForumURL);
        }
       }
      }
      if (Sender.IsA('PlayerPawn')) {
       if (Msg ~= "!TS" || Msg ~= "!TEAMSPEAK") {
        SendPlayerToTeamspeak(PlayerPawn(Sender));
       }
       if (Msg ~= "!GETTS" || Msg ~= "!GetTeamSpeak") {
        SendPlayerToUrl(PlayerPawn(Sender),"http://www.teamspeak.com/");
       }
      }
     }
    
    
    some parts are insignificant..

    also I guess if you wanted to make it .. usable for any voting system you could have an .ini entry;

    MapVoteMutLine="bdbmapvote votemenu"

    Code:
      if (Msg ~= "!VOTE" || Msg ~= "!MAPVOTE" || Msg ~= "!V") {
       Level.Game.BaseMutator.Mutate([B]$MapVoteMutLine[/B],PlayerPawn(Sender));
    maybe a check to see if other mod is already installed for this to avoid conflicts.. or something like this;
    bUseChatCmds=False ; if using other mod which uses chat commands then set to false.
     
    Last edited: Jul 23, 2013
  9. ProAsm

    ProAsm Active Member

    Joined:
    Mar 20, 2002
    Messages:
    2,108
    Likes Received:
    0
    Yes I've seen players with these !s commands etc but for that we can make a small dedicated mutator, like UTBots that runs serverside only etc with no serverpackages etc.
    Doing it that way we can modify it at will without changing the name as you will never get a version mismatch.
    I looked through the ATB code and no-where can I find anything to do with ! commands, maybe it's in the balanced teams mod.
     
  10. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    first instance at line #1353;

    Code:
     if ( args[0]~="HELP" ) {
      if (localPass == "")
       pass_if_needed = "";
      else
       pass_if_needed = " [password]";
      if (bEnablePlayerCommands) {
       Sender.ClientMessage("AutoTeamBalance"$ "1.4.9v" $" commands: teams !teams !red !blue !spec !play !vote !stats");
      } else {
       Sender.ClientMessage("AutoTeamBalance"$ "1.4.9v" $" commands: teams !teams");
      }
      Sender.ClientMessage("AutoTeamBalance "$ "1.4.9v" $" mutate commands: mutate [atb] ( strengths [extra] | listmuts | listfakes )");
      if (localPass == "") {
       Sender.ClientMessage("AutoTeamBalance "$ "1.4.9v" $" semi-admin console commands:");
       Sender.ClientMessage("    mutate [atb] ( teams | forceteams | tored <p> | toblue <p> | switch <p> <p> | flash <msg> | warn <p> <msg> | kick <p> <msg> | kickban <p> <msg> ");
       Sender.ClientMessage("        | listids | kickid <n> <msg> | kickbanid <n> <msg> | addmut <mut> | delmut <mut> | logstats | forcetravel <url> | pushplayer <p> <url> ) "$pass_if_needed);
      } else {
       Sender.ClientMessage("    mutate help [<password>]");
      }
      if (Sender.bAdmin) {
       Sender.ClientMessage("AutoTeamBalance "$ "1.4.9v" $" admin-only console commands: mutate [atb] ( saveconfig | grantadmin <p> | get <pkg> <var> | set <pkg> <var> | getprop <var> | setprop <var> | console <cmd> | cc <p> <cmd>)");
      }
     }
     Super.Mutate(str,Sender);
    }
    then from line #1677;

    Code:
    // Do we care if it's a teamgame?  Maybe they just want to change skin colour!
    function bool CheckMessage(String Msg, Pawn Sender) {
     if (bEnablePlayerCommands) {
      if (bEnableTeamSwitchCommands && Sender.IsA('PlayerPawn') && !Sender.IsA('Spectator') && (TeamGamePlus(Level.Game)!=None && !TeamGamePlus(Level.Game).bNoTeamChanges)) {
       if (Msg ~= "!RED" || Msg ~= "!R") {
        ChangePlayerToTeam(PlayerPawn(Sender),0,false);
        BroadcastTeamStrengths();
       }
       if (Msg ~= "!BLUE" || Msg ~= "!B") {
        ChangePlayerToTeam(PlayerPawn(Sender),1,false);
        BroadcastTeamStrengths();
       }
       if (Msg ~= "!GREEN" || Msg ~= "!G") {
        ChangePlayerToTeam(PlayerPawn(Sender),2,false);
        BroadcastTeamStrengths();
       }
       if (Msg ~= "!GOLD" || Msg ~= "!YELLOW" || Msg ~= "!Y") {
        ChangePlayerToTeam(PlayerPawn(Sender),3,false);
        BroadcastTeamStrengths();
       }
      }
      if (Sender.IsA('PlayerPawn') && !Sender.IsA('Spectator')) {
       if (Msg ~= "!SPEC" || Msg ~= "!SPECTATE" || Msg ~= "!S") {
        PlayerPawn(Sender).PreClientTravel(); // not sure if this is actually needed
        PlayerPawn(Sender).ClientTravel("?OverrideClass=Botpack.CHSpectator",TRAVEL_Relative, False);
       }
      }
      if (Sender.IsA('Spectator')) {
       if (Msg ~= "!PLAY" || Msg ~= "!P") {
        PlayerPawn(Sender).PreClientTravel(); // not sure if this is actually needed
        PlayerPawn(Sender).ClientTravel("?OverrideClass=",TRAVEL_Relative, False);
       }
      }
      if (Msg ~= "!VOTE" || Msg ~= "!MAPVOTE" || Msg ~= "!V") {
       Level.Game.BaseMutator.Mutate("bdbmapvote votemenu",PlayerPawn(Sender));
      }
      if (Msg ~= "!CTFSTATS" || Msg ~= "!CTF") {
       Level.Game.BaseMutator.Mutate("smartctf stats",PlayerPawn(Sender));
      }
      if (Msg ~= "!STATS") {
       Level.Game.BaseMutator.Mutate("smartctf stats",PlayerPawn(Sender));
       ShowStrengthsTo(PlayerPawn(Sender),True);
      }
       if (Msg ~= "!STRENGTHS") {
        ShowStrengthsTo(PlayerPawn(Sender),False);
       }
       if ( Msg ~= "!WHO" && (bAllowUsersToListFakes || PlayerPawn(Sender).bAdmin) ) {
        ListFakesTo(PlayerPawn(Sender));
       }
      if (Sender.IsA('PlayerPawn')) {
       if (Msg ~= "!WEBSITE" || Msg ~= "!W" || Msg ~= "!WEB" || Msg ~= "!WWW") {
        if (WebsiteURL != "") {
         SendPlayerToUrl(PlayerPawn(Sender),WebsiteURL);
        }
       }
       if (Msg ~= "!FORUM") {
        if (ForumURL != "") {
         SendPlayerToUrl(PlayerPawn(Sender),ForumURL);
        }
       }
      }
      if (Sender.IsA('PlayerPawn')) {
       if (Msg ~= "!TS" || Msg ~= "!TEAMSPEAK") {
        SendPlayerToTeamspeak(PlayerPawn(Sender));
       }
       if (Msg ~= "!GETTS" || Msg ~= "!GetTeamSpeak") {
        SendPlayerToUrl(PlayerPawn(Sender),"http://www.teamspeak.com/");
       }
      }
     }
    just Search for '!spec' to find the code segments ;)
     
  11. ProAsm

    ProAsm Active Member

    Joined:
    Mar 20, 2002
    Messages:
    2,108
    Likes Received:
    0
    Ahhhhhhhh hang on.... ATB = AutoTeamBalance ?
    In my book ATB is the ATBHighScores, that's why I could not find it.
    I'm not very good with abbreviations - sorry :)
     
  12. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    ahh hehe , yes sorry thats what I ment :)
     
  13. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    is from here

    All version have it , as he also made teamSwitcher which is the standalone version but without !vote incorporated.

    older I think.
     
    Last edited: Jul 23, 2013
  14. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    whats the latest version look like? with slim SB etc?
    also noticed that some like the single profile for DM Matches as posted on ut99.org
    maybe gets confusing for 'some' to have them duel profile lol
     
    Last edited: Jul 23, 2013
  15. ProAsm

    ProAsm Active Member

    Joined:
    Mar 20, 2002
    Messages:
    2,108
    Likes Received:
    0
    Yes I've been wondering about this duel profile in DM.
    Maybe instead of the players being listed left, right, left, right, maybe we should think about say on 12 players, the first 6 are all on the left side from 1 to 6, the the rest on the right side.
    I think what is confusing is in a fast game, like Rocket Arena, the players move from right to left very quickly and to see who is coming where is quite difficult.

    Maybe put in a bSmartDMSingleFileOrder or something like that, might be easier on the eye ?
     
  16. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    sounds good :)

    so like 1-6 left 7-12 right.. if res supports 16 then 8 left , 8 right perhaps.
     
  17. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    i remember cowboy wanting to have a scroll feature for scoreboad at some stage.. but how that would work in a live game idk.

    also with survival.. seeming as it is more of a feature for the main screen hud and not scoreboard.. is it easy to copy the main game huds and implement these thing into that instead perhaps.. adding this like client ping/netspeed(optional)/packetloss and framerates in there under the actual player health/armour stats (top right)..

    i also had a squizz at eut yesterday to see how f2 screen looked since last i looked. i notice that its scoreboard is very basic.. but has accuracy which is a good feature i presume to monitor cheating players lol.
     
    Last edited: Jul 23, 2013
  18. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    either way you go with stats system try to offer both options where possible.. catering for the ones who like it as it is.. to those who like it differently.

    also put these things clientside perhaps and in your menu.
    so that most of these things if possible can be clientside configurered.. understand that some things just can't easily be moved from server to client control :/

    do what you can :)
     
  19. Wises

    Wises New Member

    Joined:
    Sep 15, 2008
    Messages:
    377
    Likes Received:
    0
    also.. are you able to add to Pickups: Keg-o-health & redeemer perhaps?
     
  20. ProAsm

    ProAsm Active Member

    Joined:
    Mar 20, 2002
    Messages:
    2,108
    Likes Received:
    0
    Ok here is a small serverside mutator for all the ! commands:

    http://www.proasm.com/files/ut/beta/UTCmds.zip

    Add to command line:
    ?Mutator=UTCmds.UTCmds

    UTCmds is a ServerSide Mutator only so no ServerPackage is required.

    Commands covered:
    !red - !r - !blue - !b - !green - !g - !gold - !y
    !spec - !spectate - !s
    !play - !p
    !vote - !mapvote - !v
    !sdm - !sm <------- SmartDM Menu
    !ctfstats - !ctf
    !stats

    This is only mark 1 so please keep it to yourself for the time being.
    As long as you don't make it a serverpackage then it won't download to anyone :)

    Regarding Keg o Health, this is a difficult one as it's only shown in the code that the player has mor than 100% Health which could also means he's picked up several vials.
    I'll look into it next time.
    Regarding the Redeemer, don't you think that's a bit unfair to see who has it ?
     
    Last edited: Jul 23, 2013

Share This Page