Page MenuHomeFeedback Tracker

Overriding functions when extending PluginAdminLog doesn't work
Closed, ResolvedPublic

Description

class Hello extends PluginAdminLog
{
    void Hello()
    {
        Print("Plugin loaded");
    }

    void ~Hello()
    {
        Print("Plugin died");
    }

    override void PlayerKilled( PlayerBase player, Object source )  // PlayerBase.c   
	{

        Print("Custom PlayerKilled");

        super.PlayerKilled(player, source);
		
		if ( player && source )
		{
			m_PlayerPrefix = this.GetPlayerPrefix( player , player.GetIdentity() );
			
			if( player == source )	// deaths not caused by another object (starvation, dehydration)
			{
				m_StatWater = player.GetStatWater();
				m_StatEnergy = player.GetStatEnergy();
				m_BleedMgr = player.GetBleedingManagerServer();
				
				if ( m_StatWater && m_StatEnergy && m_BleedMgr )
				{
					GetGame().ChatPlayer( m_PlayerPrefix + " died. Stats> Water: " + m_StatWater.Get().ToString() + " Energy: " + m_StatEnergy.Get().ToString() + " Bleed sources: " + m_BleedMgr.GetBleedingSourcesCount().ToString() );
				}
				else if ( m_StatWater && m_StatEnergy && !m_BleedMgr )
				{
					GetGame().ChatPlayer( m_PlayerPrefix + " died. Stats> Water: " + m_StatWater.Get().ToString() + " Energy: " + m_StatEnergy.Get().ToString() );
				}
				else
				{
					GetGame().ChatPlayer( m_PlayerPrefix + " died. Stats> could not fetch");
				}
			}
			else if ( source.IsWeapon() )  // player
			{				
				m_Source = PlayerBase.Cast( EntityAI.Cast( source ).GetHierarchyParent() );
				m_PlayerPrefix2 = this.GetPlayerPrefix( m_Source ,  m_Source.GetIdentity() );
				
				GetGame().ChatPlayer( m_PlayerPrefix + " killed by " + m_PlayerPrefix2 + " with " + source.GetDisplayName() );	
			}
			else					// others
			{
				GetGame().ChatPlayer( m_PlayerPrefix + " killed by " + source.GetDisplayName() );
			}
		}
		else 
		{
			GetGame().ChatPlayer("DEBUG: PlayerKilled() player/object does not exist");
		}	
	}
}

Doesn't print "Custom PlayerKilled" in script.log when a player is killed

modded class PluginAdminLog
{
    void PluginAdminLog()
    {
        Print("Plugin loaded");
    }

    void ~PluginAdminLog()
    {
        Print("Plugin died");
    }

    override void PlayerKilled( PlayerBase player, Object source )  // PlayerBase.c   
	{

        Print("Custom PlayerKilled");

        // super.PlayerKilled(player, source);
		
		if ( player && source )
		{
			m_PlayerPrefix = this.GetPlayerPrefix( player , player.GetIdentity() );
			
			if( player == source )	// deaths not caused by another object (starvation, dehydration)
			{
				m_StatWater = player.GetStatWater();
				m_StatEnergy = player.GetStatEnergy();
				m_BleedMgr = player.GetBleedingManagerServer();
				
				if ( m_StatWater && m_StatEnergy && m_BleedMgr )
				{
					GetGame().ChatPlayer( m_PlayerPrefix + " died. Stats> Water: " + m_StatWater.Get().ToString() + " Energy: " + m_StatEnergy.Get().ToString() + " Bleed sources: " + m_BleedMgr.GetBleedingSourcesCount().ToString() );
				}
				else if ( m_StatWater && m_StatEnergy && !m_BleedMgr )
				{
					GetGame().ChatPlayer( m_PlayerPrefix + " died. Stats> Water: " + m_StatWater.Get().ToString() + " Energy: " + m_StatEnergy.Get().ToString() );
				}
				else
				{
					GetGame().ChatPlayer( m_PlayerPrefix + " died. Stats> could not fetch");
				}
			}
			else if ( source.IsWeapon() )  // player
			{				
				m_Source = PlayerBase.Cast( EntityAI.Cast( source ).GetHierarchyParent() );
				m_PlayerPrefix2 = this.GetPlayerPrefix( m_Source ,  m_Source.GetIdentity() );
				
				GetGame().ChatPlayer( m_PlayerPrefix + " killed by " + m_PlayerPrefix2 + " with " + source.GetDisplayName() );	
			}
			else					// others
			{
				GetGame().ChatPlayer( m_PlayerPrefix + " killed by " + source.GetDisplayName() );
			}
		}
		else 
		{
			GetGame().ChatPlayer("DEBUG: PlayerKilled() player/object does not exist");
		}	
	}
}

Prints "Custom PlayerKilled" as expected in script.log when a player is killed

Details

Severity
None
Resolution
Open
Reproducibility
Always
Operating System
Windows 10 x64
Category
Modding
Steps To Reproduce

^

Event Timeline

vbawol added a subscriber: vbawol.Feb 15 2019, 11:57 PM
Geez changed the task status from New to Assigned.Feb 18 2019, 1:00 PM
rVn added a subscriber: rVn.EditedFeb 18 2019, 1:22 PM

This works as expected - original events haven't changed and their source is in the comment next to the function declaration, in this case

void PlayerKilled( PlayerBase player, Object source )  // PlayerBase.c

PlayerBase.c

	override void EEKilled( Object killer )
	{
		Print("EEKilled, you have died");
		
		if ( m_AdminLog )
		{
			m_AdminLog.PlayerKilled( this, killer );
		}
          ...
        }

If you are extending the class, you need to change the called plugin as well or it won't get called.

Geez changed the task status from Assigned to Reviewed.Feb 18 2019, 1:23 PM

It is indeed, sorry I must have been a little too much tired. Thank's for clarifying !

rVn closed this task as Resolved.Mar 28 2019, 5:34 PM
rVn claimed this task.
This comment was removed by JOHNS3288.