War Of Worlds DevLog #10 - Anticheat, Backend and GUI

Update 10 - Performace and Anticheat


First Devlog Previous Devlog Next Devlog


Hello! Good day to you all. Today I would like to share some more progress of the game. Progress has been kind of slow due to college restarting. However, I plan to release the game on Alpha on the 1st of Janruary Next year. Right on with the DevLog.

Vindicroy Controller

The biggest improvements I think have been in the Vindicroy Controller. I used to have the controller event driven. However that for some reason made the system unreliable.

A quite big improvement I think it that I added the spawn point in the air.

This is the ship that they will spawn from.

A new feature is that they will glide with wings to the ground. The actual gliding bit is actually realistic and I made a loop which takes into account the orientation of the wings and size too. I think it works really well.

To be continued…

Main Menu GUI

A small improvement too is that the main menu GUI has now improved a bit because I added proper camera system. what is also a bonus is that the Menu also feels more reponsive as I added sound and background music too. I added a store and more settings such as vfx and camera shake.

Map improvements

I also recently started to rebuild the map. I thought since almost no games make use of the CSG system I would have liked mine to stand out of the crowd. Therefore, I am going to have destructible buildings in game.


And of course the objects will be manipulatable. You will be able to fling these objects at enemies if you are part of the Ashaway team and you can drag objects to form a barrier if you are on the Infraction Team.

Anticheat and Backend

I have also backed in anti cheat to the system too. For example, there is a dictionary which stores all the users current spells. If the spell is not in the dictionary and is fired by a user or a weapoon is equipped and the user doesn’t have access to that weapon. Ban.

I also realized that such code does not need to be run every frame so you can simply wait several frames before.

-- Small snippet
local function Stepped(Time,DeltaTime)
    RateLimiter += 1
    if RateLimiter % Rate == 0 then
        table.foreachi(PlayerList,
            function(_, Player)
               local LastPosition = PFPosition[Player]
               local CurrentPosition = Player.Character.PrimaryPart.Position
               local DeltaPosition = CurrentPosition - LastPosition
               if DeltaTime * MaximumVelocity < (DeltaPosition.X + DeltaPosition.Y + DeltaPosition.Z) then
                   AshawayHandler:AddToList("Ban",Player)
               end
            end
        )
    end
end)

I also did something with Melee for Ashaway. Since I am not really an animator the animations don’t look too good but I figured out that if I have the Raycast on the client I can decrease server workload even more.

-- Another Small Snipped

local function MeleeContact(Player: Player, OtherPlayer: Player)
    local CFrameP = Player.Character.PrimaryPart.CFrame
    local PositionO = OtherPlayer.Character.PrimaryPart.Position
    if Player.Team == OtherPlayer.Team then
        AshawayHandler:AddToList("Moderation",Player)
        return
    end
    if CheckDot(CFrameP.LookVector, (PositionO - CFrameP).Unit) then
        Player.Status.Health -= WeaponEquipped[Player].Damage
    end
end

I have also implemented a list where I can type commands into chat and then see the information of players that need to be moderated. I haven’t completely finished it yet but I have high hopes.

With the backend I found a couple of useful modules that I would like to use for making sure players data is saved. I am thinking of creating my own datastore module for this as I don’t find the modules that are already available to be any benefit to me.

I organized a lot of the code. It makes it a lot easier to read and fix problems too.
image
image

Yes. Only 1 server script.

for me personally I found that having everything in 1 place greatly increases my efficiency. There are only 4 scripts 1 Server and 3 local that I need to worry about. Much of the code is actually inside those modules. The reason why I did this is because in my last game I think I had 10 different scripts all doing different things. It really killed my motivation. But now, I feel everything has it’s place and is organized.

5 Likes

Looks cool but it looks like its falling more lol.