Pol  Revision:cb584c9
guardrgn.cpp
Go to the documentation of this file.
1 
7 #include "guardrgn.h"
8 
9 #include <stddef.h>
10 
11 #include "../bscript/bobject.h"
12 #include "../bscript/impstr.h"
13 #include "../clib/cfgelem.h"
14 #include "globals/uvars.h"
15 #include "network/cgdata.h"
16 #include "network/client.h"
17 #include "scrdef.h"
18 #include "scrsched.h"
19 #include "uoscrobj.h"
20 
21 namespace Pol
22 {
23 namespace Core
24 {
26  : Region( elem, id ),
27  guarded_( elem.remove_bool( "Guarded", false ) ),
28  nocombat_( elem.remove_bool( "NoCombat", false ) ),
29  region_name_( elem.rest() ),
30  entertext_( elem.remove_string( "EnterText", "" ) ),
31  leavetext_( elem.remove_string( "LeaveText", "" ) ),
32  enter_script_( elem.remove_string( "EnterScript", "" ) ),
33  leave_script_( elem.remove_string( "LeaveScript", "" ) )
34 {
35 }
36 
38 {
39  gamestate.justicedef = new JusticeDef( "Justice" );
41  "regions/justice.cfg", // preferred
42  "regions/regions.cfg", // other
43  "JusticeRegion Region" );
44 }
45 
47 {
48  size_t size = Region::estimateSize();
49  size += 2 * sizeof( bool ); /*guarded_ nocombat_*/
50  size += region_name_.capacity() + entertext_.capacity() + leavetext_.capacity() +
51  enter_script_.capacity() + leave_script_.capacity();
52  return size;
53 }
54 
56 {
57  if ( enter_script_.empty() )
58  return false;
59 
60  ScriptDef sd;
61  if ( !sd.config_nodie( enter_script_, 0, 0 ) )
62  return false;
63  if ( !sd.exists() )
64  return false;
65 
68  return res->isTrue();
69 }
70 
72 {
73  if ( leave_script_.empty() )
74  return false;
75 
76  ScriptDef sd;
77  if ( !sd.config_nodie( leave_script_, 0, 0 ) )
78  return false;
79  if ( !sd.exists() )
80  return false;
81 
84  return res->isTrue();
85 }
86 
87 // This function is static!
89 {
90  JusticeRegion* cur_justice_region = nullptr;
91 
92  if ( client != nullptr && client->gd != nullptr )
93  cur_justice_region = client->gd->justice_region;
94 
95  bool no_combat = false;
96  if ( cur_justice_region != nullptr )
97  no_combat = cur_justice_region->nocombat_;
98 
99  return no_combat;
100 }
101 }
102 }
void read_region_data(RegionGroupBase &grp, const char *preferred_filename, const char *other_filename, const char *tags_expected)
Definition: region.cpp:225
JusticeRegion(Clib::ConfigElem &elem, RegionId id)
Definition: guardrgn.cpp:25
bool config_nodie(const std::string &name, const Plib::Package *pkg, const char *mainpfx)
Definition: scrdef.cpp:84
void read_justice_zones()
Definition: guardrgn.cpp:37
std::string enter_script_
Definition: guardrgn.h:63
virtual size_t estimateSize() const POL_OVERRIDE
Definition: guardrgn.cpp:46
std::string region_name_
Definition: guardrgn.h:60
bool exists() const
Definition: scrdef.cpp:126
virtual bool isTrue() const
Definition: object.cpp:911
virtual size_t estimateSize() const
Definition: region.cpp:38
JusticeDef * justicedef
Definition: uvars.h:148
ClientGameData * gd
Definition: client.h:252
std::string leave_script_
Definition: guardrgn.h:64
bool RunEnterScript(Mobile::Character *chr)
Definition: guardrgn.cpp:55
GameState gamestate
Definition: uvars.cpp:74
RegionGroup< JusticeRegion > JusticeDef
Definition: uvars.h:93
Core::JusticeRegion * justice_region
Definition: cgdata.h:70
std::string entertext_
Definition: guardrgn.h:61
bool RunLeaveScript(Mobile::Character *chr)
Definition: guardrgn.cpp:71
unsigned short RegionId
Definition: zone.h:23
static bool RunNoCombatCheck(Network::Client *client)
Definition: guardrgn.cpp:88
bool run_script_to_completion(const char *filename, Bscript::BObjectImp *parameter)
Definition: scrsched.cpp:333
std::string leavetext_
Definition: guardrgn.h:62
Definition: berror.cpp:12