/**
* Contains some simul_efuns.
* @author Pinkfish
*/
#include <player.h>
/**
* This method checks to see if both of the objects are able to do a
* pk action on each other. This will return 1 if they cannot
* complete the action, ie: either of them are not player killers.
* It will take an object or a string as the first parameter and attempt
* to check for pkness, if the off_line flag is set it will even check for
* players that are not even logged on.
* <p>
* If an object is passed into this method, it is first checked with the
* method query_owner_pk_check(), if this returns a non-zero value it is
* used as the person who owns the object. This allows objects to be
* pk checked when they are not players.
* @param thing1 first object to check
* @param thing2 second object to check
* @param off_line allow the check to occur if they are not logged on
* @return 1 if they cannot attack each other
*/
int pk_check( mixed thing1, mixed thing2, int off_line ) {
int pk1, pk2;
object ob;
// Check to see if this some sort of object that has a pk owner.
if( objectp(thing1) && !interactive(thing1) &&
thing1->query_owner_pk_check() ) {
thing1 = thing1->query_owner_pk_check();
}
// Get the pk value for thing1.
if( !objectp(thing1) ) {
ob = TO->find_player(thing1);
if( ob )
thing1 = ob;
}
if( objectp(thing1) && userp(thing1) )
pk1 = thing1->query_property(PKER) && interactive(thing1);
else if( stringp(thing1) && off_line && PLAYER_H->test_user(thing1) )
pk1 = PLAYER_H->test_property( thing1, PKER );
else
return 0;
// Check to see if this some sort of object that has a pk owner.
if( objectp(thing2) && !interactive(thing2) &&
thing2->query_owner_pk_check() )
thing2 = thing2->query_owner_pk_check();
// Get the pk values for thing2.
if( !objectp(thing2) ) {
ob = TO->find_player(thing2);
if( ob )
thing2 = ob;
}
if( objectp(thing2) && userp(thing2) )
pk2 = thing2->query_property(PKER) && interactive(thing2);
else if( stringp(thing2) && off_line && PLAYER_H->test_user(thing2) )
pk2 = PLAYER_H->test_property( thing2, PKER );
else
return 0;
if( objectp(thing1) && objectp(thing2) ) {
if( thing1->query_creator() && !thing2->query_creator() )
return 1;
if( thing2->query_creator() && !thing1->query_creator() )
return 1;
}
// Do the actual checks.
return !pk1 || !pk2;
} /* pk_check() */
int silenced( object ob ) {
if( !objectp(ob) )
return 0;
return ob->query_silenced();
} /* silenced() */
int channel_silenced( object ob ) {
if( !objectp(ob) )
return 0;
if( silenced(ob) )
return 1;
return ob->query_channel_silenced();
} /* channel_silenced() */