EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
CorpStationMgr.cpp
Go to the documentation of this file.
1 /*
2  ------------------------------------------------------------------------------------
3  LICENSE:
4  ------------------------------------------------------------------------------------
5  This file is part of EVEmu: EVE Online Server Emulator
6  Copyright 2006 - 2021 The EVEmu Team
7  For the latest information visit https://evemu.dev
8  ------------------------------------------------------------------------------------
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13 
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public License along with
19  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20  Place - Suite 330, Boston, MA 02111-1307, USA, or go to
21  http://www.gnu.org/copyleft/lesser.txt.
22  ------------------------------------------------------------------------------------
23  Author: Zhur
24  Rewrite: Allan
25 */
26 
27 /*
28  * CORP__ERROR
29  * CORP__WARNING
30  * CORP__INFO
31  * CORP__MESSAGE
32  * CORP__TRACE
33  * CORP__CALL
34  * CORP__CALL_DUMP
35  * CORP__RSP_DUMP
36  * CORP__DB_ERROR
37  * CORP__DB_WARNING
38  * CORP__DB_INFO
39  * CORP__DB_MESSAGE
40  */
41 
42 #include "eve-server.h"
43 
44 #include "PyBoundObject.h"
45 #include "PyServiceCD.h"
46 #include "StaticDataMgr.h"
47 #include "account/AccountService.h"
48 #include "chat/LSCService.h"
50 #include "station/Station.h"
51 #include "station/StationDataMgr.h"
52 
54 : public PyBoundObject
55 {
56 public:
58 
60  : PyBoundObject(mgr),
61  m_dispatch(new Dispatcher(this)),
62  m_db(db),
64  {
66 
67  m_strBoundObjectName = "CorpStationMgrIMBound";
68 
69  //PyCallable_REG_CALL(CorpStationMgrIMBound, GetEveOwners);
70  PyCallable_REG_CALL(CorpStationMgrIMBound, GetCorporateStationInfo);
71  PyCallable_REG_CALL(CorpStationMgrIMBound, DoStandingCheckForStationService);
72  PyCallable_REG_CALL(CorpStationMgrIMBound, GetPotentialHomeStations);
75  PyCallable_REG_CALL(CorpStationMgrIMBound, GetQuoteForRentingAnOffice);
76  PyCallable_REG_CALL(CorpStationMgrIMBound, GetNumberOfUnrentedOffices);
79  PyCallable_REG_CALL(CorpStationMgrIMBound, CancelRentOfOffice);
80  //testing
81  PyCallable_REG_CALL(CorpStationMgrIMBound, GetStationOffices);
82  PyCallable_REG_CALL(CorpStationMgrIMBound, GetCorporateStationOffice);
83  PyCallable_REG_CALL(CorpStationMgrIMBound, DoesPlayersCorpHaveJunkAtStation);
84  PyCallable_REG_CALL(CorpStationMgrIMBound, GetQuoteForGettingCorpJunkBack);
85  PyCallable_REG_CALL(CorpStationMgrIMBound, PayForReturnOfCorpJunk);
86 
87  pStationItem = sEntityList.GetStationByID(station_id).get();
88  }
89  virtual ~CorpStationMgrIMBound() { delete m_dispatch; }
90  virtual void Release() {
91  //I hate this statement
92  delete this;
93  }
94 
95  //PyCallable_DECL_CALL(GetEveOwners);
96  PyCallable_DECL_CALL(GetCorporateStationInfo);
97  PyCallable_DECL_CALL(DoStandingCheckForStationService);
98  PyCallable_DECL_CALL(GetPotentialHomeStations);
99  PyCallable_DECL_CALL(SetHomeStation);
100  PyCallable_DECL_CALL(SetCloneTypeID);
101  PyCallable_DECL_CALL(GetQuoteForRentingAnOffice);
102  PyCallable_DECL_CALL(RentOffice);
103  PyCallable_DECL_CALL(CancelRentOfOffice);
104  PyCallable_DECL_CALL(GetStationOffices);
105  PyCallable_DECL_CALL(GetNumberOfUnrentedOffices);
106  PyCallable_DECL_CALL(MoveCorpHQHere);
107  //testing
108  PyCallable_DECL_CALL(GetCorporateStationOffice);
109  PyCallable_DECL_CALL(DoesPlayersCorpHaveJunkAtStation);
110  PyCallable_DECL_CALL(GetQuoteForGettingCorpJunkBack);
111  PyCallable_DECL_CALL(PayForReturnOfCorpJunk);
112 
113 
114 protected:
115  Dispatcher *const m_dispatch;
116 
117  StationItem* pStationItem; //we do not own this
118 
121 };
122 
124 
126 : PyService(mgr, "corpStationMgr"),
127  m_dispatch(new Dispatcher(this))
128 {
129  _SetCallDispatcher(m_dispatch);
130 
131  PyCallable_REG_CALL(CorpStationMgr, GetStationServiceStates)
132  PyCallable_REG_CALL(CorpStationMgr, GetImprovementStaticData)
133 }
134 
136  delete m_dispatch;
137 }
138 
139 
141  if (!bind_args->IsInt()) {
142  codelog(SERVICE__ERROR, "%s Service: invalid bind argument type %s", GetName(), bind_args->TypeString());
143  return nullptr;
144  }
145  return new CorpStationMgrIMBound( m_manager, m_db, bind_args->AsInt()->value() );
146 }
147 
148 PyResult CorpStationMgrIMBound::Handle_GetStationOffices( PyCallArgs& call )
149 {
150  return pStationItem->GetOffices();
151 }
152 
153 PyResult CorpStationMgrIMBound::Handle_GetNumberOfUnrentedOffices( PyCallArgs &call )
154 {
155  return new PyInt(pStationItem->GetAvalibleOfficeCount());
156 }
157 
158 PyResult CorpStationMgrIMBound::Handle_GetQuoteForRentingAnOffice(PyCallArgs &call)
159 {
160  return new PyLong(pStationItem->GetOfficeRentalFee());
161 }
162 
163 // cannot find this call in client code
164 PyResult CorpStationMgrIMBound::Handle_GetCorporateStationInfo(PyCallArgs &call) {
165  // is this right?
166  /* returns:
167  * list(
168  * eveowners:
169  * rowset: ownerID,ownerName,typeID
170  * corporations:
171  * rowset:corporationID,corporationName,description,shares,graphicID,memberCount,ceoID,stationID,raceID,corporationType,creatorID,hasPlayerPersonnelManager,tickerName,sendCharTerminationMessage,shape1,shape2,shape3,color1,color2,color3,typeface,memberLimit,allowedMemberRaceIDs,url,taxRate,minimumJoinStanding,division1,division2,division3,division4,division5,division6,division7,allianceID
172  * offices (may be None):
173  * rowset: corporationID,itemID,officeFolderID
174  * )
175  */
176 
177  PyList *list = new PyList();
179  list->AddItem(m_db.ListStationCorps(m_stationID));
180  list->AddItem(StationDB::GetOffices(m_stationID));/*m_db.ListStationOffices*/
181  return list;
182 }
183 
184 PyResult CorpStationMgrIMBound::Handle_SetCloneTypeID(PyCallArgs &call) {
185 
186  Call_SetCloneTypeID arg;
187  if (!arg.Decode(&call.tuple)){
188  codelog(SERVICE__ERROR, "%s: Failed to decode arguments.", GetName());
189  }
190 
191  //Get cost of clone
192  double cost = m_db.GetCloneTypeCostByID(arg.CloneTypeID);
193 
194  //take the money, send wallet blink event record the transaction in their journal.
195  std::string reason = "DESC: Updating Clone in ";
196  // make config option for station name or system name here?
197  reason += call.client->GetSystemName();
198  reason += " at ";
199  reason += stDataMgr.GetStationName(call.client->GetStationID());
201  call.client->GetCharacterID(),
202  call.client->GetStationID(),
203  cost,
204  reason.c_str(),
206  call.client->GetStationID(),
208 
209  //update type of clone
210  CharacterDB c_db;
211  c_db.ChangeCloneType(call.client->GetCharacterID(), arg.CloneTypeID);
212  return PyStatic.NewNone();
213 }
214 
215 PyResult CorpStationMgrIMBound::Handle_RentOffice(PyCallArgs &call) {
216  // corp role is checked in client before this button is shown. no need to check here.
217  // 1 param, corp rent price
218  Call_SingleIntegerArg arg;
219  if (!arg.Decode(&call.tuple)) {
220  codelog(SERVICE__ERROR, "%s: Failed to decode arguments.", GetName());
221  return nullptr;
222  }
223 
224  Client* pClient = call.client;
225 
226  // see if corp has office in station already.
227  if (pStationItem->GetOfficeID(pClient->GetCorporationID()))
228  throw UserError ("RentingYouHaveAnOfficeHere");
229 
230  // this may not be needed, as rental fee is queried immediately prior to this call
231  if (arg.arg != pStationItem->GetOfficeRentalFee())
232  _log(CORP__WARNING, "RentOffice() - Was quoted %i but station reports %u for office rental at %s", \
233  arg.arg, pStationItem->GetOfficeRentalFee(), pStationItem->name());
234 
235  // check if the corp has enough money
236  // remove the money and record the transaction
237  std::string reason = "Office Rental at ";
238  reason += pStationItem->itemName();
239  reason += " by ";
240  reason += pClient->GetCharName();
241  AccountService::TranserFunds(pClient->GetCorporationID(), pStationItem->GetOwnerID(), arg.arg, reason.c_str(), Journal::EntryType::OfficeRentalFee);
251  OfficeData odata = OfficeData();
252  odata.ticker = pClient->GetChar()->corpTicker();
253  odata.corporationID = pClient->GetCorporationID();
254  odata.expiryTime = Win32TimeNow() + EvE::Time::Month;
255  odata.lockDown = false;
256  odata.rentalFee = arg.arg;
257  odata.typeID = 27; // office typeID
258  pStationItem->RentOffice(odata);
259 
260  if (!odata.officeID) {
261  codelog(CORP__ERROR, "%s: Error at renting a new office", pClient->GetName());
262  return nullptr;
263  }
264 
265  // send data to bill mgr for creating bill and notifications
266 
267  /*
268  * [PyString "OnNotificationReceived"]
269  * [PyList 0 items]
270  * [PyString "clientID"] << Notify::Types::
271  */
272 
274  // This has to be sent to everyone in the station
275  // are corp members notified?
276  OfficeAttributeUpdate change;
277  change.oldOfficeFolderID = PyStatic.NewNone();
278  change.oldOfficeID = PyStatic.NewNone();
279  change.oldStationID = PyStatic.NewNone();
280  change.oldTypeID = PyStatic.NewNone();
281  change.newOfficeFolderID = odata.folderID;
282  change.newOfficeID = odata.officeID;
283  change.newStationID = odata.stationID;
284  change.newTypeID = odata.typeID;
285  OnObjectPublicAttributesUpdated update;
286  update.notificationParams = new PyDict();
287  update.realRowCount = 1; // what is this?
288  update.bindID = GetBindStr();
289  update.changePKIndexValue = odata.stationID; // primary key
290  update.changes = change.Encode();
291  PyTuple* payload = update.Encode();
292  std::vector<Client*> cVec;
293  cVec.clear();
294  pStationItem->GetGuestList(cVec);
295  for (auto cur : cVec) {
296  PyIncRef(payload);
297  cur->SendNotification("OnObjectPublicAttributesUpdated", "stationid", &payload, false);
298  }
299  PyDecRef( payload );
300 
301  // returns officeID
302  return new PyInt(odata.officeID);
303 }
304 
305 PyResult CorpStationMgrIMBound::Handle_GetCorporateStationOffice(PyCallArgs &call) {
306  /*
307  * if not session.stationid2:
308  * return
309  * if self.itemIDOfficeFolderIDByCorporationID is None:
310  * self.itemIDOfficeFolderIDByCorporationID = util.IndexRowset(['corporationID', 'itemID', 'officeFolderID'], [], 'corporationID')
311  * corpStationMgr = self.GetCorpStationManager()
312  * corpStationMgr.Bind()
313  * offices = corpStationMgr.GetCorporateStationOffice()
314  * for office in offices:
315  * self.itemIDOfficeFolderIDByCorporationID[office.corporationID] = [office.corporationID, office.itemID, office.officeFolderID]
316  */
317  // this gets all corp offices in current station
318  return pStationItem->GetOffices();
319 }
320 
321 PyResult CorpStationMgrIMBound::Handle_MoveCorpHQHere(PyCallArgs &call)
322 {
323  if (call.client->GetCorpHQ() == m_stationID)
324  throw UserError ("CorpHQIsAtThisStation");
325 
326  uint32 corpID = call.client->GetCorporationID();
328 
329  // update all online members with new hq change. no OnCorporationChanged bcast
331  Client* pClient(nullptr);
332  std::vector<uint32> ids;
333  CorporationDB::GetMemberIDs(corpID, ids, true);
334  for (auto cur : ids) {
335  pClient = sEntityList.FindClientByCharID(cur);
336  if (pClient != nullptr)
337  pClient->GetChar()->SetCorpHQ(m_stationID);
338  }
339 
340  return nullptr;
341 }
342 
347 PyResult CorpStationMgrIMBound::Handle_GetPotentialHomeStations(PyCallArgs &call) {
348  // this is for station options for xfering clone
349  //returns stationID,typeID,serviceMask
350 
351  Client* pClient(call.client);
352  std::vector<uint32> stVec;
353  stVec.push_back(m_stationID); // current station. is this right?
354  // first char home station always an option
355  stVec.push_back(CharacterDB::GetStartingStationByCareer(pClient->GetChar()->careerID()));
356  // get corp stations and add to vector
357  m_db.GetCorpStations(pClient->GetCorporationID(), stVec);
358 
359  // TODO: not sure how to determine possible stations yet...
360  /* ideas:
361  * get all corp offices.
362  * determine standings of requesting character to specific stations/locations
363  *
364  * pc corp members - get corp standings vs. potential stations/corps/locations
365  * npc corp members - get faction standings for potential locations
366  *
367  * other possible stations? test for min/max potential station count?
368  */
369 
370  PyDict* dict = new PyDict();
371  PyList* list = new PyList();
372  StationData data = StationData();
373  for (auto cur : stVec) {
374  stDataMgr.GetStationData(cur, data);
375  dict->SetItemString("stationID", new PyInt(cur));
376  dict->SetItemString("typeID", new PyInt(data.typeID));
377  dict->SetItemString("serviceMask", new PyLong(data.serviceMask));
378  list->AddItem(new PyObject("util.KeyVal", dict));
379  }
380 
381  return list;
382 }
383 
384 PyResult CorpStationMgrIMBound::Handle_GetQuoteForGettingCorpJunkBack(PyCallArgs &call)
385 { //cost = corpStationMgr.GetQuoteForGettingCorpJunkBack()
386  _log(CORP__CALL, "CorpStationMgrIMBound::Handle_GetQuoteForGettingCorpJunkBack()");
387  call.Dump(CORP__CALL_DUMP);
388 
389  // office rental fee (with multiplier? config option for multiplier?)
390  //stDataMgr.GetOfficeRentalFee(m_stationID);
391  return new PyInt(pStationItem->GetOfficeRentalFee());
392 }
393 
394 PyResult CorpStationMgrIMBound::Handle_DoesPlayersCorpHaveJunkAtStation(PyCallArgs &call)
395 { //if corpStationMgr.DoesPlayersCorpHaveJunkAtStation():
396  _log(CORP__CALL, "CorpStationMgrIMBound::Handle_DoesPlayersCorpHaveJunkAtStation()");
397  call.Dump(CORP__CALL_DUMP);
398 
399  // query station for (officeID:flagimpounded)
400 
401  // returns boolean
402  return PyStatic.NewFalse();
403 }
404 
405 PyResult CorpStationMgrIMBound::Handle_SetHomeStation(PyCallArgs &call) {
406  // sm.GetService('corp').GetCorpStationManager().SetHomeStation(newHomeStationID)
410  Call_SingleIntegerArg arg;
411  if (!arg.Decode(&call.tuple)) {
412  codelog(SERVICE__ERROR, "%s: Failed to decode arguments.", GetName());
413  return nullptr;
414  }
415 
416  call.client->GetChar()->SetBaseID(arg.arg);
418  return nullptr;
419 }
420 
421 
426 PyResult CorpStationMgrIMBound::Handle_DoStandingCheckForStationService(PyCallArgs &call) {
427  // not sure what this actually does...
428  // corpStationMgr.DoStandingCheckForStationService(stationServiceID)
429  /*
430  * 01:09:09 L CorpStationMgrIMBound::Handle_DoStandingCheckForStationService(): size= 1
431  * 01:09:09 [SvcCallDump] Call Arguments:
432  * 01:09:09 [SvcCallDump] Tuple: 1 elements
433  * 01:09:09 [SvcCallDump] [ 0] Integer field: 4096 (repair)
434  * 23:09:41 L Server: DoStandingCheckForStationService call made to
435  * 23:09:41 L CorpStationMgrIMBound::Handle_DoStandingCheckForStationService(): size= 1
436  * 23:09:41 [SvcCall] Call Arguments:
437  * 23:09:41 [SvcCall] Tuple: 1 elements
438  * 23:09:41 [SvcCall] [ 0] Integer field: 8192
439  * 23:09:41 L Server: DoStandingCheckForStationService call made to
440  * 23:09:41 L CorpStationMgrIMBound::Handle_DoStandingCheckForStationService(): size= 1
441  * 23:09:41 [SvcCall] Call Arguments:
442  * 23:09:41 [SvcCall] Tuple: 1 elements
443  * 23:09:41 [SvcCall] [ 0] Integer field: 16384
444  * 18:49:22 L CorpStationMgrIMBound::Handle_DoStandingCheckForStationService(): size= 1
445  * 18:49:22 [SvcCall] Call Arguments:
446  * 18:49:22 [SvcCall] Tuple: 1 elements
447  * 18:49:22 [SvcCall] [ 0] Integer field: 65536 (fitting)
448  * 01:11:32 L CorpStationMgrIMBound::Handle_DoStandingCheckForStationService(): size= 1
449  * 01:11:32 [SvcCallDump] Call Arguments:
450  * 01:11:32 [SvcCallDump] Tuple: 1 elements
451  * 01:11:32 [SvcCallDump] [ 0] Integer field: 1048576 (insurance)
452  */
453 
454  _log(CORP__CALL, "CorpStationMgrIMBound::Handle_DoStandingCheckForStationService()");
455  call.Dump(CORP__CALL_DUMP);
456 
457  // returns None
458  return PyStatic.NewNone();
459 }
460 
461 PyResult CorpStationMgrIMBound::Handle_CancelRentOfOffice(PyCallArgs &call)
462 { // corpStationMgr.CancelRentOfOffice()
463  _log(CORP__CALL, "CorpStationMgrIMBound::Handle_CancelRentOfOffice()");
464  call.Dump(CORP__CALL_DUMP);
465 
466  /* this will need to search for items in office hangar.
467  * if none, then no worries
468  * if items, move them to 'impounded' (flagImpounded - corp junk)
469  *
470  * not sure if the items change locations from corp officeID to stationID
471  * if so, cannot remove officeID from office map, but will need a flag to show it as 'not rented'
472  */
473  return nullptr;
474 }
475 
476 PyResult CorpStationMgrIMBound::Handle_PayForReturnOfCorpJunk(PyCallArgs &call)
477 { // corpStationMgr.PayForReturnOfCorpJunk(cost)
478  _log(CORP__CALL, "CorpStationMgrIMBound::Handle_PayForReturnOfCorpJunk()");
479  call.Dump(CORP__CALL_DUMP);
480 
481  return nullptr;
482 }
483 
484 PyResult CorpStationMgr::Handle_GetImprovementStaticData(PyCallArgs &call)
485 {
486  // more outpost shit. we're nowhere near ready for this yet.
487  // more info in client/script/ui/station/stationmanagement/base_stationmanagement.py
488  /*
489  * outpostData = self.GetOutpostData()
490  * isd = sm.RemoteSvc('corpStationMgr').GetImprovementStaticData()
491  * outpostRaceID = cfg.invtypes.Get(outpostData.typeID).raceID
492  * outpostAsmLines = set([ each.assemblyLineTypeID for each in sm.ProxySvc('ramProxy').AssemblyLinesGet(eve.session.stationid) ])
493  */
494  _log(CORP__CALL, "CorpStationMgr::Handle_GetImprovementStaticData()");
495  call.Dump(CORP__CALL_DUMP);
496 
497  return nullptr;
498 }
499 
500 PyResult CorpStationMgr::Handle_GetStationServiceStates(PyCallArgs &call)
501 {
502  /* i *THINK* this is only sent for outposts.....stationID is 61m (above static stations)
503  * since it has NOT been called yet on evemu, it very well could be outposts only (cause we dont have any)
504  *
505  * **UPDATE**
506  * i was right. these are outposts or conqurable stations. found this in code...
507  * if util.IsOutpost(eve.session.stationid) or sm.GetService('godma').GetType(eve.stationItem.stationTypeID).isPlayerOwnable == 1:
508  * self.serviceItemsState = sm.RemoteSvc('corpStationMgr').GetStationServiceStates()
509  *
510  *
511  * ==================== Sent from Client 98 bytes
512  *
513  * [PyObjectData Name: macho.CallReq]
514  * [PyTuple 6 items]
515  * [PyInt 6]
516  * [PyObjectData Name: macho.MachoAddress]
517  * [PyTuple 4 items]
518  * [PyInt 2]
519  * [PyInt 0]
520  * [PyIntegerVar 45]
521  * [PyNone]
522  * [PyObjectData Name: macho.MachoAddress]
523  * [PyTuple 3 items]
524  * [PyInt 8]
525  * [PyString "corpStationMgr"]
526  * [PyNone]
527  * [PyInt 5654387]
528  * [PyTuple 1 items]
529  * [PyTuple 2 items]
530  * [PyInt 0]
531  * [PySubStream 39 bytes]
532  * [PyTuple 4 items]
533  * [PyInt 1]
534  * [PyString "GetStationServiceStates"]
535  * [PyTuple 0 items]
536  * [PyDict 1 kvp]
537  * [PyString "machoVersion"]
538  * [PyInt 1]
539  * [PyNone]
540  *
541  *
542  *
543  * ==================== Sent from Server 347 bytes
544  *
545  * [PyObjectData Name: macho.CallRsp]
546  * [PyTuple 6 items]
547  * [PyInt 7]
548  * [PyObjectData Name: macho.MachoAddress]
549  * [PyTuple 3 items]
550  * [PyInt 8]
551  * [PyString "corpStationMgr"]
552  * [PyNone]
553  * [PyObjectData Name: macho.MachoAddress]
554  * [PyTuple 4 items]
555  * [PyInt 2]
556  * [PyIntegerVar 15001000001023]
557  * [PyIntegerVar 45]
558  * [PyNone]
559  * [PyInt 5654387]
560  * [PyTuple 1 items]
561  * [PySubStream 279 bytes]
562  * [PyDict 6 kvp]
563  * [PyInt 512]
564  * [PyObjectData Name: util.Row]
565  * [PyDict 2 kvp]
566  * [PyString "header"]
567  * [PyList 5 items]
568  * [PyString "solarSystemID"]
569  * [PyString "stationID"]
570  * [PyString "serviceID"]
571  * [PyString "stationServiceItemID"]
572  * [PyString "isEnabled"]
573  * [PyString "line"]
574  * [PyList 5 items]
575  * [PyInt 30001984]
576  * [PyInt 61000012] << stationID 61m = outpost
577  * [PyInt 512]
578  * [PyIntegerVar 318021030]
579  * [PyInt 1]
580  * [PyInt 16384]
581  * [PyObjectData Name: util.Row]
582  * [PyDict 2 kvp]
583  * [PyString "header"]
584  * [PyList 5 items]
585  * [PyString "solarSystemID"]
586  * [PyString "stationID"]
587  * [PyString "serviceID"]
588  * [PyString "stationServiceItemID"]
589  * [PyString "isEnabled"]
590  * [PyString "line"]
591  * [PyList 5 items]
592  * [PyInt 30001984]
593  * [PyInt 61000012]
594  * [PyInt 16384]
595  * [PyIntegerVar 318021027]
596  * [PyInt 1]
597  * [PyInt 4096]
598  * [PyObjectData Name: util.Row]
599  * [PyDict 2 kvp]
600  * [PyString "header"]
601  * [PyList 5 items]
602  * [PyString "solarSystemID"]
603  * [PyString "stationID"]
604  * [PyString "serviceID"]
605  * [PyString "stationServiceItemID"]
606  * [PyString "isEnabled"]
607  * [PyString "line"]
608  * [PyList 5 items]
609  * [PyInt 30001984]
610  * [PyInt 61000012]
611  * [PyInt 4096]
612  * [PyIntegerVar 318021029]
613  * [PyInt 1]
614  * [PyInt 8192]
615  * [PyObjectData Name: util.Row]
616  * [PyDict 2 kvp]
617  * [PyString "header"]
618  * [PyList 5 items]
619  * [PyString "solarSystemID"]
620  * [PyString "stationID"]
621  * [PyString "serviceID"]
622  * [PyString "stationServiceItemID"]
623  * [PyString "isEnabled"]
624  * [PyString "line"]
625  * [PyList 5 items]
626  * [PyInt 30001984]
627  * [PyInt 61000012]
628  * [PyInt 8192]
629  * [PyIntegerVar 318021028]
630  * [PyInt 1]
631  * [PyInt 16]
632  * [PyObjectData Name: util.Row]
633  * [PyDict 2 kvp]
634  * [PyString "header"]
635  * [PyList 5 items]
636  * [PyString "solarSystemID"]
637  * [PyString "stationID"]
638  * [PyString "serviceID"]
639  * [PyString "stationServiceItemID"]
640  * [PyString "isEnabled"]
641  * [PyString "line"]
642  * [PyList 5 items]
643  * [PyInt 30001984]
644  * [PyInt 61000012]
645  * [PyInt 16]
646  * [PyIntegerVar 1002331174723]
647  * [PyInt 1]
648  * [PyInt 65536]
649  * [PyObjectData Name: util.Row]
650  * [PyDict 2 kvp]
651  * [PyString "header"]
652  * [PyList 5 items]
653  * [PyString "solarSystemID"]
654  * [PyString "stationID"]
655  * [PyString "serviceID"]
656  * [PyString "stationServiceItemID"]
657  * [PyString "isEnabled"]
658  * [PyString "line"]
659  * [PyList 5 items]
660  * [PyInt 30001984]
661  * [PyInt 61000012]
662  * [PyInt 65536]
663  * [PyIntegerVar 318021026]
664  * [PyInt 1]
665  * [PyNone]
666  */
667  _log(CORP__CALL, "CorpStationMgr::Handle_GetStationServiceStates()");
668  call.Dump(CORP__CALL_DUMP);
669 
670  return new PyDict();
671 }
Base Python wire object.
Definition: PyRep.h:66
Dispatcher *const m_dispatch
PyCallable_DECL_CALL(GetCorporateStationInfo)
static bool ChangeCloneLocation(uint32 charID, uint32 locationID)
#define _log(type, fmt,...)
Definition: logsys.h:124
#define stDataMgr
PyObject * ListStationOwners(uint32 station_id)
int32 value() const
Definition: PyRep.h:247
Python's dictionary.
Definition: PyRep.h:719
int32 GetCorpHQ() const
Definition: Client.h:124
uint32 GetOwnerID()
Definition: Station.h:94
int32 GetCharacterID() const
Definition: Client.h:113
int32 GetCorporationID() const
Definition: Client.h:123
#define sEntityList
Definition: EntityList.h:208
void GetCorpStations(uint32 corpID, std::vector< uint32 > &stVec)
std::string m_strBoundObjectName
Definition: PyBoundObject.h:54
int8 GetAvalibleOfficeCount()
Definition: Station.h:92
const char * name()
CharacterRef GetChar() const
Definition: Client.h:164
Python tuple.
Definition: PyRep.h:567
const char * GetName() const
Definition: PyService.h:54
static void GetMemberIDs(uint32 corpID, std::vector< uint32 > &ids, bool online=true)
virtual void Release()
void GetGuestList(std::vector< Client * > &cVec)
Definition: Station.cpp:224
void AddItem(PyRep *i)
Definition: PyRep.h:701
void _SetCallDispatcher(CallDispatcher *d)
Definition: PyCallable.h:87
virtual ~CorpStationMgrIMBound()
static uint32 GetStartingStationByCareer(uint32 careerID)
PyCallable_Make_InnerDispatcher(CorpStationMgr) CorpStationMgr
Python object.
Definition: PyRep.h:826
Dispatcher *const m_dispatch
void SetBaseID(uint32 baseID)
Definition: Character.cpp:443
#define codelog(type, fmt,...)
Definition: logsys.h:128
uint32 careerID() const
Definition: Character.h:333
virtual ~CorpStationMgr()
std::string GetBindStr() const
static void TranserFunds(uint32 fromID, uint32 toID, double amount, std::string reason="", uint8 entryTypeID=Journal::EntryType::Undefined, uint32 referenceID=0, uint16 fromKey=Account::KeyType::Cash, uint16 toKey=Account::KeyType::Cash, Client *pClient=nullptr)
Python integer.
Definition: PyRep.h:231
PyServiceMgr *const m_manager
Definition: PyService.h:91
virtual PyBoundObject * CreateBoundObject(Client *pClient, const PyRep *bind_args)
#define PyStatic
Definition: PyRep.h:1209
const char * GetName() const
Definition: Client.h:94
int64 Win32TimeNow()
Definition: utils_time.cpp:70
uint32 GetCharID()
Definition: Client.h:166
#define PyDecRef(op)
Definition: PyRep.h:57
Client *const client
Definition: PyCallable.h:49
Python object "ccp_exceptions.UserError".
Definition: PyExceptions.h:121
#define PyCallable_REG_CALL(c, m)
Definition: PyServiceCD.h:78
Definition: Client.h:66
static void UpdateCorpHQ(uint32 corpID, uint32 stationID)
std::string corpTicker() const
Definition: Character.h:299
unsigned __int32 uint32
Definition: eve-compat.h:50
double GetCloneTypeCostByID(uint32 cloneTypeID)
#define PyIncRef(op)
Definition: PyRep.h:56
static PyRep * GetOffices(uint32 stationID)
Definition: StationDB.cpp:54
StationItem * pStationItem
std::string GetCharName()
Definition: Client.h:165
Dispatcher *const m_dispatch
PyRep * GetOffices()
Definition: Station.h:91
const std::string & itemName() const
PyObject * ListStationCorps(uint32 station_id)
void Dump(LogType type) const
Definition: PyCallable.cpp:81
int32 GetStationID() const
Definition: Client.h:114
PyCallable_Make_Dispatcher(CorpStationMgrIMBound) CorpStationMgrIMBound(PyServiceMgr *mgr
bool IsInt() const
Definition: PyRep.h:100
void RentOffice(OfficeData &odata)
Definition: Station.cpp:178
int32 GetOfficeRentalFee()
Definition: Station.h:93
PyInt * AsInt()
Definition: PyRep.h:122
std::string GetSystemName() const
Definition: Client.h:155
const char * TypeString() const
Definition: PyRep.cpp:76
void SetCorpHQ(uint32 stationID)
Definition: Character.h:307
CorporationDB uint32 station_id
Python list.
Definition: PyRep.h:639
void SetItemString(const char *key, PyRep *value)
SetItemString adds or sets a database entry.
Definition: PyRep.h:812
bool ChangeCloneType(uint32 charID, uint32 typeID)
const char * GetName() const
Definition: PyBoundObject.h:44
Python long integer.
Definition: PyRep.h:261
PyTuple * tuple
Definition: PyCallable.h:50
uint32 GetOfficeID(uint32 corpID)
Definition: Station.cpp:110