1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
--- a/src/iuse.cpp
+++ b/src/iuse.cpp
@@ -289,6 +289,7 @@
static const std::string flag_HEATS_FOOD( "HEATS_FOOD" );
static const std::string flag_PLANT( "PLANT" );
static const std::string flag_PLOWABLE( "PLOWABLE" );
+static const std::string flag_USE_UPS( "USE_UPS" );
// how many characters per turn of radio
static constexpr int RADIO_PER_TURN = 25;
@@ -2162,7 +2163,8 @@
}
} else { // Activated
int ch = 1;
- if( it->ammo_remaining() > 0 ) {
+ if( it->ammo_remaining() > 0 || ( it->has_flag( flag_USE_UPS ) &&
+ p->has_enough_charges( *it, false ) ) ) {
ch = uilist( _( "Radio:" ), {
_( "Scan" ), _( "Turn off" )
} );
@@ -4082,7 +4084,8 @@
if( t ) { // Effects while simply on
} else {
- if( !it->units_sufficient( *p ) ) {
+ if( !it->units_sufficient( *p ) || !( it->has_flag( flag_USE_UPS ) &&
+ p->has_enough_charges( *it, false ) ) ) {
p->add_msg_if_player( m_info, _( "Your tactical tonfa is out of power." ) );
it->convert( "shocktonfa_off" ).active = false;
} else {
@@ -4107,7 +4110,8 @@
int iuse::mp3( player *p, item *it, bool, const tripoint & )
{
// TODO: avoid item id hardcoding to make this function usable for pure json-defined devices.
- if( !it->units_sufficient( *p ) ) {
+ if( !it->units_sufficient( *p ) || !( it->has_flag( flag_USE_UPS ) &&
+ p->has_enough_charges( *it, false ) ) ) {
p->add_msg_if_player( m_info, _( "The device's batteries are dead." ) );
} else if( p->has_active_item( "mp3_on" ) || p->has_active_item( "smartphone_music" ) ||
p->has_active_item( "afs_atomic_smartphone_music" ) ||
@@ -6367,9 +6371,12 @@
int iuse::einktabletpc( player *p, item *it, bool t, const tripoint &pos )
{
if( t ) {
- if( !it->get_var( "EIPC_MUSIC_ON" ).empty() && ( it->ammo_remaining() > 0 ) ) {
+ if( !it->get_var( "EIPC_MUSIC_ON" ).empty() &&
+ ( it->ammo_remaining() > 0 || ( it->has_flag( flag_USE_UPS ) &&
+ p->has_enough_charges( *it, false ) ) ) ) {
if( calendar::once_every( 5_minutes ) ) {
- it->ammo_consume( 1, p->pos() );
+ //it->ammo_consume( 1, p->pos() );
+ p->consume_charges( *it, 1 );
}
//the more varied music, the better max mood.
|