September 7th, 2014 by

martin-st-louisUHS Build 7221 – September 7 2014
It’s been exactly a month since our last release. This build focused a lot on the AutoGM logic… to reduce some of the restrictions on the trade logic, re-write the free agency logic and basically review everything in the script since there seemed to be something causing an infinite loop (I suspect it was the use of a critical variable in different parts of the code).

I’ve also added in Lawyers (something else to spend your money on), added a setting for Trade Notification emails, added a setting to allow Forwards to play in Defense positions, changed the cosmetics of the Upcoming Games section for your team as well as added the opponent’s record, and finally Player Trade Requests.

For Player Trade Requests, I believe it should cause just enough of a churn to get some of the better players moved off stacked teams and give those hopeless teams a better chance at improvement.

Donations Page – Thank You!
We added a Donations page to provide a forum for thanking everyone that has donated to us via KickStarter and PayPal. This was deployed as a Hot Fix on August 8 2014.

AutoGM Trade Weights & Logic Changes
Currently it is very difficult, if not impossible, to make a trade with the AutoGM. This even applies to AutoGM to AutoGM trades. Previously the thresholds for incoming players/picks were weighted at 75% of their regular value. We’re going to change that to 90%. Additionally, players/picks leaving the AutoGM team were weighted at 125% of their regular value. We’re going to change that to 110%. This was deployed as a Hot Fix on August 12 2014.

The logic was further modified to remove extra checks like whether the trade would violate the Trade Initiating Team’s salary cap…  as long as it doesn’t violate the AutoGM’s salary, the trade will be good. The AutoGM will no longer look at whether the potential Incoming Players have had a positive rerate last season. This was skewing some potentially solid trades for the AutoGM just because they didn’t rerate up the previous season. We’ve also incorporated the new Tiebreaker settings into the logic when it looks at draft picks.

The AutoGM will now be more likely to make bids on free agent coaches that other teams have already made bids on. There were also some additional checks added to the AutoGM when looking at free agents to bid on…  this should finally resolve the issue of AutoGMs going crazy for free agents. These additional changes went live as a Hot Fix on August 24 2014.

Further to this another adjustment was made to the AutoGM’s free agency “poaching” logic to ensure the team will only be looking at players in one of the following cases:
– the Pro team has less than 26 players.
– the Farm team has less than 26 players.
– the Free Agent Player in question has a higher skill level than the top Pro/Farm players currently owned by the AutoGM. This part will impose position limits: Top 5 Centers / Left Wingers / Right Wingers, Top 15 Forwards (including C/LW/RW), Top 8 Defensemen, Top 3 Goalies. If the AutoGM has a real farm team, these limits are doubled.

The following changes were not hotfixed in and have gone live as of this build deployment:
– Pro Roster, Pro Goalies, Farm Roster and Farm Goalie checks and attempts at filling in spots will now only happen after the Entry Draft has been completed and the SeasonType is PreSeason, Regular, or PlayOff. This change was made since expansion teams with AutoGM were creating makeweights to fill in spots despite Free Agency not being tested.
– Players can now be sent down to the farm team is the SeasonType is PreSeason in addition to the original criteria of Regular and PlayOffs.

Teams can now hire lawyers to attempt to lower the number of games remaining in the player’s suspension by half. This is an important point… the reduction amount is based only on the games remaining in the suspension… not the initial amount. It will be key for GMs to use their lawyers as soon as they know a suspension has been handed out.

Lawyers are handled similar to Medical Staff in that you can purchase them, must pay a seasonal maintenance fee and can recoup 25% of the purchase price if you want to purchase a different lawyer. Each lawyer will have an Appeal Fee… this is charged to your team for every appeal you make… regardless of whether or not the appeal was successful. The Chance field shows the chance your appeal will have to be successful.

Only one appeal can be made for a player per season. If the player is suspended again later on in the season, the lawyers will not be able to help.

Roster – Farm Manual/Auto setting
We’ve moved the drop-down to change whether UHS will set your farm team’s roster / lines to the top of the roster options. If this is set to Auto, your roster and lines will always be managed by UHS… any changes you make will be over-written. We’ve moved this setting to the top so it’s a little more visible to the eye at a glance.

Upcoming Games
The Upcoming Games section in your Team page has been changed slightly to use zebra striping and show you the record of your opponent. The record will take into consideration things like season OT type and show OTW/L and SOW/L records if those categories award points differently than a regulation win/loss. The record line will show this data: Wins-Losses-Ties-OTWins-OTLosses-SOWins-SOLosses.

Example: if a league awards 3 pts for a regulation win and only 2 pts for an OT win, the record line would be something like: W-L-T-OTW. As long as the OTW or SOW pts values are different from a Regulation Win pts value, then OTW / SOW will be shown. The same goes for OT Losses and SO Losses. Ties will only show up if your Regular Season OT Type allows for Ties.

Forwards Allowed on Defense Positions
We’ve added a setting in Settings > Game Settings to allow a COM to toggle whether forwards are allowed to play on a defensive position. By default this is disabled. If the COM has enabled position penalties the forward will get a -10% on any event (Pass, Skate, Shoot) if Even-Strength, however, on Power-Plays and Penalty-Kills, there is no position penalty even if position penalties are enabled.

Please note that using the Auto Lines feature will not set your forwards into your defensive positions, you will have to do that manually. You should also be aware that enabling this could potentially allow a team to run with no defensemen at all.

Auto-GM teams will never use this functionality… they will attempt to fill their roster and lines with players of the appropriate positions.

Request to be Traded
We’ve added in functionality to make a check for players requesting to be traded. The chance at the request is a flat 1%. If a player requests to be traded, the team will no longer be able to offer a new contract, similar to the player refusing to negotiate with the team. In fact it is treated exactly the same. As such we have added a new bubble on the Team Home page to show Player Contract Issues: this will show players with Contract = 0 or Requesting Trade or Holding out for Free Agency.

To trigger a Trade Request check one of the following must happen:
– The player is placed on waivers.
– The player’s current Ice Time Average (Minutes for goalies) is less than 75% of the average from the previous season. This is only applicable during the Regular Season from when the player’s team has played 10 games to the Trade Deadline.

Trade Notifications
We have updated the Email Notifications section for your account profile (click on your account name at the top right when you are logged in). You can now opt-in to UHS Admin messages, Incoming Trade Notifications and Completed Trade Notifications (for COMs or higher only).

By default the Incoming Trade Notifications are enabled and Completed Trade Notifications are disabled. Your regular UHS Admin message opt-in setting has not been changed.

Cron Jobs & Inactive Leagues
Leagues that are considered inactive (no logins for 30 days) will now be ignored by most system cron jobs to reduce unnecessary system usage.

Bug Fixes
- Fixed an issue where the Coach Stats page on Public Websites was not functioning.
– Fixed an issue where COMs could not add teams if a non-default setting was used for drafting.

Hot Fixes
- Fixed an issue where the rookie designation was not being updated. Released August 16 2014.
– Fixed an issue where the AutoGM would get stuck in an infinite loop when a trade initiation check was successful. Released August 19 2014.
– Fixed an issue where a player’s type would get reset when the league changes from pre-season to regular season…  this meant the player would have to clear waivers again even if they had cleared it earlier in the season. Released August 19 2014.
– Fixed an issue where the schedule generator would time-out when creating schedules for leagues with an odd number of teams. Released August 31 2014.

August 6th, 2014 by

Abram ChuckoUHS Build 7081 – August 7 2014
This build is pretty massive…. I had a good run where I had minimal to no pain, so I was able to power through some items that I’ve wanted to do. We now have a status update section built into the League Home page. You’ll need to log into UHS in order to actually use that, however, you will be able to view it on the public sites.

We also added Player Faces… this is something I’ve wanted to do for a LONG time… the faces are definitely very cartoonish and rough around the edges, however, as time goes on I might be able to get back and revisit it.

We added in some AJAX so that we can reduce the number of page refreshes and keep page load times down…  primarily this was done for the status update development, however, over time we’ll incorporate it into other sections as needed.

COMs can now Reset Queued games, set Rookie eligibility requirements, set Standings tiebreakers and now set a Farm Salary Cap.

Status Updates
We’ve added a new feature to allow all league members to post a status update. These updates will be shown on the right side of the League Home page (just click the League link at the top of the nav menu). The Game Results section has been moved (more on this later) to make way for the Status Updates.

You will also be able to see the Status Updates on your Public Site, however, you will not be able to make any posts unless you are logged into UHS.

When posting your team’s logo will appear beside your name. For league owners and commissioners, the league logo will appear there instead. If there are no logos available, the UHS cog will appear by default.

This new area will only be available if you are running a browser with javascript / scripting enabled.

Player Faces
As I’m sure you’ve noticed when you look at player profiles you’ll see a silhouette of a player with the UHS name on it. Well…  I finally was able to put together some healthy time and create a ton of graphic assets. I’ve created a script that will automatically generate a random face if one doesn’t already exist. So…  some things to keep in mind when looking at the faces:

1. I am NOT a graphic artist… as can be evidenced by the “great” work I did on the faces.
2. The eyes and mouths look like anime? well… that’s because they are. They were the only eyes and mouths I could find outlines for that I could fit into the design of the face.
3. There is a bleed effect on moustaches…  yep… in some cases there will be.
4. Goalie masks will obscure most of the face except the eyes.

This is my first run at randomly generating faces… perhaps as time goes on and health permits I’ll be able to re-visit it. Or if there is a talented graphic artist out there that would like to donate their time, please contact me using the support system.

Farm Salary Cap
We’ve added a new option for leagues that want to play around with a Farm Salary Cap. If enabled your team’s Farm salaries will be accrued and shown in your Finance page. If a team is over the Farm Salary Cap whatever fine method you’ve selected will be applied. Please note we will only check for violations when the Pro team plays not the Farm team. This is mainly due to the Pro team owning the overall finances whereas we do not keep a record for Farm finances. You should also be aware that Junior prospects do NOT count towards the Farm Salary Cap…  only players assigned to your Farm team.

Unlocking / Resetting Games
We’ve added a new tool to allow Owners and Commissioners to reset games that are stuck with a status of “Queue” or “In Progress”. It is highly recommended you only use this tool if the game is stuck for at least 5 minutes. Typically games take anywhere from 3-20 seconds to sim depending on server usage, however, as we grow and more leagues are using UHS, the queue job will take longer to sim your queued game.

A game will typically get stuck because a roster change gets made AFTER the game gets queued up and BEFORE it actually gets simmed. We do have error checking for that so the game won’t actually get simmed, however, it will be marked “In Progress” and remain that way until a request was made to us to fix it. When queuing up games, please remember the league is locked for a reason. We want to ensure our data integrity before the games are actually simmed, so we prevent people from logging in to make changes. We intentionally allow COMs and Owners to remain logged in so they can carry out their business, however, they should be aware that touching Rosters are pretty much a no-no. Even unlocking the league shouldn’t be done…  once all the queued games are simmed the league will unlock automatically so the COM doesn’t need to worry about this.

Additionally, when you use this tool to reset a game, your league will automatically unlock so that necessary cron jobs can run and potentially fix whatever roster issue was happening to cause the lock in the first place.

You will find this tool in Tools > Reset Games.

Standings Tiebreakers
COMs now have the ability to set their league’s tiebreakers. By default the tiebreaker rules will be Pct, Wins, Goal Differential. COMs will have the ability to set up to four tiebreakers. The COM can pick of the these tiebreakers:
– Pct (points percentage), highest to lowest.
– Wins, highest to lowest.
– Wins – OT Wins, highest to lowest.
– Wins – SO Wins, highest to lowest.
– Wins – OT Wins – SO Wins, highest to lowest.
– Goal Differential (GF – GA), highest to lowest.
– Goals For, highest to lowest.
– Goals Against, lowest to highest.

Rookie Eligibility Settings
COMs now have the ability to set the maximum age and minimum games a player must have in order to qualify as a Rookie. The minimum games is actually a percentage of games that have been played in the season to date, so as the season continues the list could potentially change depending on how many games the player was actually in. You’ll find the settings in Settings > General.

Game Results Changes
You’ll notice that the Game Results have been moved to a section under the Commissioner’s Corner and above League Activity. You’ll also find that we are now only showing either your Pro, Farm or Junior league game results. Previously we showed all of them since we had a lot of vertical space. The move to the new location prevents us from showing all three leagues since there just in not enough horizontal space. I will eventually be adding a few more things to the Game Results area to “fill it out” as it looks like there is a lot of wasted space.

You will see Pro, Farm and Junior links… clicking these will refresh just the Game Results section… so you won’t get a full page load (trying to reduce these).

Personnel (show all leagues)
We’ve added a list of all the Pro, Farm, and Junior players your team owns in one big list (like it used to be prior to UHS Dark)…  you’ll find this list on your Personnel Home page… just click Team > Personnel and you’ll see it beneath the Summary area.

Bug Fixes
- Fixed an issue where the Free Agency End Date and Trade Deadline were not being automatically set when the Pro league’s schedule was created.

Hot Fixes
- Fixed an issue where errors would appear when saving Play-off settings for leagues that did not have a Farm or Junior system set up.

July 30th, 2014 by

tourneybracketUHS Build 6890 – July 30 2014
This build is aimed primarily at adding in the automatic playoff series creation settings. When this was first proposed about six years ago, my approach to it was pretty much all wrong… I started thinking about all the possible methods you could choose for your playoffs and was going to set up each one as a different type… this even went as far as specifying the number of teams too.

I guess it’s true that with experience comes *some* wisdom… as the work wasn’t nearly as bad or complicated as I thought it was going to be. Don’t get me wrong… it took a bit to debug and figure out but overall I think we’re okay with the method I’ve chosen to go with.

I also did a little work on the random player name generation logic as well as cut out some of the acronym names in favour of automatically generating acronyms if it’s needed.

Playoff Series Generation
After nearly six years I’ve finally gotten around to adding in the option to automatically generation playoff series. You will find the new options in Settings > Play-off Settings. In here you will select the Playoff grouping, number of qualifying teams, toggle whether division winners are always ranked higher and the length of the series.

If you opt to select “Manually Create Playoffs”, when it’s time to generate playoff series, you’ll basically be on your own…  you’ll be using the method we’ve used since day 1. You’ll pick your Home & Away teams, Round type (Preliminary, Quarter-Final, Semi-Final, Final) and Series Length. Once you create all of your series, you’ll then go to set your starting date and hit Create Games. You’ll notice that levels that did not have Manual selected will not have their teams present for selection.

If you opt to select anything other than Manual for playoff groupings, you’ll be able to select the following options:

– by Division: teams are grouped by their Division, then by Conference to create playoff series.
– by Conference: teams are grouped by their Conference only to create playoff series.
– League Grouped Together: teams are grouped together regardless of Conference or Division. Sort of like what they tried in the NHL back in the 1979-80 season.

Qualifying Teams
You can select from 1 up to the maximum number of teams for the grouping you’ve selected previously. In the cases of unbalanced conferences and divisions, the highest number of teams allowed per grouping will be the number of teams from the smallest division. So in the case of conferences of 14 teams and 16 teams, the most you would be able to select for qualifying teams is 14 (the lowest of the conferences).

Division Winners Ranked Higher
Here you have the option to allow division winners to be re-seeded higher in their respective conference or league (this doesn’t really apply for Group by Division). This is similar to how the NHL operated their playoff format in the late 90’s and 2000’s… the top division winners of each conference were ranked 1-2-3 regardless of their point totals compared to the other teams that did not win their division.

Series Length
Quite simply, how many games do you want your series to run?

So now that you’ve selected your play-off settings for each level (Pro, Farm, Junior), how do you go about creating your series? Well…  when you advance your season from Regular Season to Play-Offs, you’ll go to the Manage > Schedule – Play-offs like you would have done with Manual Setup. You should notice that all of the series have already been created for you… all you need to do now is enter your Start Date and click “Create Games”.

For subsequent rounds you’ll do the same thing… once the round is over, you’ll enter the Manage > Schedule – Play-offs page and find your new series automatically created for you.

Manual Playoff Series Updates
We’ve added a few quality-of-life improvements if you still want to create your playoff series manually. When creating new series the page will remember the last Type and Length that you used, so you don’t necessariy have to re-select the options you want… just pick your teams and carry on. Also, you will now only be allowed to create one Final, one Farm Final, and one Junior Final series…  once you create that, the option will be removed from the drop-down. If you made a mistake, it’s okay… delete the series and re-add it.

Player / Coach Born field: Early Retirements & Rerates
We’ve added a new “Born” field behind the scenes to record the season that a player (or coach) was created. This field will now be used to determine whether a player / coach will retire early from not having been in any games for X number of seasons (as set by the COM) since their last game. This was a problem since if there were no games played EVER, how would we know when it was okay to force a retirement? The Born field will now be used when the player / coach has never been in any games.

Additionally, this will also apply to rerates in that a player cannot be rerated if the last season (meaning the one we just came from prior to the season change) is the same as their Born date. I *might* put in a small chance at some random rerates (perhaps like 10% chance for each skill), however, for now, we’re going to leave it as is.

Player / Coach Deletions
After all retirements have run, the season change code will check for any retired Player or Coach and see if they have any statistics whatsoever. If there are none, the Player or Coach will be deleted from the DB. This was previously running only for Players, however, we’ve increased the scope to also run for Coaches.

Player First Name Creation
I’ve removed the names that consist of two capital letters (like PK, RJ, PC, JC, etc) in favour of adding some random hyphenization when creating a random first name. I’ve also added quite a few more Quebec French First Names. There will be a 1 in 1000 chance that a player will have a hyphenated first name and a 50-50 chance that hyphenated name will actually be shortened to something like PK, RJ, etc. I’ve also optimized some of the name generation queries… I doubt anyone will notice on unless you are making a LOT of names at once, however, it should be a little faster now. This was released as a “hotfix” on July 14 2014.

Special Last Names
We’ve removed the code that could potentially add a “Jr.”, II, or III to the end of the player’s last name. Not really seen in hockey… it’s more of a soccer thing. Player last names have a 1 in 1000 chance of being “Special”…  where they will either become hyphenated or a new country will be randomly chosen for that last name.

Player Dodging Checks
There was a change made in a prior build that removed “dodged pass interceptions” being counted as a Check Avoided. All leagues should be seeing a decrease in the Checks Avoided category because of this.

Additionally, players successfully making their Quickness skill check will only be hit for half the defender’s strength (Power) skill when hit by the check. This should give the Quickness skill a little more oomph when considering a player as they’ll likely be able to stay on the ice for a longer period of time than those with low Quickness skills.

Public Site Contact Forms
I’ve added a validation question to the public site contact form as I’ve noticed (and you have probably too) that the form was being hit by spammers. While this won’t defeat human spammers, it should defeat bots.

League Member List
When logged into UHS all users will now see a “Members” link under the League menu. This will show all Owners, Commissioners and GMs assigned to teams. The member’s role, email address and last login time will also be shown to let everyone get a gauge of league activity. Further to this, members that have not logged in for 14 or more days will have their time highlight Red. If not logged in within the last 7 days the time is highlighted Orange.

Please note, we are intentionally not including this on the Public Site as I don’t want to be putting everyone’s real names and email addresses on a website where anyone can just go grab them. Privacy is important to me.

Bug Fixes
- Fixed an issue where the original owner of the pick was being shown in the Entry Draft list on the UHS site.
– Fixed an issue where teams were not receiving scouting reports for their own players when the season changed to the new Off-Season.
– Fixed an issue where players were able to be bought out despite still being on waivers.
– Fixed an issue where the value of contract offers was not rounding properly. Example: $0.3 * 3 years = $0.89999 instead of $0.9.
– Fixed an issue where the Search Ahead / Suggestion box for the player search was too light.
– Fixed an issue where the League Salaries page on the Public Site would display a multisort error.
– Fixed an issue where Ledger entries on the Public Site were appearing in ascending order instead of most recent at the top.
– Fixed an issue where hitting save would return “Array” in the message area for Settings > General Settings.
– Fixed an issue where lines would not shift off when reaching exactly 0 energy due to a floating point error.
– Fixed an issue where PK lines would have phantom players contributing to line energy… this resulted in PK lines spending more time on the ice than they should have been.
– Fixed an issue where the AutoGM would only set their farm roster when there was an injury. This fix will set the roster anytime a player is sent down to the farm team so good players are not benched waiting for an injury.

Hot Fixes
- Fixed an issue where new leagues were not creating owner accounts due to an old table being referenced. Released July 9 2014.
– Fixed an issue where COMs could not delete users with apostrophes in their username. Released July 12 2014.
– The Rookie table population job will now ignore leagues that have Inactivity Warnings. Released July 12 2014.
– The Rookie table population job will now ignore leagues that have not had anyone log in. Released July 18 2014.