mirror of
https://github.com/UOX3DevTeam/UOX3
synced 2026-08-13 12:27:04 -04:00
Cleaned up an issue with last commit where wrong npclists were used in some spawn regions Made a few additional adjustments to the new spawn regions in Lost Lands/New Haven Included more changes related to poison updates that should've been in previous commit (like the complete UOX.INI support for POISONCORROSIONSYSTEM setting) Adjusted region setup for New Haven to set the individual "building" regions within as a sub-region of the main town (regions.dfn) Fixed an issue where the displayed HP of an equipped item would not update correctly Further updates to convert timers 32-bit to 64-bit. This affects and addresses some potential issues with: Character creation/NPC guild-join timestamps, NPC movement, combat timers, idle timeouts, item decay, spellcasting Added support for new JS Events that can trigger from global script, and can be used to store persistent custom entries in players' paperdoll profiles: onProfileRequest( socket, profileOwnerChar ) - Triggers when client requests data for a paperdoll profile onProfileUpdate( socket, updatedText ) - Triggers when client sends updated data from paperdoll profile Added two new helper functions in code that allows faster (but very slightly less accurate) distance checks between two points: GetApproxDist( Point3_st a, Point3_st b ) GetApproxDist( CBaseObject *a, CBaseObject *b ) Improved pathfinding for NPCs attempting to follow another character, by adopting a system of weighted variables to help the NPC determine when to recalculate the path vs when to stick with the old, combined with faster distance checks via GetApproxDist(). The end result of this is faster, smarter and more responsive NPC followers and NPC opponents in combat. The variables influencing this include: how far the target has moved from last pathfind target location, whether NPC is heading in the overall right direction or not, time since last path calculation and some small randomization to avoid edge case jitters. Updated default command levels in commands.dfn, code and scripts to support the Seer role and make space for some custom roles. These are the new defaults as listed in commands.dfn, which should not be changed as they are linked to specific enums in code. Do take note that this might invalidate command levels for existing GMs/Seers/Counselors, who might need another round of 'make gm/seer/cns from an admin: ADMIN - command level 10 GM - command level 9 SEER - command level 7 CNS - command level 4 PLAYER - command level 0 Updated how UOX3 makes use of the account-level flags 0x2000 (Seer) and 0x4000 (Counselor). If either of these flags are set on an account, all new characters created on the accounts will automatically receive the relevant command privileges. Fixed an issue with 'wholist command that prevented admin characters from seeing characters with lower privilege levels in the list (js/commands/wholist.js) Fixed an issue with hiding/GM hide that prevented admin characters from seeing hidden characters with lower privilege levels in the world UOX3 now includes the cross-platform, header-only utf8cpp library found at https://github.com/nemtrif/utfcpp and freely available under Boost Software License v1.0. The immediate use-case for this is in code right now is to better handle strings related to custom paperdoll profiles, but will also look to make more heavy use of this in future updates
86 lines
2.9 KiB
C++
86 lines
2.9 KiB
C++
#ifndef __COMBAT_H__
|
|
#define __COMBAT_H__
|
|
|
|
enum WeaponTypes
|
|
{
|
|
DEF_SWORDS = 1,
|
|
SLASH_SWORDS,
|
|
ONEHND_LG_SWORDS,
|
|
TWOHND_LG_SWORDS,
|
|
BARDICHE,
|
|
ONEHND_AXES,
|
|
TWOHND_AXES,
|
|
DEF_MACES,
|
|
LG_MACES,
|
|
BOWS,
|
|
XBOWS,
|
|
DEF_FENCING,
|
|
TWOHND_FENCING,
|
|
DUAL_SWORD,
|
|
DUAL_FENCING_STAB,
|
|
DUAL_FENCING_SLASH,
|
|
BLOWGUNS,
|
|
THROWN
|
|
};
|
|
|
|
class CHandleCombat
|
|
{
|
|
private:
|
|
bool HandleCombat( CSocket *mSock, CChar& mChar, CChar *ourTarg );
|
|
|
|
bool CastSpell( CChar *mChar, CChar *ourTarg, SI08 spellNum );
|
|
|
|
SI16 CalcDamage( CChar *mChar, CChar *ourTarg, UI08 getFightSkill, UI08 hitLoc );
|
|
|
|
void PlaySwingAnimations( CChar *mChar );
|
|
void PlayHitAnimations( CChar *mChar );
|
|
void PlayHitSoundEffect( CChar *mChar, CItem *mWeapon );
|
|
void PlayMissedSoundEffect( CChar *mChar );
|
|
|
|
void HandleNPCSpellAttack( CChar *mChar, CChar *ourTarg, UI16 playerDistance );
|
|
|
|
CItem * CheckDef( CItem *checkItem, CItem *currItem, SI32 &currDef, WeatherType resistType, bool excludeMedableArmor = false );
|
|
CItem * GetArmorDef( CChar *mChar, SI32 &totalDef, UI08 bodyLoc, bool findTotal = false, WeatherType resistType = NONE, bool excludeMedableArmor = false, bool includeShield = false );
|
|
|
|
public:
|
|
bool StartAttack( CChar *mChar, CChar *ourTarg );
|
|
void InvalidateAttacker( CChar *mChar );
|
|
|
|
R64 GetCombatTimeout( CChar *mChar );
|
|
void PlayerAttack( CSocket *s );
|
|
void AttackTarget( CChar *mChar, CChar *ourTarg );
|
|
void PetGuardAttack( CChar *mChar, CChar *owner, CBaseObject *guarded, CChar *petGuard = nullptr );
|
|
|
|
void CombatLoop( CSocket *mSock, CChar& mChar );
|
|
void Kill( CChar *mChar, CChar *ourTarg );
|
|
|
|
void DoHitMessage( CChar *mChar, CChar *ourTarg, SI08 hitLoc, SI16 damage );
|
|
SI08 CalculateHitLoc( void );
|
|
UI16 CalcDef( CChar *mChar, UI08 hitLoc, bool doDamage = false, WeatherType element = PHYSICAL, bool excludeMedableArmor = false, bool includeShield = false );
|
|
SI16 CalcAttackPower( CChar *mChar, bool doDamage = false );
|
|
SI16 CalcLowDamage( CChar *p );
|
|
SI16 CalcHighDamage( CChar *p );
|
|
UI08 GetCombatSkill( CItem *wItem );
|
|
UI08 GetBowType( CItem *bItem );
|
|
UI08 GetWeaponType( CItem *i );
|
|
|
|
CItem * GetShield( CChar *mChar );
|
|
CItem * GetWeapon( CChar *mChar );
|
|
|
|
SI16 ApplyDamageBonuses( WeatherType damageType, CChar *mChar, CChar *ourTarg, UI08 getFightSkill, UI08 hitLoc, SI16 baseDamage );
|
|
SI16 ApplyDefenseModifiers( WeatherType damageType, CChar *mChar, CChar *ourTarg, UI08 getFightSkill, UI08 hitLoc, SI16 baseDamage, bool doArmorDamage );
|
|
|
|
SI16 AdjustRaceDamage( CChar *attack, CChar *defend, CItem *weapon, SI16 bDamage, UI08 hitLoc, UI08 getFightSkill );
|
|
SI16 AdjustArmorClassDamage( CChar *attack, CChar *defend, CItem *weapon, SI16 bDamage, UI08 hitLoc );
|
|
void SpawnGuard( CChar *mChar, CChar *targChar, SI16 x, SI16 y, SI08 z );
|
|
|
|
// Combat Animations & Sound Effects
|
|
void CombatAnimsNew( CChar *mChar );
|
|
void CombatOnHorse( CChar *mChar );
|
|
void CombatOnFoot( CChar *mChar );
|
|
};
|
|
|
|
extern CHandleCombat *Combat;
|
|
|
|
#endif
|
|
|