c5776b9322
[refactor] Split Database.cpp into db subdirectory
...
* Database.hpp is still the only external include file (moved to db/)
* The header is still uppercase to match its namespace
* db/internal.hpp is the shared header for the DB source files
* Added -Isrc/ compile flag for src-relative include paths
* Hoisted CHDR above CSRC in Makefile (it was bothering me)
* make clean now removes all objects in the subdirectories as well
2021-03-16 02:13:24 +01:00
gsemaj
dd41d5b610
[refactor] Split vendor functions and crocpot out of NPCManager
2021-03-15 10:48:27 -04:00
gsemaj
8981ad8c14
[refactor] Separate email functions out of BuddyManager into Email
2021-03-15 10:29:54 -04:00
df1ac82300
[refactor] Separate internal and external DB functions
2021-03-15 00:36:20 +01:00
ec67cc6527
CNServer::start() now uses an iterator instead of indexing repeatedly
2021-03-14 01:33:46 -06:00
2024fb4969
[refactor] Split MobManager.cpp into MobAI.cpp and Combat.cpp
...
This is terrible. It was a mistake to do this before cleaning up the
actual code. It might be better not to use this commit and to do this
refactor in a different order or something.
2021-03-13 23:55:16 +01:00
ae279100d7
[refactor] Extract Abilities.cpp from {Nano,Mob}Manager.cpp
...
I've kept all the functions in their original namespaces for now, since
putting them all into the same one will cause collissions, and this is
all getting rewritten soon anyway.
2021-03-13 21:22:29 +01:00
e92a5a2f8b
[refactor] Split ItemManager.cpp into Vendor.cpp & Trading.cpp
...
- added sources to Makefile
- Added Trading::init() to main.cpp
2021-03-12 20:09:45 -06:00
ce197d7db3
[refactor] Extract PlayerMovement.cpp from PlayerManager.cpp
2021-03-13 02:59:18 +01:00
f9c2587557
[refactor] Extract BuiltinCommands.cpp from PlayerManager.cpp
...
And move itemGMGiveHandler() from ItemManager.
2021-03-13 02:59:18 +01:00
2d7129111a
[refactor] Refactor ChatManager
...
* Extracted all commands into CustomCommands.cpp
* Moved all chat-related packet handlers into ChatManger.cpp
* Cleaned up redundant includes
* Unified handler naming scheme
* Made all command handlers in CustomCommands.cpp static
2021-03-13 02:59:18 +01:00
4cd3a3dabd
[refactor] src/contrib, src/mingw -> vendor
2021-03-13 02:58:57 +01:00
f7e9cc2cea
Disallow attaching the same item to an email twice
...
Also fix vendor buying validation not allowing crates to be bought,
since apparently their maximum stack size is 0 in TableData.
2021-03-10 00:13:46 +01:00
89eb0b140b
Use the right packet for when a player falls out of the world
...
SUDDEN_DEAD is more appropriate than goo damage for this.
Also made it so other players can see when someone does a /health 0, for
comedic effect.
2021-03-09 21:23:57 +01:00
f5a34b9a3d
Reject completion packets for missions that aren't in progress
...
Also reject players requesting more than 6 missions.
This is just a minimal measure to prevent replaying mission completion
packets. This part of the codebase will be largely refactored soon, so
more through changes can wait.
2021-03-09 18:30:58 +01:00
ffe5947925
Keep track of sold items so we can validate buyback packets
2021-03-09 16:45:38 +01:00
0fbdb1dad2
Improve sanity checks when opening crates and combining items
...
And ignore ITEM_MOVE packets while trading.
2021-03-08 22:31:25 +01:00
d781fae3ba
Merge-in the general changes that were on the injusticefoe branch
2021-03-07 15:56:11 +01:00
3445c0bbc3
Tweaked mob and nano skills
2021-03-07 15:56:02 +01:00
540c37a523
Aggro is now affected by level
2021-03-07 15:56:02 +01:00
33a26cda7c
Split mob heal types
2021-03-07 15:56:02 +01:00
dc6de46a1f
Added ON_COMBAT trigger
2021-03-07 15:55:51 +01:00
c5e08b81da
Implement /ban command
2021-03-07 00:38:24 +01:00
5e569d4324
Disallow selling Croc-Potted items
...
Also, make sure to explicitly terminate the connection when a player is
kicked, and align a few fields in tables.sql.
2021-03-07 00:38:24 +01:00
f2b1a84ef4
Fix segfault when redeeming more than four items at once
2021-03-06 02:09:21 +01:00
d5fe1cc513
Work around not being able to reach the shard from a local connection
...
In certain circumstances, like when running a private server through
Hamachi, the shard IP will be set to an address the local machine can't
reach itself from, preventing only the local player from getting past
character selection. This workaround detects local connections and
sends a loopback address for the shard instead of the configured one.
This makes those use cases feasible.
2021-03-05 19:00:13 +01:00
81c2a2a8b3
Mob Leech and Freedom
2021-03-05 14:34:08 +00:00
f7c84c62ed
Possibly fixed item duping via trading
2021-03-05 14:18:36 +00:00
da8dde9818
Do not dynamically allocate memory in CNSocket::sendPacket()
...
Also reorder the rapid fire check in MobManager::pcAttackNpcs(), so the
output packet validation happens immediately before the buffer is
initialized, for clarity.
2021-03-04 19:51:43 +01:00
Gent
29dbe83a0b
Skip item stacking logic if items not found in XDT
2021-03-04 11:22:01 -05:00
5fdef50f0f
Fix failure to summon the highest NPC_ID
...
And update tdata.
2021-03-03 23:17:36 +01:00
217168fe50
Improve DB and Nano sanity checks
...
I'm aware that the DB checks still allow ID 0 items and Nanos, but the
point of those is primarily to prevent invalid memory access.
2021-01-27 02:27:08 +01:00
CakeLancelot
04a17ed862
Record claimed code items, and other misc DB fixes
...
* Create new table to store redeemed codes
* Check if a player already used a code when using /redeem
* Change Coordinate columns to non-plural form
* Fixed EmailItems unique constraint not being specific enough
* Bumped DB version to 3
2021-01-19 14:05:54 -06:00
74af1ad173
Set iOpt to 1 for mission rewards and disallow trading iOpt 0 items
...
Co-authored-by: Jade <jadeshrinemaiden@gmail.com>
2021-01-17 22:57:07 +01:00
34bd7c102f
Validate emails as they're being sent
2021-01-06 14:30:25 +01:00
CakeLancelot
9e30e55669
eggBuffPlayer now takes duration, and buff duration is read from EggType
2021-01-06 05:56:54 -06:00
46b6d9fcc7
Include CNStructs.hpp in settings.cpp for the ACADEMY define
...
This fixes the spawn point being wrong.
2021-01-06 12:30:33 +01:00
2bf3fd0975
Further sanity checks for shops
2021-01-06 11:47:07 +01:00
442f85c7a6
Make paths.json academy-specific
2021-01-05 14:07:41 +01:00
b87229aa65
Reject requests to equip items into the wrong slot
...
This is important because the client can genuinely send such an invalid
packet by mistake during normal gameplay.
If a sanity check fails, we don't need to send any sort of "move it but
keep it where it is" packet, since simply ignoring the invalid request
doesn't softlock the client.
Also improved validation of inventory slot indexes.
2021-01-05 13:17:59 +01:00
deca220d43
Do not auto-register all fast travel destinations for GMs
...
Instead, players with access level 50 or higher can use /registerall and
/unregisterall.
2021-01-05 12:44:38 +01:00
74e06f1084
Trading Refactor
...
- Its no longer possible to dupe items by stacking inventory slots in a trade.
- Stacked items work correctly now.
2021-01-04 23:57:50 +01:00
ddc7caf959
Basic Anti rapidfire
2021-01-04 23:57:50 +01:00
6baa0c5b07
Group related fixes
...
- Group adding is not leader only now
- Group buffs work now
2021-01-04 23:57:50 +01:00
d4eaf83354
Fixed Instancing Bugs
2021-01-04 23:53:44 +01:00
47d13ce39e
Fixed Group Mob Retreat
2021-01-04 23:53:38 +01:00
2b95bc660c
Fixed Quest Item Bug
2021-01-04 23:52:15 +01:00
0e3fac4d34
Updated tdata and changed how the default JSON paths are resolved
2021-01-04 17:08:44 +01:00
4516227a7b
Fix a few GM issues
...
* Invert access check when kicking players
* Add validation to ensure only GMs can PVP
* Account for instance in /teleport2me
2021-01-01 21:38:03 +01:00
Gent S
954cfabde5
Add ID gaps for missing NPCs in Academy
2020-12-31 11:26:17 -05:00
966bd3edd2
Group members share the same mob drops
...
This includes quest items.
2020-12-31 14:13:14 +01:00
dab204ddaf
If compiled for Academy, do not spawn NPCs in the Future zone
2020-12-31 14:13:08 +01:00
bad8ef1d10
Kill players that fall out of the map
2020-12-31 12:51:36 +01:00
a12acbb68f
Implement most of the remaining client-side GM commands
...
* Muting a player's freechat
* Kicking players
* Querying info about a player
* Teleporting yourself to a player
* Teleporting a player to yourself
* Teleporting a player to another player
* Teleporting a player to arbitrary coords
* Teleporting a player to arbitrary coords in an arbitrary mapnum
* /unstick
Also:
* Renamed misleading setSpecialPlayer() to setValuePlayer()
* Revamped monitor logic
* Added server-side checks to account level 50 commands
* Made sure even trade chat is run through sanitizeText()
* Moved setSpecialState() closer to its calling functions
* Interpret client commands even in Buddy and Group chat (but not in
Trade chat)
2020-12-31 12:51:31 +01:00
c78b3ca69f
Do not cancel the ongoing race on recall
...
Also do not remove the player's vehicle if the player isn't on a
vehicle.
2020-12-31 03:00:54 +01:00
55431362a7
Make sure the current race is cleared when leaving an IZ
2020-12-28 18:40:26 +01:00
07a930fe1c
Fix vehicles in IZs for real this time
2020-12-28 18:40:26 +01:00
4060bf25b0
Fix recall removing FM pods if racing
2020-12-28 16:55:13 +01:00
9a79ab3927
Reduce mob range when racing as if the player were sneaking
2020-12-28 16:41:29 +01:00
fc45775666
Add /unwarpable command
...
GMs should use this before going to weird places where their non-GM
buddies might warp to them and get stuck.
2020-12-28 16:24:24 +01:00
81d0964971
Disallow warping to players using the MSS
2020-12-28 16:13:38 +01:00
868dc8485e
Allow GMs to enter private instances
2020-12-28 16:12:57 +01:00
26f4767082
Add additional validation to the recall power
2020-12-28 16:12:23 +01:00
d97444cca5
Remove each group member's vehicle when warping into an instance
2020-12-28 00:50:58 +01:00
ee978e8bc9
Limit group member drops based on proximity
2020-12-27 21:14:16 +01:00
Gent S
bdf283ae4f
Make heal nanos heal for the correct amount
2020-12-27 09:23:43 -05:00
f8129b91cb
Zero both players' moneyInTrade when initiating a trade
2020-12-26 20:13:23 +01:00
afea9f436f
Check if otherPlr is null in nanoRecallHandler()
2020-12-26 20:09:33 +01:00
7985fc475b
Fix regression with spawning in an invalid Nano #37
2020-12-24 07:41:22 +01:00
959a708176
Return to the overworld instance when warping to a buddy
2020-12-24 06:05:05 +01:00
44fbb8e81f
Fix other group members not respawning properly in Lairs
2020-12-24 05:22:46 +01:00
Gent S
7fe0e19bb0
Fix IZ races rewarding invalid items
2020-12-23 18:31:42 -05:00
Gent S
82d5455da6
Ignore race rewards for EPs that aren't found
2020-12-23 14:53:56 -05:00
Gent S
52389c2c69
Make code redemption case-insensitive
2020-12-23 13:50:12 -05:00
Gent S
ae75324153
Fix duplicate tasks on instanced mission failure
2020-12-23 13:50:12 -05:00
Gent S
a1a5815f1f
Fix academy nano missions not going into the 0th slot
2020-12-23 13:50:12 -05:00
Gent S
772f80188e
Prevent duplicate running tasks from loading into the Player struct
2020-12-23 13:50:12 -05:00
kamilprzyb
f28c643b48
Allow permanent vehicles
2020-12-23 13:50:12 -05:00
Kamil
5f82658c8d
adjusted item codes logic to handle multiple items per code
2020-12-23 13:50:12 -05:00
50b2bdcb16
Fixed Nano Style Issues
2020-12-23 13:50:12 -05:00
Kamil
34dbb59fb1
Implement redeem codes
2020-12-23 13:50:12 -05:00
Kamil
a74c9be2ff
Implement Nano capsules
2020-12-23 13:50:12 -05:00
fcdea2e723
Implement multiple-choice mission rewards
2020-12-23 13:50:12 -05:00
90191fd494
Add academy.json loading to TableData
...
This is where the permanent Academy-exclusive NPCs and mobs will be
loaded from. Resurrect 'Ems work now.
2020-12-23 13:50:12 -05:00
Gent S
effbbd9a5e
Fix level-up not triggering and using wrong packets
2020-12-23 13:50:12 -05:00
bc7f4883a2
Add Academy defaults to the config file
2020-12-23 13:50:12 -05:00
e0808ffcbd
Read the NPC ID limit from the XDT
2020-12-23 13:50:12 -05:00
9057f31bff
Implement Academy level-up
2020-12-23 13:50:12 -05:00
0a9f637123
Do not give the Lightning Gun and Buttercup Nano to new Academy players
...
And do not mark the two missions from the old Tutorial as completed.
2020-12-23 13:50:12 -05:00
027f513a23
Save Academy Nanos to DB
2020-12-23 13:50:12 -05:00
a99f95d15f
Initial Academy support
...
Support for the Academy's Nano system is complete, but they're not being
saved to the DB yet.
2020-12-23 13:50:12 -05:00
0104bc9329
Enemy ability tweaks
...
- Battery drain does not set your battery below 0.
- Debuffs cast by enemies take into account intensity now. (Snare will work)
- Used int_max to replace arbitrary 20000, added more comments.
2020-12-22 12:12:02 -05:00
4fc5c092f8
Attack logic and various balance changes
...
- combatStep was altered, the mob can attack and give chase at the same time. Kiting melee mobs around is much harder.
- Mobs in general are more harder, closer to how it was in retro.
- Nanos styles are less detrimental to battle.
2020-12-22 11:30:57 -05:00
8d1bc94b7e
Mission Handling Fixes
...
- Q. Item count glitches are dealt with
- Warping out now correctly rewinds missions.
2020-12-22 11:30:57 -05:00
322e354f5b
Fix indentation in RacingManager.cpp and compilation on Linux
2020-12-22 14:46:09 +01:00
Gent S
8a2073d081
Fix racing timestamps
2020-12-22 01:04:46 -05:00
Gent S
e915c54ed0
Correctly set time limit, rank, and reward
2020-12-22 00:37:04 -05:00
Gent S
e953b51229
Add reward tables for racing
2020-12-22 00:36:39 -05:00
Gent S
b9013149f3
Racing cleanup
2020-12-21 21:02:19 -05:00
Gent S
e6da454c73
Finish racing DB integration
2020-12-21 16:18:08 -05:00
Gent S
598c7ce1d0
Add racing-related DB functions
2020-12-21 16:18:08 -05:00
Gent S
ea47f67b2b
Properly utilize instance data in map info packet
2020-12-21 16:18:08 -05:00
Gent S
91ea8be72e
Implement basic race handling
2020-12-21 16:18:08 -05:00
Gent S
b81a3761b6
Load instance data from XDT
2020-12-21 16:18:08 -05:00
Gent S
45b8f8f581
Add RacingManager
2020-12-21 16:18:08 -05:00
c3d9883ddb
Fix migration on Linux
2020-12-20 23:09:10 +01:00
Gent S
ea12ec9607
Use binary streams to make DB backups, since filesystem has low compat
2020-12-20 15:52:34 -05:00
Gent S
2e173df2ca
DB v2 Tweaks
2020-12-19 21:17:07 -05:00
Kamil
1fb48536c2
created external sql file for tables and 1st migration
2020-12-19 20:00:47 -05:00
Kamil
002bfffb62
implemented db migration system
2020-12-19 19:15:14 -05:00
Kamil
140227406c
implemented custom error messages in login screen for regex fail or banned account
2020-12-19 19:15:14 -05:00
26d0623d07
Fix Database::sendEmail()
...
* Do not define an sqlite_stmt* named stmt in a loop such that it shadows
an outer variable of the same name.
* Do not re-prepare a statement that has been reset.
2020-12-19 05:51:06 +01:00
f8a359dfe9
Do not truncate emails to 127 characters
...
And assert that we never supply a string long enough for
sanitizeText() to truncate.
2020-12-19 05:51:06 +01:00
Gent S
2f44243abb
Please.... please take the slider....
2020-12-18 20:48:09 -05:00
e3561e9d15
Change the default ports to match OG and Retro
...
The default monitor port can stay on 8003 for now.
2020-12-18 00:24:24 +01:00
80dabf4406
Finalize ALL the statements
...
* Fixed not being able to modify the DB externally while the script is
running
* Made most DB-related errors print the appropriate error string
* Fixed the settings looking for dbsaveinterval in the shard category
instead of the login category
* Added -shr and -wal to .gitignore (even though we're not actually
using WAL mode)
Hopefully the DB code is now free of resource leaks and undefined
behaviour.
2020-12-18 00:17:35 +01:00
Gent S
d3e5b9c485
Potentially fix slider collisions
...
- Lerp circuit once instead of on a per-slider basis to avoid FPE differences
- Spawn sliders every k points instead of once per stop
2020-12-16 20:37:12 -05:00
f7a6615379
Tweak mob roaming logic and a few other values
...
This fixes the crash with mobs with a very small m_iIdleRange and avoids
unnecessary looping.
Co-authored-by: JadeShrineMaiden <69916714+JadeShrineMaiden@users.noreply.github.com>
2020-12-17 02:35:55 +01:00
Gent S
618a8d0a9f
Reimplement NPC barking
2020-12-15 19:16:05 -05:00
d25e7ca4fc
Implement rudimentary NPC scripting framework and Lord Fuse boss fight
2020-12-15 23:19:29 +01:00
3359ca0c3e
Moved common NPC summoning logic into a helper function
2020-12-15 23:19:29 +01:00
0dd478b9f0
Tweak Lair respawns slightly
...
* Respawn the player in the air, not on the ground
* Do save the player's current instance, just to lessen the chance of
validation not catching stale recall coords.
2020-12-15 23:19:29 +01:00
Gent S
d03c4f109f
Add chat dump to monitor
2020-12-15 09:58:11 -05:00
Gent S
792a317b48
Indicate high account level in logged player name
2020-12-15 09:53:45 -05:00
f74c40cf69
Prevent division by zero by also checking iWalkSpeed for 0
2020-12-15 02:11:18 +01:00
442d7853a5
In the absence of a Resurrect 'Em in a Lair, respawn at the entrance
2020-12-15 00:26:29 +01:00
fcd9b55ea7
Clean up formatting in Database.cpp
...
* Single quotes for strings
* Semicolons at the end of all commands
* No double colons around identifiers
* Spaces for alignment
* Some parts indented for readability
Not everything is perfectly consistent, but it should all be pretty
readable now.
Non-SQL changes:
* Opening braces shouldn't be on their own line
* Removed trailing spaces
* exit(1) should be used instead of terminate(0) during server init
2020-12-14 22:41:28 +01:00
Gent S
f1a2723274
Don't write mob HP to gruntwork
2020-12-14 10:00:07 -05:00
Gent S
5431d21d27
Always grab mob HP from XDT
2020-12-14 00:26:17 -05:00
454e0284af
Remove vendored libsqlite from the repository
...
We now link to the system's library.
Windows implementation pending. MSVC build will be broken for a short
while.
2020-12-14 03:44:58 +01:00
Gent S
94b7864b02
Shut up warnings
2020-12-13 20:52:59 -05:00
Gent S
166bfdfc4f
Terminate if existing DB doesn't have meta table
2020-12-13 20:43:24 -05:00
Gent S
156e9bf902
Fix newline characters being stripped from emails
2020-12-13 20:18:36 -05:00
Gent S
c8ff130b78
Update buddy warp to new DB
2020-12-13 19:54:09 -05:00
Gent S
ec23e72215
Notify client of email send failure
2020-12-13 19:51:31 -05:00
Gent S
a1274756ce
Fix guide not getting updated in new DB
2020-12-13 19:51:09 -05:00
Kamil
05f4746af4
"Created" meta column + cleanup
2020-12-13 19:51:09 -05:00
Kamil
04112377ea
Implement setting for disabling first use tips
2020-12-13 19:51:09 -05:00
Kamil
bd3a91e530
Properly implement first use flags
2020-12-13 19:51:09 -05:00
Kamil
66ecc45fce
Change SkyWayFlags to blob for consistency
2020-12-13 19:51:09 -05:00
Kamil
7aef973ef1
Add meta table to DB
2020-12-13 19:51:09 -05:00
Kamil
a12faac0e2
Account level changes
...
tied account levels to accounts instead of players. implemented account banning logic in db
2020-12-13 19:51:09 -05:00
Kamil
4dc48198ab
Implement player blocking
2020-12-13 19:51:09 -05:00
Kamil
3e855cbdac
Close DB properly
2020-12-13 19:51:09 -05:00
Kamil
889fc985c4
Reimplement the bank
2020-12-13 19:51:09 -05:00
Kamil
c709d458f4
Fix iterators and query typo
2020-12-13 19:51:09 -05:00
Kamil
0e016646ef
Properly implement PayZoneFlag and fix safe coord loading
...
implemented saving PayZoneFlag (is player in the past) and fixed saving coordinates properly with monkeys/instances
2020-12-13 19:51:09 -05:00
Kamil
960f2dd10c
Adjust login server logic to new DB
2020-12-13 19:51:09 -05:00
Kamil
2bad1252d3
Small DB fixes
2020-12-13 19:51:09 -05:00
Kamil
31ac9d2e3b
Reimplement DB functions 2/2
...
implemented getCharInfo
implemented delete character
implemented evaluateCustomName
implemented name change function
implemented getPlayer function
implemented functions for buddies
implemented emails
2020-12-13 19:51:09 -05:00
Kamil
eeb3b1ee61
fixed a lot of queries
2020-12-13 19:51:09 -05:00
Kamil
4bf35e5239
added some unique constraints
2020-12-13 19:51:09 -05:00
Kamil
2f5c2a8764
Reimplement DB functions 1/2
...
implemented addAccount
implemented updateSelected
implemented findAccount validateCharacter isNameFree and isSlotFree
implemented getTableSize function
implemented functions for name save, character creation and finishing tutorial
2020-12-13 19:51:09 -05:00
Kamil
34ca36062c
Create basic tables
2020-12-13 19:51:09 -05:00
Kamil
a1062f220b
Open DB from settings path
2020-12-13 19:51:09 -05:00
Kamil
c2f640fd97
RIP ORM
2020-12-13 19:51:09 -05:00
actuallyamoose
143bb00ac0
Added checks to prevent buddy warping and item sending across time ( #183 )
2020-12-13 19:05:11 -05:00
JadeShrineMaiden
b947ff65cf
Various bugfixes
...
- Eruption is now blocked by stun and sleep.
- Corruption should block all nano abilities.
- Buffs time out for other players
- Timed mission bugfixes (AGAIN)
- Corruption and Eruptions fire quicker.
- Heal egg ids fix
- No power nanos no longer break the system.
- Mobs should no longer restun.
- Mob ability chance calculation adjustments.
- Duration of the power's debuff is sent as iDamage instead of 0, this removes the ugly "Block" that shows up on successful hits.
- Group mob respawning bugfixes
- a bit of a cleanup
2020-12-12 17:22:22 -05:00
1474ff10ac
Slight adjustments to the poll() loop
...
Recheck the entry at the current index after we remove one. This isn't
strictly necessary, since the next pass will get it anyway.
Using a vector as opposed to our own realloc()'d array means indexing
beyond the size() is undefined behavior, so it's better to be safe.
2020-12-12 01:27:28 +01:00
974941f4fa
Close our end of the connection when we receive an EOF
...
This should/might fix the server's CPU usage spiking to 100%.
2020-12-12 01:27:13 +01:00
Gent S
2834891727
Properly output socket errors on Windows
2020-12-08 17:22:14 -05:00
ada8af0b82
Print informative error messages for socket operations
...
Windows implementation pending.
2020-12-08 15:23:58 -05:00
86e0b1bc13
EINTR is not crash-worthy
...
This is how it should have been handled anyway. This fixes a (benign)
race condition when the server is killed, as well as gprof builds.
Also updated tdata.
2020-12-08 20:10:02 +01:00
Gent S
d5409ed3f1
Replace bad continue statement with goto in monitor socket iteration
2020-12-08 14:05:34 -05:00
811c9d4d5c
Stop iterating in exitDuplicate() after having removed a player
...
This fixes a crash due to the invalidated iterator continuing to loop.
It should be safe to assume there's only ever one duplicate/stale player.
Also updated tdata.
2020-12-08 01:53:21 +01:00
Gent S
a48fb3a8e8
Don't run nano mission logic at level 36 (fixes "Super Saiyan" bug)
2020-12-06 11:53:41 -05:00
27f396af7e
Oops, M_PI is POSIX so it isn't defined in math.h on Windows
2020-12-06 06:02:58 +01:00
8ebabac7c0
Various bugfixes
...
* Fixed Nano stamina not being halved on respawn
* Reverted the default argument to terminate() change because MSVC is
undable to disambiguate the function pointer passed to sigaction()
* Fatal errors during init (like in TableData) can just call exit(1)
directly anyway (missing "OpenFusion: terminated." be damned)
* Switched to a slightly more portable syntax for getting the version
in the Makefile
* We shouldn't join the shard thread in the signal handler because the
thread the signal handler ends up running in is undefined behaviour and
we don't strictly need to join it anyway
Many of these issues were discovered on OpenBSD.
2020-12-06 05:25:23 +01:00
02c5df5c1b
Ours is not to decide the value of pi.
...
Ours is only to live by it.
2020-12-06 02:45:20 +01:00
dd6fbfb683
Tweak terminate() slightly
...
* Gave it a default argument, since we never actually care about it, but
it needs to have it to conform to the signal handler prototype
* Constricted the area locked by activeCrit to only the block that deals
with the connections vector, to lower the chance of a future badly
placed call to terminate() deadlocking the server instead
2020-12-06 02:20:46 +01:00
92307063fc
Integrate the monitor's listener socket into the shard's poll()
...
This removes the need for a separate monitor thread.
2020-12-06 01:44:37 +01:00
53d8cb67ba
Set monitor connections to non-blocking
...
Better to just drop monitor connections when the quality is bad than to
risk blocking the shard thread.
2020-12-05 23:16:09 +01:00
6b257887b7
Use an std::vector for PollFDs instead of handling it manually
...
Lowered poll() timeout to 50, to fix (work around?) slider stutter.
2020-12-05 22:51:17 +01:00
ec7cba644c
Clean up polling logic
...
* Extracted PollFD manipulation and nonblocking socket configuration
into helper functions
* Replaced the connections list with an unordered_map
* Dynamically grow the number of PollFD structures with realloc()
With these changes done, the server's CPU usage is completely diminished
from its old average of ~47% to ~0.07%, with occasional spikes up to ~14%.
2020-12-05 22:47:50 +01:00
269315ca09
Support for poll() (ie. WSAPoll()) on Windows
2020-12-05 22:47:50 +01:00
661061b4eb
Switch to non-blocking sockets + poll(); prepare for Windows logic
2020-12-05 22:47:50 +01:00
3a2b488f33
[WIP] fixed a million bugs and one potential one
2020-12-05 22:47:50 +01:00
721b3f440f
[WIP] Switched to poll(), but only on Unix
2020-12-05 22:47:50 +01:00
Gent S
b04c377d7c
Properly implement item types.
2020-12-04 16:42:58 -05:00
Gent S
794856a63c
Clean up item loading from XDT.
2020-12-04 13:57:08 -05:00
Gent S
856a90abcf
Fix nano logic in goo damage running without a nano out
2020-12-04 11:59:53 -05:00
88d904e302
Fix FM patches not dealing damage unless invulnerable
2020-12-04 17:48:12 +01:00
46552307cd
Disable monitor by default in config file
2020-12-04 17:30:21 +01:00
26024de866
Support the monitor interface on Windows as well
...
This change required sacrificing both code cleanliness and the specific
error reports from perror(). Those could have been kept with a portable
wrapper, but that's too much work. We'll do it if unforseen errors
arise.
2020-12-04 17:25:32 +01:00
Gent S
85dcdd4cc5
Added /hide command to exclude players from monitor output
2020-12-04 07:24:33 -05:00
Gent S
1ca8094628
Fix regression with disconnected player on Skyway agent.
2020-12-03 15:33:14 -05:00
Gent S
543d0a7afd
Fix edge case for nano mission acquisition
...
This caused players to only get nano missions after exceeding the required FM instead of meeting it.
2020-12-03 00:05:14 -05:00
Gent S
4c398895aa
Make /lair fit convention.
2020-12-02 18:41:09 -05:00
e899928928
Do not try to compile the monitor on windows
2020-12-03 00:15:06 +01:00
c8b011913a
Make monitor parameters configurable
2020-12-02 23:42:33 +01:00
15b63f3cbd
Fix regression with a disconnect check in MobManager::combatStep()
2020-12-02 23:32:38 +01:00
ce1a5a7664
Handle partial transmissions of the buffer to the monitor
2020-12-02 20:19:34 +01:00
c6112d04da
Implemented player position monitor interface
2020-12-02 20:19:34 +01:00
Gent S
73f8179836
Make aggro space spheroidal on Z
...
By doubling the z difference used in distance calculation, mobs above or below the player will aggro less often.
2020-12-02 09:20:33 -05:00
Gent Semaj
86f17b6525
Show announcements in server log
2020-12-01 19:59:18 -05:00
fed3eca378
Display area announcement to invoking player as well
...
Also clarified that shard- and world-level announcements will not be
implemented as they are not applicable to our single-shard server.
2020-12-01 23:32:45 +01:00
fb9c4140b6
Remove redundant namespace specifiers in PlayerManager::init()
2020-12-01 22:24:18 +01:00
657061083e
Lose aggro and do not take damage if invulnerable
2020-12-01 21:37:34 +01:00
8a86c75747
Make sure each group member is alive before healing/buffing them
2020-12-01 21:37:34 +01:00
046e7bb6f1
Do not aggro on players with /invulnerable
2020-12-01 21:37:34 +01:00
1e822f7a6c
Removed redundant checks for a nullptr from PlayerManager::getPlayer()
...
These were written in desparation and never should have been there in
the first place.
2020-12-01 21:37:34 +01:00
c43a3d64fb
Removed the Player pointer from CNSocket
...
It was a leak in the abstraction that we weren't even using that much.
This is technically a de-optimization, but it's okay since it's not a
hot code path.
2020-12-01 21:37:34 +01:00
Titan
7c5d7a70cc
Fix enter key sending '\n' in passwords
2020-12-01 14:29:21 -05:00
Titan
c1941654b6
Basic Implementation of a lair unlock command
2020-12-01 14:19:16 -05:00
Gent S
d2d6171d04
Fix gumballs only lasting 1 minute instead of 10
2020-12-01 13:47:54 -05:00
58952be47e
Added silent unsummoning
...
- summonNano now supports an optional "silent" argument
- gumballs now last 10 minutes.
- fixed comments
2020-12-01 13:16:14 -05:00
5771cd014a
Various bugfixes and tweaks
...
- timed missions of all types should work.
- nanos now transmit an unsummon on 0 stamina.
- dying bumps your nanos down to half stamina now.
- enemies use abilities less frequently.
- group recall now works at any distance.
- passive nanos are tweaked to guzzle less stamina.
- cleared out some redundant stuff at the nanoPower handler.
2020-12-01 13:16:14 -05:00
Gent S
c9754902b9
Instance fusion lair NPCs, remove non-mob fusions, stub non-mob paths
2020-12-01 06:07:10 -05:00
Gent S
c508016ca3
Play nano mission animation for nearby players
2020-11-30 20:36:20 -05:00
Gent S
4863d29590
Fix /unsummonW crash on non-mob NPCs
2020-11-30 10:53:34 -05:00
858fbf40be
Do not strip newlines from email bodies
2020-11-29 21:31:54 +01:00
Gent S
1d7f8bd133
Mob abilities cleanup
2020-11-28 12:41:00 -05:00
a9ad399bc2
Various Tweaks to Mob skill behavior
...
- Fixed enemy abilities playing after death
- Nerfed frequency further
- Heal on retreat correctly
- Nerfed damage and corruption skill damage
2020-11-28 11:41:32 -05:00
963205fad6
Added Nullptr check + Made mob abilities less frequent
2020-11-28 11:41:21 -05:00
b836952356
Restructured Arrays to Vectors
2020-11-27 19:02:54 -05:00
6fb652f642
Corruption reflection + Extra adjustments
2020-11-27 16:33:22 -05:00
2cde3e34f6
Active skills, Corruption and Eruption
2020-11-27 16:33:18 -05:00
1371a6da77
Base Variadic MobPowers Handler
2020-11-27 16:32:59 -05:00
d2e89851d6
Non-group buffs do not misbehave + Revive nano stamina fix
2020-11-27 15:40:49 -05:00
Gent S
7cc0a0fc82
Fix group recall and temporarily lift range restriction
2020-11-27 15:31:56 -05:00
c343092bd5
Gumball times out for slots 2 & 3 + Tweaks
2020-11-27 12:01:28 -05:00
Gent S
36d6231da4
Nano refactor cleanup
...
sanity checks and int[] -> vector<int>
2020-11-27 00:07:31 -05:00
Gent S
7851866d13
Fix nanos making sound when they run out of stamina
2020-11-26 23:01:19 -05:00
Gent S
c2ab5c9d02
Fix case where resplen wasn't being initialized
2020-11-26 23:01:19 -05:00
166eb5125f
Group Heal Range Limit
2020-11-26 23:01:19 -05:00
26ca4d8671
New Powers, Tweaked Eggs further + Cleanup
...
* Scavenge and Bonus nanos work.
* Eggs now damage and heal more cleanly.
2020-11-26 23:01:19 -05:00
28276d2229
Reverting back some changes + Tweaks
2020-11-26 23:01:19 -05:00
2b25b17bd8
Gumball Handling and Bugfixes
...
* Gumballs now run out of timer.
* Reverted a regression, (gumballs with 0 iOpt do not get emptied).
* Nano matchups now work correctly.
2020-11-26 23:01:19 -05:00
f7c0596a4c
Adapted Egg Buffing to Nano powers
...
* Adapted eggs to nano power data.
* Tweaked nano abilities.
2020-11-26 23:01:19 -05:00
fe7ec44554
Restructuring, Cleaning up and Bugfixes
...
* Added findTargets, a new helper function that reads out the packet for targets.
* Restructured and removed leftover redundant code.
2020-11-26 23:01:19 -05:00
299fc1b461
Refactored Nano Powers
...
* All nano power functions have been merged into one goliath of a function.
* Nano powers consume the correct amount of stamina.
* Bugfixed gumball issues, gumballed nanos now perform better.
* Revive powers now work correctly.
* Recall powers both self and group are functional.
* Removed nanoBuff.
* Added a new applyBuff function, this allows for quick and easy application of nano skills.
* Numerous other bugfixes.
2020-11-26 23:01:19 -05:00
2acb90f2d2
Initial tabledata implementation
2020-11-26 23:01:19 -05:00
Gent S
75d33aff3e
Fix S.C.A.M.P.E.R. chunk desync... again
2020-11-26 22:58:56 -05:00
Gent S
8073c68bd5
Make /fusionmatter properly update fusion matter
2020-11-26 22:33:43 -05:00
Gent S
15dd0a2fc3
Add missing sanity checks to BuddyManager
2020-11-26 22:30:30 -05:00
Gent S
71d1212877
Fix All Characters always failing validation
2020-11-26 11:04:56 -05:00
Gent S
57060e9b6f
Fix spawning in the unknown when no Resurrect 'Ems are nearby
2020-11-26 11:03:42 -05:00
Gent S
faf2a0ee7d
Fix freefalling after MSS DC
2020-11-26 10:01:48 -05:00
Gent S
fa7b6e6145
Properly set default NPC class
2020-11-26 09:05:44 -05:00
Gent S
478bcd5338
Use vendorID instead of NPC_ID to index into vendor tables
2020-11-26 09:00:30 -05:00
Gent S
c7d3870a60
Add /whois command
2020-11-26 08:59:16 -05:00
Gent S
8351596763
Fix /help using accoutnId instead of accountLevel
2020-11-26 08:30:19 -05:00
Gent S
e3568ea506
Fix viewableChunks memory leaks
2020-11-25 22:49:37 -05:00
CakeLancelot
a9a8d96321
Fix Female Characters always failing validation
2020-11-25 20:37:24 -06:00
Gent S
b0aea27418
Fix player revive packet carrying wrong values
...
Oops
2020-11-25 20:38:48 -05:00
Gent S
872425640d
Prevent DB players from occupying same slot
2020-11-25 19:25:20 -05:00
Gent S
ea5b7104be
moved name checks to name save and name change packets
...
added a TODO
Formatting + sizeof in login server
2020-11-25 19:25:20 -05:00
Kamil
d85d9d4b12
added character creation validation
...
added a comment
2020-11-25 19:25:20 -05:00
Kamil
7e08bc60ce
added character validation for SAVE_CHAR_TUTOR and CHANGE_CHAR_NAME
...
fixed ugly sizeofs
2020-11-25 19:25:20 -05:00
Kamil
86e6937342
added character validation to delete packet
2020-11-25 19:25:20 -05:00
Kamil
ec8abfa004
moved sending character selection fail to a helper function
2020-11-25 19:25:20 -05:00
Kamil
51a687c7db
hugely simplified managing player characters in login server
2020-11-25 19:25:20 -05:00
Kamil
657306e0a1
added missing debug print outs
2020-11-25 19:25:20 -05:00
Kamil
eee8aab888
refactored and cleaned up login function
2020-11-25 19:25:20 -05:00
Kamil
5c6d7d6055
added a sanity check for entering invalid characters
2020-11-25 19:25:20 -05:00
Kamil
4760d91ccd
refactored giant switch to smaller functions
2020-11-25 19:25:20 -05:00
Gent S
db98af9775
Fix chunk desync on revive
2020-11-25 17:50:57 -05:00
Gent S
f91f9786d1
Fix chunk desync on S.C.A.M.P.E.R. warp
2020-11-25 17:46:16 -05:00
Gent S
71d9cab72e
Fix chunk desync on NPC warp
2020-11-25 17:42:46 -05:00
Gent S
717e5eb78f
Remove bad warning for multikills
2020-11-25 13:33:12 -05:00
Gent S
e7301f46ef
Properly copy mob groups to instances
2020-11-25 11:49:40 -05:00
Gent S
85113a667f
Update unsummonW to handle new group gruntwork format
2020-11-25 11:45:34 -05:00
Gent S
98ae236c08
Load gruntwork group mobs hierarchically
2020-11-25 11:09:05 -05:00
Gent S
6ff762ba57
Save gruntwork group mobs hierarchically
2020-11-25 10:41:10 -05:00
Gent S
73ef5fa5ff
Load mob groups hierarchically
2020-11-23 19:28:22 -05:00
Gent S
8a0d0e0e4c
Restructure tdata
2020-11-23 18:45:28 -05:00
Gent S
0f1d9cdf1c
Add sanity check for nano ID in nano equip handler
2020-11-23 17:03:08 -05:00
Gent S
07a1927b9f
Force chunk update in sendPlayerTo
2020-11-22 19:22:33 -05:00
Gent S
e0858a42b2
Fix getNearestNPC w/ uses
2020-11-22 19:14:46 -05:00
Gent S
dab536cb6a
Grouped mobs adjustment
2020-11-22 19:14:22 -05:00
f1d04cec01
UnsummonW Implementation + Tweaks
...
* UnsummonW can be used to remove the mob from existence.
* Mob groups now aggro together.
* Mobs space a little bit when chasing the player.
* Combat balance tweaked a bit, you can take out an entire boss group of scoria cephalopod with good nano usage with common tier weapons.
2020-11-22 16:53:19 -05:00
5e8b6eec6e
Grouped Mobs are gruntworkable
...
* Using /summonGroupW
2020-11-22 16:53:03 -05:00
883a1c17e6
Group Mobs Initial Implementation
...
* For now only mob.json is read for grouped mobs.
* Grouped mobs are fully functional granted the mobs.json is prepared correctly.
* Removed redundant move packet.
2020-11-22 16:53:03 -05:00
Gent S
e9ffbe6148
Make /refresh work again
2020-11-22 16:48:29 -05:00
Gent S
d1baa0d9f9
Replace inPopulatedChunks with player counter for NPCs
2020-11-22 16:48:29 -05:00
Gent S
71d4f331b5
Fix egg type warning message
2020-11-22 16:46:09 -05:00
Gent S
665f28313a
Clean up redundant forced chunk updates for NPCs
2020-11-21 11:53:48 -05:00
Gent S
c5fa397724
Fix player entering chunks twice on load
2020-11-21 11:46:56 -05:00
Gent S
95b385dee1
Reimplement chunk data caching
2020-11-19 19:16:51 -05:00
Gent S
82b505a737
Fix buddy warp causing softlock
2020-11-19 18:16:35 -05:00
Gent S
dae3b24093
Reimplement chunk position caching
2020-11-19 17:37:07 -05:00
Gent S
e50a4c2edd
Experimental chunk refactor.
2020-11-19 17:37:02 -05:00
Gent S
5cbb8538c0
Get rid of PlayerView. For good.
2020-11-19 17:36:49 -05:00
Gent S
d2e776b672
Fix mission rewards stacking on top of each other
2020-11-19 14:07:29 -05:00
Titan
b08fb52272
Implement /announce
2020-11-19 14:05:34 -05:00
Gent S
0075457f81
Temporarily remove sanity check for egg pickup distance
2020-11-17 13:51:35 -05:00
Gent S
12baece1b2
Fix opening C.R.A.T.E.S. resetting your boost counters
2020-11-17 13:48:20 -05:00
Kamil
c77f99e849
moved bullets removal call
2020-11-16 21:38:49 -05:00
Kamil
d17890af68
cleanup
2020-11-16 21:38:49 -05:00
Kamil
6c1d8c3527
updated comment
2020-11-16 21:38:49 -05:00
Kamil
59ab81d3c6
fixed weapon boosts being used with 0 batteryW
2020-11-16 21:38:49 -05:00
Kamil
9cee8f2c87
added cleaning up player's bullets on exit
2020-11-16 21:38:49 -05:00
Kamil
a483b0fb44
fully implemented rockets and grenades
2020-11-16 21:38:49 -05:00
Gent S
8ad3f3aabd
CHUNKPOS macro -> ChunkPos typedef
2020-11-16 09:59:53 -05:00
Gent S
b22ba781c8
Possible fix for chunking desyncs + CHUNKPOS macro
2020-11-15 14:41:56 -05:00
Gent
4d1d77ceaf
Switch to getTime() for egg and buff ticking
2020-11-11 23:50:39 -05:00
Gent
7135767cc4
Egg checks, fixes, and cleanup
...
fixed not taking egg buff flag into consideration in mob manager
fixed stamina bug and improved sanity check
Egg cleanups
2020-11-11 23:19:07 -05:00
Kamil
0ecf76c5ec
moved egg summoning to a custom ChatManager command
2020-11-11 23:19:07 -05:00
Kamil
9087baae3c
Polished reading egg json data
2020-11-11 23:19:07 -05:00
Kamil
95b5da8932
temp chunk issue fix
2020-11-11 23:19:07 -05:00