Commit Graph

1048 Commits

Author SHA1 Message Date
gsemaj
0e054e21b6 Fix timed out buffs not calling onExpire 2022-07-30 22:35:16 -07:00
gsemaj
ad9bf2a9e3 Buff framework tweaks + polish 2022-07-30 22:35:16 -07:00
gsemaj
a38bf0e7be Rework buff callbacks
The first implementation was way too complicated and prone to bugs.
This is much more simple flexible; first off, std::function is now used
instead of a raw function pointer, so lambdas and binds are fair game
which is great for scripting. Second, callbacks for all stacks are
executed. It is up to the callback target to ensure correct behavior.
2022-07-30 22:35:15 -07:00
gsemaj
3d22103113 oops 2022-07-30 22:35:15 -07:00
gsemaj
761581afd7 CRLF purge in Buffs.cpp 2022-07-30 22:35:15 -07:00
gsemaj
daec7a33b7 egg prep 2022-07-30 22:35:14 -07:00
gsemaj
462ced6685 Move Buff implementation to Buffs.cpp 2022-07-30 22:35:14 -07:00
gsemaj
cc190efc63 New buff framework (player implementation)
Get rid of `iConditionBitFlag` in favor of a system of individual buff
objects that get composited to a bitflag on-the-fly.
Buff objects can have callbacks for application, expiration, and tick,
making them pretty flexible. Scripting languages can eventually use
these for custom behavior, too.

TODO:
- Get rid of bitflag in BaseNPC
- Apply buffs from passive nano powers
- Apply buffs from active nano powers
- Move eggs to new system
- ???
2022-07-30 22:35:14 -07:00
gsemaj
df1b4ff160 The great re-#include
Was getting frustrated by the inconsistency in our include statements,
which were causing me problems. As a result, I went through and manually
re-organized every include statement in non-core files.

I'm just gonna copy my rant from Discord:
FOR HEADER FILES (.hpp):
- everything you use IN THE HEADER must be EXPLICITLY INCLUDED with the exception of things that fall under Core.hpp
- you may NOT include ANYTHING ELSE

FOR SOURCE FILES (.cpp):
- you can #include whatever you want as long as the partner header is included first
- anything that gets included by another include is fair game
- redundant includes are ok because they'll be harmless AS LONG AS our header files stay lean.

the point of this is NOT to optimize the number of includes used all around or make things more efficient necessarily. it's to improve readability & coherence and make it easier to avoid cyclical issues
2022-07-30 22:35:13 -07:00
gsemaj
9f7c8a18df Get rid of player fire rate suspicion
This was super primitive & jank, and caused false positives.
Will replace with a polished system later on.
2022-07-30 22:32:25 -07:00
gsemaj
ea61ed1aaa Handle case where cmake is invoked outside root 2022-07-30 22:32:25 -07:00
gsemaj
9982d9bdda Start moving passive power processing to playerTick 2022-07-30 22:32:25 -07:00
gsemaj
398e9fddf8 Groundwork for new buff system 2022-07-30 22:32:24 -07:00
gsemaj
fd664c4f19 Active power classification 2022-07-30 22:32:24 -07:00
gsemaj
feaaf4cab9 some struct reorg 2022-07-30 22:32:24 -07:00
gsemaj
d3e6bae5d9 Replace group filter operator with function 2022-07-30 22:32:24 -07:00
gsemaj
0f042c4233 Ignore .bak files
for my local backups lol
2022-07-30 22:32:24 -07:00
gsemaj
3dc7124f58 Refactor player groups
Group structures are used now. Adds more checks in some places but simplifies things overall.
We can expand this system to entities as well now pretty trivially.
2022-07-30 22:32:23 -07:00
gsemaj
71e78afa0b (WIP) EXPERIMENTAL GROUP CHANGES 2022-07-30 22:32:23 -07:00
gsemaj
0a2b3fbdad (WIP) TODO ABILITIES 2022-07-30 22:31:18 -07:00
gsemaj
911dbaab83 Move mob aggro logic into takeDamage override
God that feels good
2022-07-30 22:31:18 -07:00
gsemaj
7183180be5 (WIP) Move away from rigid states/transitions to allow custom behavior 2022-07-30 22:31:18 -07:00
gsemaj
3f1f78942e EntityType -> EntityKind 2022-07-30 22:31:18 -07:00
gsemaj
a9dea36882 (WIP) onRoamStart hook implementation 2022-07-30 22:31:17 -07:00
gsemaj
de23779209 (WIP) Remove BaseNPC::barkerType to save space 2022-07-30 22:31:17 -07:00
gsemaj
748a82e223 ope 2022-07-30 22:31:17 -07:00
gsemaj
231e88fd55 (WIP) onCombatStart hook implementation 2022-07-30 22:31:17 -07:00
gsemaj
abfb562489 (WIP) onDeath hook implementation 2022-07-30 22:31:17 -07:00
gsemaj
589c5a8732 (WIP) Add src param to transition + certain hooks
Should all hooks have src? I think not
2022-07-30 22:31:17 -07:00
gsemaj
0b8b92b7f6 (WIP) Transitions + hook definitions + onRetreat hook implementation 2022-07-30 22:31:17 -07:00
gsemaj
f0cf6326e5 (WIP) Point 2: Generalization 2022-07-30 22:31:16 -07:00
gsemaj
82bc94c01c (WIP) Point 1: step functions 2022-07-30 22:29:14 -07:00
gsemaj
5d9dcb8609 (WIP) Start implementing ICombatant
Start by replacing `hitMob` with `takeDamage` interface function.
Simplify `pcAttackChars` a little by utilizing the new interface, then add more interface functions as needed.

A lot of the combat logic is tied to the `Mob` class. Need to start moving stuff over to CombatNPC.
2022-07-30 22:29:13 -07:00
gsemaj
166e148878 (WIP) Move ICombatant functions around a bit 2022-07-30 22:29:12 -07:00
gsemaj
14b02ec5d2 (WIP) Initial ICombatant draft 2022-07-30 22:29:12 -07:00
d50c312227 [refactor] Get rid of NPC.hpp
This file was already obsoleted at the start of the refactor, but seems
to have escaped notice until now.
2022-07-30 22:29:10 -07:00
18ed96493f [refactor] Replace a few uses of magic numbers with enums 2022-07-30 22:29:10 -07:00
71a7d3d164 [refactor] Cosmetic cleanup in Fuse fight functions 2022-07-30 22:29:08 -07:00
520efd6dd5 [refactor] Remove redundant coord args from most entity constructors
Mobs and CombatNPCs still need theirs in order to properly set their
roaming and spawn coords. Assignment of the latter has been moved to the
CombatNPC constructor, where it should have already been.
2022-07-30 22:29:08 -07:00
gsemaj
0a8ef2ebbd [WIP] Stub power handler 2022-07-30 22:29:06 -07:00
gsemaj
3f4aca8a5d [WIP] Use EntityRef instead of CNSocket in ability handler 2022-07-30 22:29:06 -07:00
gsemaj
b0de75d80e [WIP] Replace appearance data with individual fields
Storing certain things in appearance data and others in their own fields
was gross. Now everything is stored on the same level and functions have
been added to generate appearance data when it's needed by the client.
2022-07-30 22:29:05 -07:00
gsemaj
8f88edaad1 [WIP] Rename Entity.type -> Entity.kind 2022-07-30 22:29:04 -07:00
gsemaj
6896d35427 [WIP] Fix Nanos -> Abilities namespace calls 2022-07-30 22:29:01 -07:00
gsemaj
d74a9747d9 [WIP] Initial merge of ability namespaces & features 2022-07-30 22:29:00 -07:00
2dbe2629c1 Tweak CNShared
* Separate pruning frequency from timeout
* Pluralize CNShared map: login -> logins
* Increase connection timeout to 15 minutes
* Do not deallocate a nullptr in playerEnter()
* Kill connections rejected by playerEnter()
* Remove redundant inclusions of mutex headers in a few places
2022-07-31 03:19:27 +02:00
271eef83d3 [seccomp] Add support for AArch64
This is useful for 64-bit Raspberry Pis and other 64-bit ARM systems.
2022-07-24 22:40:46 +02:00
ca0d608a87 Use cryptographic RNG to generate the shard connection serial key 2022-07-24 21:36:03 +02:00
741bfb675b Revamp CNShared logic
* Use a specialized connection object
* Copy the Player object less frequently
* Use a randomly generated serial key for shard auth
* Refuse invalid shard connection attempts
* Clean up connection metadata when a Player joins the shard
* Prune abandoned connections when they time out
2022-07-24 21:36:03 +02:00
c5dd745aa1 Rename CNSharedData namespace to CNShared to match the filename 2022-07-24 21:36:03 +02:00