void Health::PickupHealth( Event *ev ) { Sentient *sen; Entity *other; other = ev->GetEntity( 1 ); if ( !other || !other->isSubclassOf( Sentient ) ) { return; } sen = ( Sentient * )other; if ( sen->health >= sen->max_health ) return; if ( !ItemPickup( other, false ) ) { return; } GameplayManager *gpm = GameplayManager::getTheGameplayManager(); if ( gpm->hasObject(getArchetype()) ) { if ( gpm->hasFormula("HealthPotion") ) { GameplayFormulaData fd(this); amount = gpm->calculate("HealthPotion", fd, sen->max_health); } str snd = gpm->getStringValue(getArchetype() + ".Use", "wav"); if ( snd.length() ) { int channel = CHAN_BODY; float volume = -1.0f; float mindist = -1.0f; if ( gpm->hasProperty(getArchetype() + ".Use","channel") ) channel = (int)gpm->getFloatValue(getArchetype() + ".Use", "channel"); if ( gpm->hasProperty(getArchetype() + ".Use","volume") ) volume = (int)gpm->getFloatValue(getArchetype() + ".Use", "volume"); if ( gpm->hasProperty(getArchetype() + ".Use","mindist") ) mindist = (int)gpm->getFloatValue(getArchetype() + ".Use", "mindist"); Sound(snd, channel, volume, mindist); } } sen->health += (float)amount; if ( sen->health > sen->max_health ) { sen->health = sen->max_health; } // If we are on fire stop it sen->ProcessEvent( EV_Sentient_StopOnFire ); }
void HealthInventoryItem::Use( Event *ev ) { Entity *other; Sentient *sen; //Event *event; str sound_name; other = ev->GetEntity<Entity>( 1 ); if ( !other || !other->isSubclassOf( Sentient ) ) { return; } sen = ( Sentient * )other; GameplayManager *gpm = GameplayManager::getTheGameplayManager(); if ( gpm->hasObject(getArchetype()) ) { if ( gpm->hasFormula("HealthPotion") ) { GameplayFormulaData fd(this); amount = gpm->calculate("HealthPotion", fd, sen->max_health); } str snd = gpm->getStringValue(getArchetype() + ".Use", "wav"); if ( snd.length() ) { int channel = CHAN_BODY; float volume = -1.0f; float mindist = -1.0f; if ( gpm->hasProperty(getArchetype() + ".Use","channel") ) channel = (int)gpm->getFloatValue(getArchetype() + ".Use", "channel"); if ( gpm->hasProperty(getArchetype() + ".Use","volume") ) volume = (int)gpm->getFloatValue(getArchetype() + ".Use", "volume"); if ( gpm->hasProperty(getArchetype() + ".Use","mindist") ) mindist = (int)gpm->getFloatValue(getArchetype() + ".Use", "mindist"); Sound(snd, channel, volume, mindist); } } sen->health += (float)amount; if ( sen->health > sen->max_health ) { sen->health = sen->max_health; } // If we are on fire stop it sen->ProcessEvent( EV_Sentient_StopOnFire ); // Spawn special effect around sentient // Uncomment if we need it /*sound_name = GetRandomAlias( "snd_use" ); if ( sound_name ) other->Sound( sound_name.c_str(), 0 ); event = new Event( EV_AttachModel ); event->AddString( "models/fx_tikifx2.tik" ); event->AddString( "Bip01 Spine" ); // set scale event->AddFloat( 1.0f ); // set targetname event->AddString( "regen" ); // set detach_at_death event->AddInteger( 1 ); // set remove_time event->AddFloat( 2.0f ); other->ProcessEvent( event );*/ PostEvent( EV_Remove, 0.0f ); }