Jump to content

rossenburg

Lobby Moderators
  • Posts

    220
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by rossenburg

  1. 2 hours ago, Pemulis said:

    I'm not a fan of censorship at any level, but of course I can understand to control and censor offensive words in the main lobby.

    Still, I cannot imagine a single person in the world who could be offended by a wtf. 
    Should I consider it a profanity then? A... profanity? Wtf? Wtf.

    Isn't it a little too much?


    It costed me days being muted to remember I cannot write "sh1t" in the main lobby, seems like I should prepare myself for some more silent days.

    wtf is a profane slang but these days i think its widely accepted. Even higher level authorities like biden and trump uses it all the time (

    • Haha 1
  2. 1 hour ago, real_tabasco_sauce said:

    Another thing is that it seems to consider normal conversations spam. Whatever character threshold that is used for considering something spam may need to be increased. I saw a warning go up for a sentence of about 30 to 40 characters.

    still in alpha development, the bot uses simple regex expression to check repetition of same words in a sentence more than 3 times ( it's not the best way ), and consider it as spam. example typing "aaa aaa aaa" will be flagged as spam. There are more better approach to making the spam filter more accurate.

    • Like 2
  3. 9 minutes ago, chrstgtr said:

    Hard to understand how "wtf == will to fight" gets interpreted as "what the f*ck"

    Either way, it's pretty clear that this will lead to a lot of false hits

    Screen Shot 2022-12-20 at 1.15.14 AM.png

    i could also say "sh*t" == Ship High in Transit so im free to use the word Sh*t in the lobby then. I personally wouldn't count wtf as bad word as far as its not spelt out. If its agreed to be used in the lobby, why not. We follow protocols.

  4. 6 hours ago, chrstgtr said:

    GenieBot is muting people for saying wtf, which is a common abbreviation for will to fight. 

    @chrstgtr the bot doesn't have permission to mute users yet. It does send a report to moderators and lobby helpers whenever it detects profane or  pejorative in the chat. It also alert players not to use that word. 

    Incase you got muted by any means, it is not related to the bot but instead a moderator or lobby helper took that action.

    Could be several reasons:

    • wtf itself shouldn't be used in the lobby as its obviously "what the f*ck" not "will to fight" . If you are getting reported for typing wtf when it you meant will to fight then its advisable to type the full word
    • Spam: the bot itself has cooldown features which allows it to decide if it has already responded to what a user said within a certain duration and stops responding to the same message until the cooldown is over

    Upon checking, the mute action was taken by a moderator because wtf is considered "what the f*ck" and has nothing to do with the bot itself. The bot will of course alert moderators whenever there are profanes in the lobby. 

    Thanks for the report, don't forget to report any unusual activities in the lobby as the bot is in alpha stage, we will continue to work on it

    • Thanks 1
  5. 28 minutes ago, Stan` said:

    @rossenburg It has to be done in C++ and we use libsodium.

    pretty easy with c++ i think using libsodium, we can do 

    #include <string>
    #include <sodium.h>
    
    class XMPPUser
    {
    private:
        std::string m_jid;
        std::string m_username;
        std::string m_hashedPassword; // store hashed password using libsodium
        u16 m_rating;
        u16 m_gamesPlayed;
        u16 m_gamesWon;
        u16 m_gamesLost;
    
    public:
        // add member function to change password
        bool ChangePassword(const std::string& newPassword)
        {
            // generate random salt
            unsigned char salt[crypto_pwhash_SALTBYTES];
            randombytes_buf(salt, sizeof(salt));
    
            // hash new password using Argon2id with the salt
            if (crypto_pwhash(m_hashedPassword, sizeof(m_hashedPassword),
                              newPassword.c_str(), newPassword.length(),
                              salt,
                              crypto_pwhash_OPSLIMIT_MODERATE,
                              crypto_pwhash_MEMLIMIT_MODERATE,
                              crypto_pwhash_ALG_DEFAULT) != 0)
            {
                // hashing failed
                return false;
            }
    
            return true;
        }
    };

    This adds a ChangePassword member function to the XMPPUser class. This function uses the crypto_pwhash function from the libsodium library to hash the new password using Argon2id with a random salt. If the hashing is successful, it updates the user's hashed password and returns true. Otherwise, it returns false.

  6. On 06/09/2022 at 6:34 AM, smiley said:

    Disclaimer: This would be a massive change of course, and not related to the topic, but perhaps interesting so posting. This is not needed to implement password change.

    Maybe, the whole client needs to be slightly cleaned up by encapsulating related things rather than having JS separately query every detail. This would result in an interface where the single source of truth about lobby entities now lie within the client and entities/gamedetails could directly be exposed to JS. This should drastically minimize the number of events too as nick changes, presence changes and game status changes could be automagically updated along with the exposed JS representation (Need to check if this could actually be a thing, but it should be. We do pretty much the same thing for param nodes.)

    The new interface could look somewhat like this I guess.

    class XMPPUser {
    private:
        std::string m_jid;
        std::string m_username;
        u16 m_rating;
        u16 m_gamesPlayed;
        u16 m_gamesWon;
        u16 m_gamesLost;
    };
    
    class XMPPGame {
    private:
        std::string m_hostJID;
        std::map<std::string, std::string> m_gameData;
    };
    
    class IXMPPClient2
    {
    public:
        virtual IXMPPClient2::~IXMPPClient2() = default;
    
        // Allow unauthenticated
        virtual bool Login(const std::string& username, const std::string& password) = 0;
        virtual bool ChangePassword(const std::string& newPassword) = 0;
        
        // Requires being authenticated
        virtual void Logout() = 0;
        virtual bool Register(const std::string& username, const std::string& password) = 0;
    
        // Restrict clients to join only one MUC at a time.
        virtual bool JoinMUC(const std::string& room) = 0;
        virtual bool LeaveMUC() = 0;
    
        // Basic XMPP functions
        virtual bool SendMessage(const std::string& toUsername, const std::string& message) = 0;
        virtual bool SendMessageToMUC(const std::string& message) = 0;
        virtual bool SetNick(const std::string& nick) = 0;
        virtual bool SetPresence(const std::string& status) = 0;
    
        // Member info
        virtual const XMPPUser& GetUser(const std::string& username) const = 0;
        virtual const std::list<XMPPUser>& GetUsers() const = 0;
    
        // Pyrogenesis functions
        virtual const std::list<XMPPUser>& GetLeaderboard() const = 0;
        virtual bool RegisterGame(const XMPPGame&) = 0;
        virtual bool UnRegisterGame(const XMPPGame&) = 0;
        virtual bool ReportGame(const XMPPGame&) = 0;
        virtual const XMPPGame& GetGame(const std::string& hostUsername) const = 0;
        virtual const std::list<XMPPGame>& GetGames() const = 0;
    };

     

    @smiley @Dunedan

    According to this, 

    The IXMPPClient2 class defines a ChangePassword method that takes a newPassword as an argument and returns a bool indicating whether the password change was successful.

    Best way to implement this method, we need to authenticate the user, verify that they are allowed to change their password, and then update the user's password in the data store (e.g., a database or password file) to the new password provided.

    If the passwords are stored locally, we could use the fs module in js to read and write the password to a file on the local filesystem. 

    the ChangePassword method reads the user's current password from a file using the fs.readFileSync method. It then checks if the provided password matches the password in the file. If the passwords match, the method hashes the new password and writes it to the file using the fs.writeFileSync method. Finally, it returns a true value to indicate that the password change was successful.

    Suppose we are to use js we could do something like this

    // Import the required libraries
    const fs = require('fs');
    const bcrypt = require('bcrypt');
    
    // Set the number of salt rounds
    const saltRounds = 10;
    
    // Define the IXMPPClient2 class
    class IXMPPClient2 {
      // The ChangePassword method takes a new password as an argument
      async ChangePassword(newPassword) {
        // Read the user's current password from the file
        const passwordFile = `user.cfg`;
        const currentPassword = fs.readFileSync(passwordFile, 'utf-8');
    
        // Check if the user is authenticated (i.e., they provided the correct password)
        if (bcrypt.compareSync(currentPassword, currentPassword)) {
          // Hash the new password and write it to the file
          const newPasswordHash = bcrypt.hashSync(newPassword, saltRounds);
          fs.writeFileSync(passwordFile, newPasswordHash);
    
          // Return true to indicate that the password change was successful
          return true;
        } else {
          // Return false to indicate that the password change failed
          return false;
        }
      }
    }

    better still we could use the existing hashing method if we don't necessarily have to use bcrypt

  7. 43 minutes ago, Norse_Harold said:

    Shyft_Sierra, if you're extremely motivated to help newbies, then you can do it in a respectful manner with zero insults.

    once again, i agree. You could feel the supremacy in his comments. Being good doesn't mean stumble on bad players. If a player is in your team and  not playing well, there are better ways to let the person know instead of insulting. I completely understand where you are coming from @shft. A little dip of politeness could change everything when trying to talk to a player that's playing bad in your team. Simple Politeness Theory

    negative politeness strategies: performed to avoid offense through deference ( in most cases this is you)

    positive politeness strategies:  performed to avoid offense by emphasizing friendliness.

    Most players will gladly listen to you if you talk to them in the right way.755760638_Screenshot2022-12-08043528.png.21d8aca4a2138441cd99558edd3b5130.png

    Like the attachment above: as far as the people you are dealing with are okay with it, nobody will stop you. When a player is not okay with it , thats when to limit it. After all nobody is trying to change your behaviour. The main aim is protecting the community itself cause there are children 13 and below who also play the game

     

    • Like 1
    • Thanks 1
  8. 1 hour ago, Bellaz89 said:

    Might be an idea, but all players, including the ones that are not registered in the forum should be aware of that IMHO. Screenshots might be useful but at the same time might be dangerous and be abused since they lack the whole context of the discussion.

    e.g.

    1. Player 1 insulting player 2
    2. Player 2 insulting player 1 back
    3. Player 1 taking a screenshot of player 2 in-game discussion. Previous in-game messages of player 2 are not displayed.
    4. Now player 2 get all the blame even if player 1 started insulting player 2

    + Someone might do fake screenshots

    So I would be extremely careful in how these screenshots get evaluated.

    I am not even sure a standalone thread should be public at all wrt. sending the screenshots directly to moderators.

    Just first naive thoughts about that

    i agree.

  9. i thought of this too, resetting ratings every alpha would be better. Most 2000+ players do not move on unless they find a player >= 1900 to play with. Lorenz123 left the game years ago and somehow still remains in top 100 till now, i think he's in top 15. This is because higher players needs to play with other higher ranked players in other to get good ratings. If there's no higher ranked player to play with, the leaderboard is just stagnant. I bet 80% of the top 100 players are offline for years, making it hard for the leaderboard to move as its supposed to

    • Like 4
  10. 53 minutes ago, real_tabasco_sauce said:

    is 0ad not 3D?

    Honestly, I think 0ad has a massive edge graphically even over AOE4 with its massive budget. AOE 4 looks goofy and cartoonish, and apparently it only runs fast on the lowest settings so it looks even worse in that configuration.

    I think one way to make 0ad more "modernized" would be to improve accessibility. It seems to me that players these days often just want to jump right into a playlist with matchmaking as soon as they are set up with an account and knowledge from the tutorial/tech tree.

    In other words, it might be a bit of a turn-off to join the lobby and have to pick a 1v1 or host their own game.

    Within the lobby, I can envision a "Ranked" quickplay button which will queue you up for a 1v1 with an opponent determined by matchmaking. I'd say this would improve accessibility and the competitive interest of the game.

    These ranked games would have a standardized set of random maps (maybe feldmap incorporated into main game), a particular map size, population cap, and starting res.

    i completely agree, recently bought AOE4 for $45 or so and instantly regretted. It's just too realistics doesn't feel more like an rpg. I bet 0ad is way better as compared to AOE4 from my POV. Faster and competitive games, requires smart approaches and fast thinking to overcome opponents, that's what RPG is all about. In AOE you cant use a scout to gather food, women can take forever to gather etc. The only best thing about AOE4 is their graphics. If we are to compare 0ad with AOE4 headon, i definitely would say 0ad stands out.

    About time people should get to know 0AD :)

    #0adtotheworld

    • Like 4
  11. He almost does this in every single game , regardless of your age or position. Sometimes he insult literally for no reason at all. I try hard to understand him but no point. So far the best solution is to mute him or if you are host just prevent him from joining your games.

    There are rules in the lobby itself. This behavior in the main lobby is solely prohibited as you know. But during game, i believe players needs to take actions themselves, ignore, mute, kick or ban him. Rage is almost in every gaming community and it's understandable by me but he really over do it . Insulting player's parents, telling people to commit suicide etc is a very dangerous thing to overlook. I hope @user1 @Stan` looks into this

    • Like 1
    • Thanks 1
  12. On 22/11/2022 at 10:14 PM, seeh said:

    thanks. i don't have a sprite file for that.
    its only a part of the normal game options (0ad>Setting>Options>ModProfile Selector )

    the other options from other mods also dont have wide large strings. so mabe its not possible there.

    take a look at options.xml

  13. 3 hours ago, seeh said:

    i use a string input filed and it works very nice. but not good to see when the content is large and the space left is not used.

    source:

    		"label": "mod Profile Selector",
    		"options": [
    			{
    				"type": "string",
    				"label": "p0 (if you set checkbox to many profiles only the first will be used and enabled.",
    				"tooltip": "all your mods that you want to enable (BTW see line mod.enabledmods in your user.cfg).",
    				"config": "modProfile.p0"
    			},

    screenshot:

    Screenshot_20221122_132500.jpg.44116318750f8832845dd61e3a4302e2.jpg

    how (if possible) could increase the space for this string input field?

     

     

     

     

     

    maybe check the sprite file, you can adjust the ui there?

  14. 4 minutes ago, sarcoma said:

    Modern music is not respected because there is too much crappy commercial music. You don't need to have talent or studies, just look nice and they will digitally fix the sound (or just lip synch), but the quality will still be crap.

    It happens to other fields too. Computer science is not respected where I'm from, it's considered just a tool or a mundane trade, a joke. The job market is full of website developers and other lame jobs and they hire any techie, any engineer, physicist, biologist, accountant, high school student, or whatever.

    Gone are the good old opera days :(

     

    • Like 2
  15. 2 hours ago, Conisco said:

    Hi

    It had been a long time since I had logged in to play, and I forgot my password. Is there a way to get it back?

    Thank you

    Hello @Conisco, at the moment - there's no password recovery feature yet. You can either contact @user1 , @Dunedan, or any of the moderators to help you get back into your account.

  16. 1 hour ago, real_tabasco_sauce said:

     

    Changelop in writing:

    #This is a written changelog for additional merges to each version of the community mod. If you would like to review the exact details on each merge, visit this link: https://gitlab.com/0ad/0ad-community-mod-a26/-/merge_requests?scope=all&state=merged

    -0.26.1-
    !1  Set up gitlab with continuous integration to the mod.
    -0.26.2-
    !2  Han farming technologies (village and city phase) fixed.
    !6  Regicide mode infinite loop from enabling hero garrison fixed.
    -0.26.3-
    !4  Move tier 3 blacksmith technologies to the town phase.
    !5  Healers cost 100 food 25 metal, cheaper temple technologies.
    !8  Themistocles now provides a wall discount as well as a naval buff, Pericles provides technology discount and soldiers in his aura do not give loot.
    !10 Civic centers and colonies decreased cost, decreased territory expansion with each age.
    !11 Axe cavalry buff to hack damage.
    !12 Change to ptol civ bonus: Ptolemies houses, storehouses, farmsteads +50% build time and -40% capture points.
    !13 Team Bonuses: Athens get CC technologies -30% cost, -50% research time, Seleucids get CC decreased build time too, Persians get cheaper barracks and stables, Carthage gets -50% mercenary infantry train time.

     

    Changelog file: community_mod_changelog.txt

    ty

    • Like 1
  17. 16 minutes ago, 5XT said:

    Random disconnections started a month ago. Connection is perfect and i can join back immeadiately, but disconnections keep happening. Sometimes they dont, sometimes they happen 5x in a row. Can admins fix it somehow? Happens with mod or without mod. 

    It does happen to me sometimes but i later noticed sometimes wifi reboots by itself - it happens quickly you may not notice, it disconnects and reconnects. I dont think its a problem with 0ad, possibly your isp or router,

    Restarting the router manually may fix it. It does not only work this way with WiFi. It also works with ethernet connections, pieces of software, etc. Funny how in technology a bunch of things are fixed this way.

    When it comes to WiFi connections, the network adapter might reload the wireless connections profile. What also might happen is that your computer might end up without any connection since the DHCP server allocated an IP address to the machine at some point back in time and now the addressing scheme might have changed.

    Device drivers might also suddenly no longer be compatible with your operating system or even not work properly due to conflicts with other parts of the system.

    Wireless connections are prone to the medium and this might turn out creating the most varied connection issues on the network card. Which are not as easily detected or troubleshooted as in wired connections.

    • Like 1
×
×
  • Create New...