Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4062,3 +4062,7 @@ When setting a property like MORE to the a spell or skill defname, trying to rea

30-09-2025, Mulambo
- Changed: Login rejection (packet `0x82`) is now sent to all clients trying to log in (used to be only to clients, that Sphere could identify).

01-10-2025, Mulambo
- Added: New experimental flag EF_WalkBypassMonsters. This will override hardcoded client behaviour that prevents stepping over NPCs without max stamina (like GM can). However, this could cause flickering or lags to clients and should be used with caution.
- Added: New option flag OF_DontInterruptHealOnHit. Healing won't be interrupted on hit. This will allow you to implement your own healing interrupts in combat.
1 change: 1 addition & 0 deletions src/game/CServerConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4833,6 +4833,7 @@ void CServerConfig::PrintEFOFFlags(bool bEF, bool bOF, CTextConsole *pSrc)
if ( IsSetEF(EF_UsePingServer) ) catresname(zExperimentalFlags, "UsePingServer");
if ( IsSetEF(EF_FixCanSeeInClosedConts) ) catresname(zExperimentalFlags, "FixCanSeeInClosedConts");
if ( IsSetEF(EF_WalkCheckHeightMounted) ) catresname(zExperimentalFlags, "WalkCheckHeightMounted");
if (IsSetEF(EF_WalkBypassMonsters)) catresname(zExperimentalFlags, "WalkBypassMonsters");

if ( zExperimentalFlags[0] != '\0' )
{
Expand Down
4 changes: 3 additions & 1 deletion src/game/CServerConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ enum EF_TYPE
EF_UsePingServer = 0x0008000, // Enable the experimental Ping Server (for showing pings on the server list, uses UDP port 12000)
EF_FixCanSeeInClosedConts = 0x0020000, // Change CANSEE to return 0 for items inside containers that a client hasn't opened
EF_WalkCheckHeightMounted = 0x0040000, // Unlike the client does, assume an height increased by 4 in walkchecks if the char is mounted. Enabling this may prevent mounted characters to walk under places they could before.
EF_WalkBypassMonsters = 0x0080000 // Allows to bypass client hardcoded behaviour, that prevents characters stepping over NPCs without maximum stamina. This behaviour defaults to GM only. WARNING: This is resource intensive and could cause movement flickering to clients!
};

/**
Expand Down Expand Up @@ -90,7 +91,8 @@ enum OF_TYPE
OF_EnableGuildAlignNotoriety = 0x02000000, // If enabled, guilds with the same alignment will see each other as enemy or ally.
OF_NoDclickEquip = 0x04000000, // If enabled, double-click does not equip items.
OF_PetBehaviorOwnerNeutral = 0x08000000, // Should my pets always appear natural to me?
OF_NPCMovementOldStyle = 0x10000000 // Required setting to make NPCs run like in the old version.
OF_NPCMovementOldStyle = 0x10000000, // Required setting to make NPCs run like in the old version.
OF_DontInterruptHealOnHit = 0x20000000 // Getting hit won't interrupt healing. You can still implement your own interrupt in triggers (like @Hit / @GetHit).
};

/**
Expand Down
2 changes: 1 addition & 1 deletion src/game/chars/CCharFight.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2201,7 +2201,7 @@ WAR_SWING_TYPE CChar::Fight_Hit( CChar * pCharTarg )
}

// BAD BAD Healing fix.. Cant think of something else -- Radiant
if ( pCharTarg->m_Act_SkillCurrent == SKILL_HEALING )
if (pCharTarg->m_Act_SkillCurrent == SKILL_HEALING && !IsSetOF(OF_DontInterruptHealOnHit))
{
pCharTarg->SysMessageDefault(DEFMSG_HEALING_INTERRUPT);
pCharTarg->Skill_Cleanup();
Expand Down
2 changes: 1 addition & 1 deletion src/game/chars/CCharStatus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -680,7 +680,7 @@ byte CChar::GetModeFlag( const CClient *pViewer ) const

if ( IsStatFlag(STATF_INVUL) )
mode |= CHARMODE_YELLOW;
if ( GetPrivLevel() > PLEVEL_Player )
if (GetPrivLevel() > PLEVEL_Player || IsSetEF(EF_WalkBypassMonsters))
mode |= CHARMODE_IGNOREMOBS;
if ( IsStatFlag(STATF_WAR) )
mode |= CHARMODE_WAR;
Expand Down
4 changes: 3 additions & 1 deletion src/sphere.ini
Original file line number Diff line number Diff line change
Expand Up @@ -843,6 +843,7 @@ Secure=1
// EF_UsePingServer 008000 // Enable the experimental Ping Server (for showing pings on the server list, uses UDP port 12000)
// EF_FixCanSeeInClosedConts 020000 // Change CANSEE to return 0 for items inside containers that a client hasn't opened
// EF_WalkCheckHeightMounted 040000 // Unlike the client does, assume an height increased by 4 in walkchecks if the char is mounted. Enabling this may prevent mounted characters to walk under places they could before.
// EF_WalkBypassMonsters 080000 // Allows to bypass client hardcoded behaviour, that prevents characters stepping over NPCs without maximum stamina. This behaviour defaults to GM only. WARNING: This is resource intensive and could cause movement flickering to clients!
Experimental=0

// Option flags
Expand Down Expand Up @@ -876,7 +877,8 @@ Experimental=0
// OF_EnableGuildAlignNotoriety 02000000 // If enabled, guilds with the same alignment (order / chaos) will see each other as allies (green).
// OF_NoDclickEquip 04000000 // If enabled, double-click does not equip items.
// OF_PetBehaviorOwnerNeutral 08000000 // Should my pets always appear natural to me?
// OF_NPCMovementOldStyle 010000000 // Required setting to make NPCs run like in the old Sphere versions (0.56b).
// OF_NPCMovementOldStyle 010000000 // Required setting to make NPCs run like in the old Sphere versions (0.56b).
// OF_DontInterruptHealOnHit 020000000 // Getting hit won't interrupt healing. You can still implement your own interrupt in triggers (like @Hit / @GetHit).
OptionFlags=08|080|0200

// Area flags
Expand Down