All DB functions that are called outside of Database.cpp are now locked
by the same mutex. This might be a bit overkill, but it's not a hot code
path, so it doesn't matter. Better to avoid the potential deadlocks if
we made it too granular.
From now on a clear distinction must be made between external and
internal functions in Database.cpp, or else deadlock will occur.
Note that sqlite database operations are already locked, but if execute
multiple transactions within the same operation, it could have still
caused problems.
I also removed the DbPlayer fetch when writing to DB by making it a part
of the Player struct. This, by itself, should have fixed the crash we found.
This fixes the "dancing in Fusion Matter" bug.
Also (temporarily?) added updateNPCPosition() to the suppression list.
Might want to take it out again (along with some of the other ones) if
we do end up implementing Chunk GC.
* Mobs should account for height when aggroing on nearby players
* We don't need to keep track of lastHealTime for each player separately
* Warp attendants no longer steal the players weapon and money
* Mobs now move at a tickrate per second of 2 as opposed to less than 1 before.
* How lerping works was changed slightly, mobs are bumped down to half the speed to account for the higher tickrate.
* Damage formula was altered to more closely match the OG game.
* Player weapons and armor ratings are taken into account when damaging/getting damaged by mobs.
* Players have a 5% chance to critical strike mobs, this doubles the player's weapon power.
* Aside from player and mob stat based damage variance, there is also an inherent 20% variance to any damage.
* The player now heals while not in combat
* Nanos lose stamina while active, regain it while resting
* Using active nano powers drains stamina
* Standing in FM patches/lakes now deals damage
* Fixed a memory error in npcAttackPc()
* Mobs now aggro when a player gets close
* Mobs now give up the chase if the player gets out of the combat zone;
they no longer try chasing until they themselves have left it
* Added a few missing break statements in the loops in BuddyManager
Other players are not yet instantly notified of health/stamina updates,
as finding the correct way to do this has proven tricky. FM patch damage
updates other player's views just fine, though.
* The player no longer receives the Blossom nano mission until they've
left the future
* As a temporary measure for the sake of the public server, Fusions in
respawn in their lairs after 2.5 minutes
* Changed default player damage value to 150
* Mobs now drop the correct amount of FM, as well as a close
approximation of the correct amount of taros
* You can no longer break the FM cap in the Future zone
* Fixed the updateFusionMatter() bug the right way this time
* Completing a nano mission now subtracts FM as it should
* Setting a Nano's power no longer reports 0 FM to the client
* Sync'd tdata so it has all the lair NPCs
* Bypassed Eduardo escort task
* Fixed the level 36 updateFusionMatter() memory error
* Fixed qitems being deleted even if the player fails to complete the
mission due to not having any inventory space, thus softlocking the
mission
* set up "go to the time machine" button working
* warping to the past now sets PayZoneFlag and removes all active missions
* added gumballs functionality
* added nano potions functionality
* formatting fix
* NPCs now keep track of their chunk information like PlayerView does
for players
* NPCManager::sendToViewable() parallels PlayerManager::sendToViewable()
* Nano damage and debuffs now count as attacking a mob
* Mobs will de-aggro if something else killed their target
Unfortunetly, this necessitated keeping around yet more JSON objects for
the duration of the server's runtime.
It also involved unifying the way NPC IDs are handled, such that they
may be allocated and deallocated out of order.
If any NPCID-related bugs occour, this commit should be regarded as
the prime suspect.
This replaces the unnecessary deallocations on program termination.
Passing in the suppression list environment variable via setenv()
doesn't seem to work, so I've added a comment in the Makefile to explain
invocation.
They currently don't expire after a set amount of time.
Attacking a sleeping monster does wake it up, but doesn't remove the
debuff status client-side yet.
* implemented saving BatteryN and BatteryW
* implemented saving mentor
* moved int64->blob parsing to a separate function
* moved parsing blob->int64 to a separate function
* added functions for parsing int32->blob and vice versa
* added functions for parsing int16->blob and vice versa
* WIP saving quest items and active tasks
* Quest items are stored in inventory table instead of blob
* added sanity check for missionId
* saving active missions works
* removed unneccesary include
* implemented saving warplocationflag, skywaylocationflag and currentmissionid in database
* INFO DB message now shows how many accounts and player characters are in the database
* fixed dbsaveinterval being in [login] instead of [shard]
* fixed mission quit:
- fixed wrong json name, causing qitems not deleting properly
- quitting mission now resets npc kill count
* adjusted saving active missions
* removed blob parsing functions that ended up being unused
* removed accidentaly added include
* removed sending PCStyle2 on Player Enter
* added a sanity check in itemMoveHandler
* removed MapNum from PCLoad, as client doesn't even read it
* set BuddyWarpCooldown to 60s on PCLoad
* fixed a bug causing EXIT DUPLICATE not working
* added creation and last login timestamps to accounts and players
* added a sanity check for P_CL2LS_REQ_PC_EXIT_DUPLICATE
* implemented web api support, toggled by new setting (off by default)
* add usewebapi to config
Co-authored-by: Gent <gentsemaj@live.com>
Respect config.ini GM settings
Upon character creation, the GM value from the config will now be used instead of always being set to false. The default in Settings.cpp has also been changed to be consistent with the config.ini in the repo.
* Deleted empty Player.cpp
* Moved the helper functions from the obsolete CNStructs.cpp into
main.cpp and deleted it
* Renamed CombatManager to MobManager, as that will likely become it's
main focus soon
Also:
* Made the timeout configurable
* Removed the stale randomcharacters config option
* Switched to time_t for time values, even though it doesn't really
matter that much
* Halved the keepAliveTimer frequency
* Clean up spacing/indentation
* Proper enum formatting
* Fix nano dismissal (for real this time)
* Do not copy Player struct when a pointer is right there
* Stop looking after the trade partner has been found
* Make sure we're shifting unsigned values (and 64-bit when they need to be)
* Look for JSONs in tdata/
* Add a dbsaveinterval to the example config.ini, in the login category
This is an insignificant optimization now, but will be necessary when we
start switching around the the algorithms and datastructures used in
proximity detection.
Added basic shopkeeper functions, a player can buy the preset 3 items (cannonbolt set), all shopkeepers have the same items atm (need to check the shopkeeper tabledata), setting itemprice is something I didn't figure out.
Added set nano skill command
Implemented a switch for certain commands like health/taros/fusionmatter etc to be handled on the serverside aswell
Co-authored-by: dongresource <dongresource@protonmail.com>
This commit (and the previous one) exist to document the first approach I
took to storing mission data. It's only here for posterity. This comment
was added while rebasing.
This commit (and the next one) exist to document the first approach I
took to storing mission data. It's only here for posterity. This comment
was added while rebasing.
I made the regex a bit less restrictive. If you want, you can push this if it seems appropriate.
Username should be at least 4 characters and max 32
Password should be at least 8 characters and max 32
Usernames can be any combination of letters and numbers, with no special characters except for dash and underscore.
Passwords can use any of the alphanumeric/special characters specified in the regex.
Also changed output buffer in pcAttackNpcs() from dynamically to
statically allocated. This in itself is temporary as I have a better
idea as to how we can allocate buffers with a bit less boilerplate.
Note: signal() is undefined behaviour in multithreaded programs and is
unportable for handling signals in general. This will need to be
replaced with sigaction() or something.
* Merge kamilprzyb and main repo's code
* Update Makefile by FunnHornhoover
* Update Makefile by FinnHornhoover
* Add flag to Makefile by FinnHornhoover
* Remove extra line from makefile
* Remove lbcrypt from Makefile
* Fix flag to Makefile by FinnHornhoover
* Reimplement potential fix for tutorial blackscreen by Dongresources
* Update CMakeLists.txt
* Update CMakeLists.txt
* Reinsert Jade's changes
* Cosmetic Changes to Databases .h & .cpp
* Remove CMakeSettings.json
* Update Makefile by Finn Hornhoover
* More cosmetic changes to Databases.cpp
* More cosmetic changes to Databases.cpp
* Remove unnecessary line (CMakeSettings.json)
* Fix CNLoginServer.cpp
* More cosmetic Changes to Database.hpp, edit Database.cpp to use JSON library onstead of json11 library, and delete json11 library files
* Delete json11 library files
* Delete JSON library to reupload
* Reupload JSON library from main repo
* Reupload JSON library from main repo
* Fix syntax error
* Fix Makefile
* Remove commented line of code to be like master
Co-authored-by: CPunch <sethtstubbs@gmail.com>
* Sanity checks + Starting level changes
- Item movement handler checks to make sure items aren't moved from equipment slot to equipment slot.
- Item give command checks to make sure an out of bounds item is not spawned (Below iType 0 or above iType 8)
- Players now begin at level 36, consequently the item give command does not level you up now.
* Initial Trade Implementation
* Sanity Check
- Prevents out of bounds item movement by comparing it to AINVEN_COUNT.
* Taros and Trading
* Update ItemManager.cpp
* Update ItemManager.cpp
* working trading system
* Trading system code pointerified
- It works with the recent pointer changes needed.
* Vehicles and Trading bugfixes
* Sanity checks + Starting level changes
- Item movement handler checks to make sure items aren't moved from equipment slot to equipment slot.
- Item give command checks to make sure an out of bounds item is not spawned (Below iType 0 or above iType 8)
- Players now begin at level 36, consequently the item give command does not level you up now.
* Initial Trade Implementation
* Taros and Trading
* working trading system
* Trading system code pointerified
- It works with the recent pointer changes needed.
* Sanity checks + Starting level changes
- Item movement handler checks to make sure items aren't moved from equipment slot to equipment slot.
- Item give command checks to make sure an out of bounds item is not spawned (Below iType 0 or above iType 8)
- Players now begin at level 36, consequently the item give command does not level you up now.
* Sanity Check
- Prevents out of bounds item movement by comparing it to AINVEN_COUNT.
* Update ItemManager.cpp
* Update ItemManager.cpp
This way we're not always passing it around by value.
Note that the Player structs in CNSharedData are still
pass-by-reference. Will probably change this later.
* Sanity checks + Starting level changes
- Item movement handler checks to make sure items aren't moved from equipment slot to equipment slot.
- Item give command checks to make sure an out of bounds item is not spawned (Below iType 0 or above iType 8)
- Players now begin at level 36, consequently the item give command does not level you up now.
* Sanity Check
- Prevents out of bounds item movement by comparing it to AINVEN_COUNT.
* Cleaned up protocol selection.
* cmake now works even if protocol option is omitted
* make now supports protocol selection
* removed PACKET_VERSION/CNPROTO_VERSION* redundancy
* ubuntu appveyor script has yet to be written
* cleaned up some trailing spaces
* Add some test items.
Ironically, this change is untested.
* [bugfix] Transmit MOTD when entering the game, not when loading screen fades.
This fixes unnecessary retransmission when /warping.
* Move to PowerShell script for Windows build
* Allow CMake to override struct version
* PACKET_VERSION option
* Rename CNPROTO_CUSTOM to CNPROTO_OVERRIDE
Co-authored-by: Raymonf <Raymonf@users.noreply.github.com>
* Item Manager (Initial Implementation)
* Item Manager (Second Phase)
* Item Manager (Phase Three)
* Not Working Code
* Inventory Implementation (Complete?)
* Items Implementation
-Fixed Indentations
-Final touches to make it all work
* Update Makefile
* Added small comments
-- needs to be fixed
Since we do an early return without a config.ini file, the MOTDSTRING will still be the default std::string value (""), causing the game to output "Gamemaster: ". To fix this, we'll just hardcode the preferred default value for now.