Website SQL POC suggestion to Royals to reduce occurrence of unknowningly/knowingly double/infinite voting

Discussion in 'Feedback' started by Wayne Low, May 7, 2024.

  1. Wayne Low
    Offline

    Wayne Low Active Member

    Joined:
    Jul 27, 2018
    Messages:
    39
    Likes Received:
    14
    Gender:
    Male
    Country Flag:
    IGN:
    Ganache
    Level:
    150
    Guild:
    -
    Hello everyone, I have been playing since 2016, on and off, started off as a cleric, deep down I am reluctant to see it all go away, I don't wish to see another player ending up like me..

    I always have a question in my mind, why can't Royals implement some sort of mechanism to prevent users from double/infinite voting?
    Reasons that I push for this because:
    - Reduce drama in Ban appeals when players submit appeals after found banned for double voting
    - Reduce overall workload bore by Royals's staff as a result of less vote abuse bans, thus they have more time to progress on other tasks that can contribute to Royals's wellbeing
    - When double/infinite voting is prevented, this would be fair for every active players
    - Any benefits in term of economy? I am not certain, as I have no economy knowledge
    - Overall this is for the wellbeing of Royals, although I wont be playing anymore, but I hope Royals can continue to improve and exist for years to come, for the sake of all old players like me..

    Please refer to the technical information below to understand how the suggested implementation works
    -- The POC will work if the parameters I stated in first, second and third tables are possible to be retrieved, which I have no means to find out, if not, I believe there are always possibilities to find a
    solution to prevent double voting through logics similar like below..

    I assume there will be some sort of database table storing info like below, if its a log, there are always possibilities to populate it as table:
    - First table (Accounts) - Stores player's account info such as: (ID, AccountCode, UserName, syscreated, etc..)
    - Second table (LoginLogs) - A log/table (associate type) storing a user's login info such as: AccountID, LoginTime, LogoutTime, PublicIP, MacAddress, etc..)
    - Third table (VotingLogs) - A log/table populated with voting information such as: AccountID, PublicIP, VotingTime, the voting client's MacAddress (or any form of unique info that can identify a single client)

    When is the trigger to call the query logic?
    Ans: The moment when a user clicks 'Vote' in Royals's voting page, callback happens, and web server runs query to check from Royals's database

    Logics to determine if a user is attempting to double vote simply by playing around from Royal's database (three tables above):
    1. Identify the user's other accounts by utilising information obtained from LoginLogs
    2. After obtaining user's other accounts, check against VotingLogs with the respective AccountIDs found from LoginLogs
    3. By checking VotingLogs, its possible to retrieve the voting records generated by user's other accounts
    4. If Count = 1, then the web server prompts error to client page to prevent user from voting, if Count = 0, Redirect to GTOP for voting
    -- Remarks: This could even trigger the moment when a user is landing on the voting page, web server can directly determine the need to disable voting button

    DECLARE @AccountID AS uniqueidentifier = '' --Can already be retrieved the moment when user is landing on the voting page

    SELECT SUM(ISNULL(COUNT(vl.ID), 0))
    FROM Accounts a
    LEFT OUTER JOIN LoginLogs headerLogs ON (a.ID = ll.AccountID)
    LEFT OUTER JOIN LoginLogs lineLogs ON (headerLogs.PublicIP = lineLogs.PublicIP OR headerLogs.MacAddress = lineLogs.MacAddress)
    LEFT OUTER JOIN VotingLog vl ON (lineLogs.AccountID = vl.AccountID)
    WHERE a.IsBlocked = 0 --assume if this exist to check Banned status
    AND a.IsEligibleToVote = 1 --assume if this exist to check Level 50
    AND a.ID = @AccountID
     
    andywtf likes this.

Share This Page