Player of 0AD Posted July 19, 2022 Report Share Posted July 19, 2022 15 hours ago, borg- said: adds a minimum of 10 games until the rating count starts, that way some will be "lazy" to start new accounts smurf protection is good, but this would be a pain for newbies. Quote Link to comment Share on other sites More sharing options...
Dizaka Posted July 19, 2022 Report Share Posted July 19, 2022 (edited) 8 hours ago, Stan` said: I have 7 email accounts. Makes it harder not impossible. Also lots of legalese. I'm not sure I understand you.  I have, basically, infinite accounts due to forwarding certain domains to my a primary email address. Have tons of accounts such as amazon@???.com, target@???.com, orangebank@???.com ... etc. Not really sure emails are unique. Edited July 19, 2022 by Dizaka Quote Link to comment Share on other sites More sharing options...
rossenburg Posted July 19, 2022 Report Share Posted July 19, 2022 54 minutes ago, Dizaka said: I have, basically, infinite accounts due to forwarding certain domains to my a primary email address. Have tons of accounts such as amazon@???.com, target@???.com, orangebank@???.com ... etc. Not really sure emails are unique. what else could be taken from players? I think phone numbers are too much to ask for even tho some games ask for user phone # to link to users accounts 1 Quote Link to comment Share on other sites More sharing options...
Darkcity Posted July 19, 2022 Report Share Posted July 19, 2022 16 hours ago, rossenburg said: . I was referring to this @Stan` How come a player has such stats? Quote Link to comment Share on other sites More sharing options...
Stan` Posted July 19, 2022 Report Share Posted July 19, 2022 That would be a question for @Dunedan and @user1 Quote Link to comment Share on other sites More sharing options...
Stan` Posted July 19, 2022 Report Share Posted July 19, 2022 1 hour ago, go2die said: Answer is there is/was bad interpretation on players name containing specific character which causes substraction of rating due to failure of lookup in player db. Only few accounts are affected. I hope this noon developer answer satisfy you...I can use wildfires search .... Nub Fix here waiting for review by @user1 https://github.com/0ad/lobby-bots/pull/10 Quote Link to comment Share on other sites More sharing options...
Dunedan Posted July 19, 2022 Report Share Posted July 19, 2022 4 hours ago, Stan` said: Fix here waiting for review by @user1 https://github.com/0ad/lobby-bots/pull/10 Actually reviews by everybody who feels confident assessing the changes of such PRs are appreciated. I'll also soon merge this and some of the other PRs, no matter if somebody looked at them or not, as otherwise the development of the bots is blocked too much by waiting. Please mind that merging this PR won't result in the bug being fixed in the actually lobby immediately, as the bots running there have to be updated to use the new code and that might still take a while until we have a better process for that. Quote Link to comment Share on other sites More sharing options...
Dizaka Posted July 19, 2022 Report Share Posted July 19, 2022 (edited) 9 hours ago, rossenburg said: what else could be taken from players? I think phone numbers are too much to ask for even tho some games ask for user phone # to link to users accounts I'm not completely sure. Maybe a taking a phone number but using a 1-way hash on it? This way it isn't "used" but it is fairly unique. Edited July 19, 2022 by Dizaka Quote Link to comment Share on other sites More sharing options...
Loki1950 Posted July 19, 2022 Report Share Posted July 19, 2022 How about using the computer's MAC as an identifier. Enjoy the Choice Quote Link to comment Share on other sites More sharing options...
hyperion Posted July 19, 2022 Report Share Posted July 19, 2022 1 hour ago, Dunedan said: Actually reviews by everybody who feels confident assessing the changes of such PRs are appreciated. ILIKE is obviously wrong, you want the sql '=' for the WHERE here, can't comment on the python part thou, but looks approximately right  Quote Link to comment Share on other sites More sharing options...
Yekaterina Posted July 19, 2022 Report Share Posted July 19, 2022 Easiest solution, like @Darkcity proposed: show total number of games played in the lobby INCLUDING non 1v1 games, then date of account creation relative to GMT +0:00 Rating is not important, what's important is to see that the person is experienced, i.e. not cosmic. Examples of where ratings are completely useless: reza-math, FUBAR, SaidRdz If an account is new, then they are either a smurf or a cosmic, so they will not be allowed into 4v4 games. If an old player is returning, we would be able to tell from the date of account creation and the total number of games they played. As someone who has attempted smurfing a dozen times I can tell you the following: 1. Making a new email address is not a difficult task and will not require one to spend any money. 2. In some countries one can buy a new SIM card and hence a new phone number for very low prices. 3. Lobby bans can be bypassed, not very easily but quite do-able. 4. Smurf speculators guess correctly around 50% of the time. 1 Quote Link to comment Share on other sites More sharing options...
Darkcity Posted July 24, 2022 Report Share Posted July 24, 2022 @Stan`Â How can i get account creation date and total games played (including non rated)? Do we have such info in out database or we don't save it at all? Â Quote Link to comment Share on other sites More sharing options...
Stan` Posted July 24, 2022 Report Share Posted July 24, 2022 27 minutes ago, Darkcity said: @Stan` How can i get account creation date and total games played (including non rated)? Do we have such info in out database or we don't save it at all?  @rossenburg @Dunedan Quote Link to comment Share on other sites More sharing options...
rossenburg Posted July 24, 2022 Report Share Posted July 24, 2022 1 hour ago, Darkcity said: @Stan` How can i get account creation date and total games played (including non rated)? Do we have such info in out database or we don't save it at all?  There are such info, when registering a user there's something like Quote  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP which should save the date the user made the account. And about the total number of games played, that is again possible. You can check ProfilePanel.js. Send me a pm if you have problem with it, can help you work around it 1 Quote Link to comment Share on other sites More sharing options...
Yekaterina Posted July 24, 2022 Report Share Posted July 24, 2022 1 hour ago, rossenburg said: which should save the date the user made the account. And about the total number of games played, that is again possible. You can check ProfilePanel.js. Send me a pm if you have problem with it, can help you work around it Is this information saved passed onto all of the clients (players) looking at this profile, or, is it stored only on a central location which the players do not have access rights to?  Quote Link to comment Share on other sites More sharing options...
Yekaterina Posted July 24, 2022 Report Share Posted July 24, 2022 @rossenburg this is my ProfilePage.js Am I looking at the correct file? If so, which line should I change?  /** * The profile page enables the player to lookup statistics of an arbitrary player. */ class ProfilePage { constructor(xmppMessages) { this.requestedPlayer = undefined; this.closePageHandlers = new Set(); this.profilePage = Engine.GetGUIObjectByName("profilePage"); this.fetchInput = Engine.GetGUIObjectByName("fetchInput"); this.fetchInput.onPress = this.onPressLookup.bind(this); Engine.GetGUIObjectByName("viewProfileButton").onPress = this.onPressLookup.bind(this); Engine.GetGUIObjectByName("profileBackButton").onPress = this.onPressClose.bind(this, true); this.profilePlayernameText = Engine.GetGUIObjectByName("profilePlayernameText"); this.profileRankText = Engine.GetGUIObjectByName("profileRankText"); this.profileHighestRatingText = Engine.GetGUIObjectByName("profileHighestRatingText"); this.profileTotalGamesText = Engine.GetGUIObjectByName("profileTotalGamesText"); this.profileWinsText = Engine.GetGUIObjectByName("profileWinsText"); this.profileLossesText = Engine.GetGUIObjectByName("profileLossesText"); this.profileRatioText = Engine.GetGUIObjectByName("profileRatioText"); this.profileErrorText = Engine.GetGUIObjectByName("profileErrorText"); this.profileWindowArea = Engine.GetGUIObjectByName("profileWindowArea"); xmppMessages.registerXmppMessageHandler("game", "profile", this.onProfile.bind(this)); } registerClosePageHandler(handler) { this.closePageHandlers.add(handler); } openPage() { this.profilePage.hidden = false; Engine.SetGlobalHotkey("cancel", "Press", this.onPressClose.bind(this)); } onPressLookup() { this.requestedPlayer = this.fetchInput.caption; Engine.SendGetProfile(this.requestedPlayer); } onPressClose() { this.profilePage.hidden = true; for (let handler of this.closePageHandlers) handler(); } onProfile() { let attributes = Engine.GetProfile()[0]; if (this.profilePage.hidden || this.requestedPlayer != attributes.player) return; let profileFound = attributes.rating != "-2"; this.profileWindowArea.hidden = !profileFound; this.profileErrorText.hidden = profileFound; if (!profileFound) { this.profileErrorText.caption = sprintf(translate("Player \"%(nick)s\" not found."), { "nick": escapeText(attributes.player) }); return; } this.profilePlayernameText.caption = escapeText(attributes.player); this.profileRankText.caption = attributes.rank; this.profileHighestRatingText.caption = attributes.highestRating; this.profileTotalGamesText.caption = attributes.totalGamesPlayed; this.profileWinsText.caption = attributes.wins; this.profileLossesText.caption = attributes.losses; this.profileRatioText.caption = ProfilePanel.FormatWinRate(attributes); } }  Quote Link to comment Share on other sites More sharing options...
rossenburg Posted July 24, 2022 Report Share Posted July 24, 2022 1 hour ago, Sevda said: @rossenburg this is my ProfilePage.js Am I looking at the correct file? If so, which line should I change?  /** * The profile page enables the player to lookup statistics of an arbitrary player. */ class ProfilePage { constructor(xmppMessages) { this.requestedPlayer = undefined; this.closePageHandlers = new Set(); this.profilePage = Engine.GetGUIObjectByName("profilePage"); this.fetchInput = Engine.GetGUIObjectByName("fetchInput"); this.fetchInput.onPress = this.onPressLookup.bind(this); Engine.GetGUIObjectByName("viewProfileButton").onPress = this.onPressLookup.bind(this); Engine.GetGUIObjectByName("profileBackButton").onPress = this.onPressClose.bind(this, true); this.profilePlayernameText = Engine.GetGUIObjectByName("profilePlayernameText"); this.profileRankText = Engine.GetGUIObjectByName("profileRankText"); this.profileHighestRatingText = Engine.GetGUIObjectByName("profileHighestRatingText"); this.profileTotalGamesText = Engine.GetGUIObjectByName("profileTotalGamesText"); this.profileWinsText = Engine.GetGUIObjectByName("profileWinsText"); this.profileLossesText = Engine.GetGUIObjectByName("profileLossesText"); this.profileRatioText = Engine.GetGUIObjectByName("profileRatioText"); this.profileErrorText = Engine.GetGUIObjectByName("profileErrorText"); this.profileWindowArea = Engine.GetGUIObjectByName("profileWindowArea"); xmppMessages.registerXmppMessageHandler("game", "profile", this.onProfile.bind(this)); } registerClosePageHandler(handler) { this.closePageHandlers.add(handler); } openPage() { this.profilePage.hidden = false; Engine.SetGlobalHotkey("cancel", "Press", this.onPressClose.bind(this)); } onPressLookup() { this.requestedPlayer = this.fetchInput.caption; Engine.SendGetProfile(this.requestedPlayer); } onPressClose() { this.profilePage.hidden = true; for (let handler of this.closePageHandlers) handler(); } onProfile() { let attributes = Engine.GetProfile()[0]; if (this.profilePage.hidden || this.requestedPlayer != attributes.player) return; let profileFound = attributes.rating != "-2"; this.profileWindowArea.hidden = !profileFound; this.profileErrorText.hidden = profileFound; if (!profileFound) { this.profileErrorText.caption = sprintf(translate("Player \"%(nick)s\" not found."), { "nick": escapeText(attributes.player) }); return; } this.profilePlayernameText.caption = escapeText(attributes.player); this.profileRankText.caption = attributes.rank; this.profileHighestRatingText.caption = attributes.highestRating; this.profileTotalGamesText.caption = attributes.totalGamesPlayed; this.profileWinsText.caption = attributes.wins; this.profileLossesText.caption = attributes.losses; this.profileRatioText.caption = ProfilePanel.FormatWinRate(attributes); } }  what do you intend doing?  Quote Link to comment Share on other sites More sharing options...
Yekaterina Posted July 25, 2022 Report Share Posted July 25, 2022 16 hours ago, rossenburg said: what do you intend doing?  See the creation dates of players' accounts Quote Link to comment Share on other sites More sharing options...
rossenburg Posted July 25, 2022 Report Share Posted July 25, 2022 37 minutes ago, Sevda said: See the creation dates of players' accounts i was referring to the total number of games @Sevda  this.profileTotalGamesText  Quote Link to comment Share on other sites More sharing options...
Darkcity Posted July 25, 2022 Report Share Posted July 25, 2022 @rossenburg this return total number of rated games played. Not overall lobby games played (1v1s, tgs etc). Thats why I was asking whether ot not we store this info. 12 minutes ago, rossenburg said:  this.profileTotalGamesText Also how to fetch creation date? Quote Link to comment Share on other sites More sharing options...
Yekaterina Posted July 25, 2022 Report Share Posted July 25, 2022 2 hours ago, rossenburg said: i was referring to the total number of games @Sevda  this.profileTotalGamesText  I would like to see the following info:  Date of creation, Total games played, both TG and rated  1 Quote Link to comment Share on other sites More sharing options...
Darkcity Posted July 26, 2022 Report Share Posted July 26, 2022 (edited) I was thinking of a comprehesive solution for taking care of smurfs. Along with reporting and tagging. Player can have idea about the smurf through following logic. Identifying smurfs: This will require 3 main inputs: Creation Date, Total Games played, and local rating. The reporting will fall in multiple smurf likelyhoods, we can say these are smurf levels, where 1 being highest and 5 being lowest likelyhood. Creation Date <= 7 days.  Total game played <=10, and Local rating > +50. or Total game played >10, and Local rating > +40. 7 days < Creation Date <= 1 month.  Total game played >10, and Local rating > +40. 1 month < Creation Date <= 3 months. Total games played <=20, and Local rating > +40. 1 month < Creation Date <= 3 months. Total games played > 20, and Local rating > +35. Creation Date > 3 months. Total games played > 30, and Local rating > +35. These are just rules through which a player can identify and report. We can implement it along with @rossenburg smurf tagging solution and let hosted player know their smurf level. Or, we can just inform player to check these details if they don't know the player. Note: This is specific to player, as they rely on local rating and additional info which we will provide like creation date and total games played. These numbers can be adjusted as we may see fit. @rossenburg Let us know if you figure out how we can access total games played and creation date. Thanks in advance. CC: @Sevda Edited July 26, 2022 by Darkcity 1 Quote Link to comment Share on other sites More sharing options...
rossenburg Posted July 26, 2022 Report Share Posted July 26, 2022 22 minutes ago, Darkcity said: I was thinking of a comprehesive solution for taking care of smurfs. Along with reporting and tagging. Player can have idea about the smurf through following logic. Identifying smurfs: This will require 3 main inputs: Creation Date, Total Games played, and local rating. The reporting will fall in multiple smurf likelyhoods, we can say these are smurf levels, where 1 being highest and 5 being lowest likelyhood. Creation Date <= 7 days.  Total game played <=10, and Local rating > +50. or Total game played >10, and Local rating > +40. 7 days < Creation Date <= 1 month.  Total game played >10, and Local rating > +40. 1 month < Creation Date <= 3 months. Total games played <=20, and Local rating > +40. 1 month < Creation Date <= 3 months. Total games played > 20, and Local rating > +35. Creation Date > 3 months. Total games played > 30, and Local rating > +35. These are just rules through which a player can identify and report. We can implement it along with @rossenburg smurf tagging solution and let hosted player know their smurf level. Or, we can just inform player to check these details if they don't know the player. Note: This is specific to player, as they rely on local rating and additional info which we will provide like creation date and total games played. These numbers can be adjusted as we may see fit. @rossenburg Let us know if you figure out how we can access total games played and creation date. Thanks in advance. CC: @Sevda @Darkcity if im right, the other time you were talking about the "TotalGames" not related to just the ones that is recorded for 1v1 matches but overall games including TG, 2v2 etc. yeah? I don't think there is such data ( summation of all total games played including TG and other games ), and its less likely to record those data since its not completely necessary because some players prefer to play with bots and all that. But i want to say this can be implemented into a mod where whenever a match is started by a player ( all aspect or maybe if players != bot ), It gets counted simply by adding a +1. but one problem is that, even if we are able to get this working, all players including the currently smurf will be the same level since all will start from 0 matches played or maybe + the alerady total number of games played (1v1). Just like how local rating works, these info will be saved locally  Engine.ConfigDB_WriteValueToFile and displayed to people who has the same mod. So i guess we can join forces and figure out a way to make a mod for this and update it progressively whenever there's new idea or logics. I'm pretty sure it will work out well. Aside that, since everything is saved locally, someone can just decide to open the file, edit it and that wont be fair too :/ Quote Link to comment Share on other sites More sharing options...
Darkcity Posted July 26, 2022 Report Share Posted July 26, 2022 I see. Thanks @rossenburg. Local storgae is not a good idea, it will only allow sumrf to find a way around. @Stan` Can we atleast save account creation dates for the player? I can think of following use cases for storing these field. Identifying players experience in games - This is for players. Data analytics for 0ad: It can be used both for historical data analysis as well as some for good GTM for alphas. Player retention - example old players returning in new alpha Player acquisition - New users signing up Fake account identified - More clean data Account creation behaviour over time Release in season when accounts are created the most. i can add more use case but get the point. For # of game played, it is not as imporant as compared to account creation date, but if it can be added with @rossenburg  if any player is AI Bot don't count else count. It can be considered if possible. Meanwhile I think we can mod the smurf reporting piece. @rossenburg I would love to check your mod once completed. If need any input from somewhere then PM me. @Sevda let us know if you want to add anything.  Quote Link to comment Share on other sites More sharing options...
Yekaterina Posted July 26, 2022 Report Share Posted July 26, 2022 @DarkcityI like your method of ranking smurfs, it will reduce the chance of wrong accusations. Problem: local ratings is just a number, sometimes it may be biased or anomalous. I would look closer at micro, eco and general playstyle instead of catching people out based on a single number. In addition, many players do not use local ratings nor would they have enough data for accurate ratings. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.