void cTempEffects::dispel( P_CHAR pc_dest, P_CHAR pSource, bool silent ) { if (cPythonScript::canChainHandleEvent(EVENT_DISPEL, pc_dest->getEvents())) { PyObject *source; if (pSource) { source = pSource->getPyObject(); } else { Py_INCREF(Py_None); source = Py_None; } PyObject *args = Py_BuildValue("(NNBBsN", pc_dest->getPyObject(), source, silent ? 1 : 0, 0, "", PyTuple_New(0)); bool result = cPythonScript::callChainedEventHandler(EVENT_DISPEL, pc_dest->getEvents(), args); Py_DECREF(args); if (result) { return; } } std::vector< cTempEffect* >::iterator i = teffects.begin(); for( i = teffects.begin(); i != teffects.end(); i++ ) if( (*i) != NULL && (*i)->dispellable && (*i)->getDest() == pc_dest->serial() ) { if( isCharSerial( (*i)->getDest() ) ) { P_CHAR pChar = FindCharBySerial( (*i)->getDest() ); if( pChar ) pChar->removeEffect( (*i) ); } (*i)->Dispel( pSource, silent ); teffects.erase( i ); } std::make_heap( teffects.begin(), teffects.end(), cTempEffects::ComparePredicate() ); }
void cSkills::Snooping( P_PLAYER player, P_ITEM container ) { P_CHAR owner = container->getOutmostChar(); if ( !owner ) return; // Snooping into something thats not equipped?! PyObject *args = Py_BuildValue( "(NNN)", owner->getPyObject(), container->getPyObject(), player->getPyObject() ); // Event prfen if ( player->canHandleEvent( EVENT_SNOOPING ) ) { if ( player->callEventHandler( EVENT_SNOOPING, args ) ) { Py_DECREF( args ); return; } } if ( owner->canHandleEvent( EVENT_SNOOPING ) ) { if ( owner->callEventHandler( EVENT_SNOOPING, args ) ) { Py_DECREF( args ); return; } } Py_DECREF( args ); cUOSocket* socket = player->socket(); if ( !socket ) return; P_CHAR pc_owner = container->getOutmostChar(); P_PLAYER pp_owner = dynamic_cast<P_PLAYER>( pc_owner ); if ( pp_owner && pp_owner->isGMorCounselor() ) { pp_owner->message( tr( "%1 is trying to snoop in your pack" ).arg( player->name() ) ); socket->sysMessage( 500209 ); // You can not peek into the container. return; } else if ( player->checkSkill( SNOOPING, 0, 1000 ) ) { socket->sendContainer( container ); socket->sysMessage( tr( "You successfully peek into that container." ) ); } else { socket->sysMessage( 500210 ); // You failed to peek into the container. if ( !pp_owner ) // is NPC ? { if ( pc_owner ) { pc_owner->talk( tr( "Art thou attempting to disturb my privacy?" ) ); } } else { pp_owner->message( tr( "You notice %1 trying to peek into your pack!" ).arg( player->name() ) ); } } // SetTimerSec(player->objectdelay(), Config::instance()->objectDelay()+Config::instance()->snoopdelay()); player->setObjectDelay( Server::instance()->time() + ( Config::instance()->objectDelay() + Config::instance()->snoopdelay() ) * MY_CLOCKS_PER_SEC ); }