Advertisement
Guest User

Untitled

a guest
Aug 17th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 57.04 KB | None | 0 0
  1. class IAchievement;
  2. class IQuestState;
  3. class IQuest;
  4. class NPC;
  5. class AIZone;
  6. class AIZoneListener;
  7. class Spawner;
  8. class IFastTravel;
  9. class Projectile;
  10. class IUE4Actor;
  11. class ILocalPlayer;
  12. class IItem;
  13. class IPlayer;
  14. class IActor;
  15. class Actor;
  16. class Player;
  17. class GameAPI;
  18. class World;
  19. class TimerSet;
  20. struct LocationAndRotation;
  21. struct QuestStateInfo;
  22. struct PlayerQuestState;
  23. struct ItemAndCount;
  24.  
  25. enum DamageType {PhysicalDamage, FireDamage, ColdDamage, ShockDamage};
  26. enum ItemRarity {ResourceItem, NormalItem, RareItem, LegendaryItem, LeetItem};
  27. enum NPCStateTransitionType {EndConversationTransition, ContinueConversationTransition, ShopTransition};
  28.  
  29.  
  30.  
  31. class TimerSet {
  32. public:
  33. struct TimerEvent {
  34. float timeLeft;
  35. float initialTime;
  36. bool recurring;
  37. bool withContext;
  38. std::function<void()> callback;
  39. std::function<void(Actor *)> contextCallback;
  40. };
  41. std::map<std::string, TimerSet::TimerEvent> m_timers;
  42.  
  43. public:
  44. void Add(const std::string &, float, const std::function<void()> &);
  45. void AddWithContext(const std::string &, float, const std::function<void(Actor *)> &);
  46. void AddRecurring(const std::string &, float, const std::function<void()> &);
  47. void AddRecurringWithContext(const std::string &, float, const std::function<void(Actor *)> &);
  48. void Cancel(const std::string &);
  49. void Clear();
  50. void Tick(Actor *, float);
  51. };
  52.  
  53.  
  54. struct Vector3 {
  55. float x;
  56. float y;
  57. float z;
  58. public:
  59. Vector3();
  60. Vector3(float, float, float);
  61. Vector3 operator*(float) const;
  62. Vector3 & operator*=(float);
  63. Vector3 operator+(const Vector3 &) const;
  64. Vector3 & operator+=(const Vector3 &);
  65. Vector3 operator-(const Vector3 &) const;
  66. Vector3 & operator-=(const Vector3 &);
  67. float MagnitudeSquared() const;
  68. float Magnitude() const;
  69. static float DistanceSquared(const Vector3 &, const Vector3 &);
  70. static float Distance(const Vector3 &, const Vector3 &);
  71. void Normalize();
  72. static Vector3 Normalize(const Vector3 &);
  73. };
  74.  
  75. struct NPCStateTransition {
  76. const char* text;
  77. NPCStateTransitionType type;
  78. const char* nextState;
  79. };
  80.  
  81. struct NPCState {
  82. const char* text;
  83. std::vector<NPCStateTransition> transitions;
  84. };
  85.  
  86. struct ItemCountInfo {
  87. uint32_t count;
  88. uint32_t loadedAmmo;
  89. };
  90.  
  91. struct Rotation {
  92. float pitch;
  93. float yaw;
  94. float roll;
  95. public:
  96. Rotation();
  97. Rotation(float, float, float);
  98. };
  99.  
  100.  
  101. class Socket {
  102. public:
  103. const char* m_lastErrorMessage;
  104.  
  105. public:
  106. virtual ~Socket();
  107. virtual bool Read(void *, size_t);
  108. virtual bool Write(const void *, size_t);
  109. void ReadChecked(void *, size_t);
  110. uint8_t Read8();
  111. uint16_t Read16();
  112. uint32_t Read32();
  113. uint64_t Read64();
  114. const char* ReadString();
  115. float ReadFloat();
  116. Vector3 ReadVector();
  117. Vector3 ReadVector16();
  118. Rotation ReadRotation();
  119. Rotation ReadPrecisionRotation();
  120. float ReadSignedFraction();
  121. const std::string & GetLastErrorMessage() const;
  122. };
  123.  
  124. class WriteStream {
  125. public:
  126. Socket *m_sock;
  127. std::vector<unsigned char> m_buffer;
  128.  
  129. public:
  130. WriteStream(Socket *);
  131. void SetSocket(Socket *);
  132. void Write8(uint8_t);
  133. void Write16(uint16_t);
  134. void Write32(uint32_t);
  135. void Write64(uint64_t);
  136. void WriteSaturated16(float);
  137. void WriteString(const std::string &);
  138. void WriteFloat(float);
  139. void WriteVector(const Vector3 &);
  140. void WriteVector16(const Vector3 &);
  141. void WriteRotation(const Rotation &);
  142. void WritePrecisionRotation(const Rotation &);
  143. void WriteSignedFraction(float);
  144. void Write(const WriteStream &);
  145. void Write(const void *, size_t);
  146. void Flush();
  147. void Clear();
  148. };
  149.  
  150.  
  151. class IAchievement {
  152. public:
  153. virtual const char * GetName();
  154. virtual const char * GetDisplayName();
  155. virtual const char * GetDescription();
  156. };
  157.  
  158. struct LocationAndRotation {
  159. Vector3 location;
  160. Rotation rotation;
  161. };
  162.  
  163. class IQuestState {
  164. public:
  165. virtual const char * GetName();
  166. virtual const char * GetDescription();
  167. virtual void CheckForEarlyCompletion(IPlayer *);
  168. virtual void OnItemAcquired(IPlayer *, IItem *);
  169. virtual void OnItemPickupUsed(IPlayer *, const char *);
  170. };
  171.  
  172. class IQuest {
  173. public:
  174. virtual const char * GetName();
  175. virtual const char * GetDescription();
  176. virtual IQuestState * GetStartingState();
  177. virtual IQuestState * GetStateByName(const char *);
  178. };
  179.  
  180.  
  181. struct QuestStateInfo {
  182. const char* state;
  183. uint32_t count;
  184. };
  185.  
  186.  
  187. struct PlayerQuestState {
  188. IQuestState *state;
  189. uint32_t count;
  190. };
  191.  
  192.  
  193. template <class T> struct ActorRef {
  194. T *m_object;
  195.  
  196. ActorRef();
  197. ActorRef(T *);
  198. ActorRef(const ActorRef<T> &);
  199. ActorRef<T> & operator=(T *);
  200. ActorRef<T> & operator=(const ActorRef<T> &);
  201. T * operator->() const;
  202. T * Get() const;
  203. bool operator<(const ActorRef<T> &) const;
  204. };
  205.  
  206. //WriteStream
  207. /*
  208. template< typename IActor>
  209. struct ActorRef {
  210. IActor *m_object;
  211. };
  212.  
  213. template< typename IPlayer>
  214. struct ActorRef {
  215. IPlayer *m_object;
  216. };
  217.  
  218. template< typename NPC>
  219. struct ActorRef {
  220. NPC *m_object;
  221. };
  222.  
  223. template< typename Bear>
  224. struct ActorRef {
  225. Bear *m_object;
  226. };
  227.  
  228. template< typename BearChest>
  229. struct ActorRef {
  230. BearChest *m_object;
  231. };*/
  232.  
  233.  
  234. class IActor {
  235. public:
  236. virtual ~IActor();
  237. virtual void * GetUE4Actor();
  238. virtual bool IsNPC();
  239. virtual bool IsPlayer();
  240. virtual IPlayer * GetPlayerInterface();
  241. virtual void AddRef();
  242. virtual void Release();
  243. virtual void OnSpawnActor(IUE4Actor *);
  244. virtual void OnDestroyActor();
  245. virtual const char * GetBlueprintName();
  246. virtual bool IsCharacter();
  247. virtual bool CanBeDamaged(IActor *);
  248. virtual int32_t GetHealth();
  249. virtual int32_t GetMaxHealth();
  250. virtual void Damage(IActor *, IItem *, int32_t, DamageType);
  251. virtual void Tick(float);
  252. virtual bool CanUse(IPlayer *);
  253. virtual void OnUse(IPlayer *);
  254. virtual void OnHit(IActor *, const Vector3 &, const Vector3 &);
  255. virtual void OnAIMoveComplete();
  256. virtual const char * GetDisplayName();
  257. virtual bool IsElite();
  258. virtual bool IsPvPEnabled();
  259. virtual IItem ** GetShopItems(size_t &);
  260. virtual void FreeShopItems(IItem **);
  261. virtual int32_t GetBuyPriceForItem(IItem *);
  262. virtual int32_t GetSellPriceForItem(IItem *);
  263. virtual Vector3 GetLookPosition();
  264. virtual Rotation GetLookRotation();
  265. virtual IActor * GetOwner();
  266. };
  267.  
  268.  
  269. class Actor : public IActor {
  270. public:
  271. size_t m_refs;
  272. uint32_t m_id;
  273. IUE4Actor *m_target;
  274. TimerSet *m_timers;
  275. const char* m_blueprintName;
  276. ActorRef<IActor> m_owner;
  277. int32_t m_health;
  278. std::map<std::string, bool> m_states;
  279. float m_forwardMovementFraction;
  280. float m_strafeMovementFraction;
  281. Vector3 m_remotePosition;
  282. Vector3 m_remoteVelocity;
  283. Rotation m_remoteRotation;
  284. float m_remoteLocationBlendFactor;
  285. Spawner *m_spawner;
  286.  
  287. virtual void OnKilled(IActor *, IItem *);
  288. virtual void OnTargetKilled(IActor *, IItem *);
  289. public:
  290. Actor(const std::string &);
  291. virtual ~Actor();
  292. virtual bool IsValid() const;
  293. virtual void * GetUE4Actor();
  294. virtual void AddRef();
  295. virtual void Release();
  296. void RemoveFromWorld();
  297. virtual void OnSpawnActor(IUE4Actor *);
  298. virtual void OnDestroyActor();
  299. virtual const char * GetDeathMessage();
  300. virtual const char * GetBlueprintName();
  301. virtual bool IsCharacter();
  302. virtual bool IsNPC();
  303. virtual bool IsProjectile();
  304. virtual bool IsPlayer();
  305. virtual IPlayer * GetPlayerInterface();
  306. virtual bool ShouldSendPositionUpdates();
  307. virtual bool ShouldReceivePositionUpdates();
  308. uint32_t GetId() const;
  309. void SetId(uint32_t);
  310. Vector3 GetPosition();
  311. Vector3 GetProjectilePosition();
  312. virtual Vector3 GetLookPosition();
  313. Rotation GetRotation();
  314. virtual Rotation GetLookRotation();
  315. Vector3 GetVelocity();
  316. float GetForwardMovementFraction() const;
  317. float GetStrafeMovementFraction() const;
  318. bool IsOnGround();
  319. void SetPosition(const Vector3 &);
  320. void SetRotation(const Rotation &);
  321. void SetVelocity(const Vector3 &);
  322. void SetForwardAndStrafeMovement(float, float);
  323. void SetRemotePositionAndRotation(const Vector3 &, const Rotation &);
  324. void InterpolateRemotePosition(float);
  325. virtual IActor * GetOwner();
  326. void LocalRespawn(const Vector3 &, const Rotation &);
  327. bool MoveToLocation(const Vector3 &);
  328. bool MoveToRandomLocationInRadius(float);
  329. bool MoveToActor(IActor *);
  330. bool GetState(const std::string &);
  331. //virtual void UpdateState(const std::string &, bool);
  332. //virtual void TriggerEvent(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IActor*, bool);
  333. //virtual void TriggerEvent(const std::string &, IActor *, bool);
  334. const std::map<std::string, bool> & GetStates();
  335. IActor * LineTraceTo(const Vector3 &);
  336. void FireBullets(IItem *, int32_t, DamageType, float, uint32_t, float);
  337. void FireBullets(IItem *, int32_t, DamageType, const Vector3 &, float, uint32_t, float);
  338. virtual bool CanBeDamaged(IActor *);
  339. virtual float GetMaximumDamageDistance();
  340. virtual int32_t GetHealth();
  341. virtual int32_t GetMaxHealth();
  342. virtual void Damage(IActor *, IItem *, int32_t, DamageType);
  343. void PerformSetHealth(int32_t);
  344. virtual void Tick(float);
  345. virtual bool CanUse(IPlayer *);
  346. virtual void OnUse(IPlayer *);
  347. virtual void PerformUse(IPlayer *);
  348. virtual void OnHit(IActor *, const Vector3 &, const Vector3 &);
  349. virtual void OnAIMoveComplete();
  350. virtual const char * GetDisplayName();
  351. virtual bool IsElite();
  352. virtual bool IsPvPEnabled();
  353. virtual IItem ** GetShopItems(size_t &);
  354. virtual std::vector<IItem*, std::allocator<IItem*> > GetShopItems();
  355. virtual void FreeShopItems(IItem **);
  356. virtual std::vector<IItem*, std::allocator<IItem*> > GetValidBuyItems();
  357. virtual float GetShopBuyPriceMultiplier();
  358. virtual float GetShopSellPriceMultiplier();
  359. virtual int32_t GetBuyPriceForItem(IItem *);
  360. virtual int32_t GetSellPriceForItem(IItem *);
  361. void SetSpawner(Spawner *);
  362. void AddTimer(const std::string &, float, const std::function<void ()> &);
  363. void AddTimerWithContext(const std::string &, float, const std::function<void (Actor *)> &);
  364. void AddRecurringTimer(const std::string &, float, const std::function<void ()> &);
  365. void AddRecurringTimerWithContext(const std::string &, float,
  366. const std::function<void (Actor *)> &);
  367. void CancelTimer(const std::string &);
  368. void PerformReloadNotification(uint32_t);
  369. };
  370.  
  371. class NPC : public Actor {
  372. public:
  373. std::map<std::string, NPCState> m_states;
  374.  
  375. public:
  376. NPC(const std::string &);
  377. virtual bool IsNPC();
  378. void AddState(const std::string &, const std::string &);
  379. void AddStateTransition(const std::string &, const std::string &,
  380. const std::string &);
  381. void AddStateTransitionToEnd(const std::string &, const std::string &);
  382. void AddStateTransitionToShop(const std::string &, const std::string &);
  383. const char* GetTextForState(const std::string &);
  384. std::vector<NPCStateTransition> GetTransitionsForState(const std::string &);
  385. virtual std::string GetInitialState(IPlayer *);
  386. virtual void OnTransitionTaken(IPlayer *, const std::string &,
  387. const std::string &);
  388. virtual bool CanUse(IPlayer *);
  389. virtual void PerformUse(IPlayer *);
  390. virtual int32_t GetBuyPriceForItem(IItem *);
  391. virtual int32_t GetSellPriceForItem(IItem *);
  392. };
  393.  
  394.  
  395.  
  396.  
  397.  
  398. class IInventory {
  399. public:
  400. virtual ~IInventory();
  401. virtual size_t GetCount();
  402. virtual IItem * GetItem(size_t);
  403. virtual uint32_t GetItemCount(size_t);
  404. virtual uint32_t GetItemLoadedAmmo(size_t);
  405. virtual void Destroy();
  406. };
  407.  
  408.  
  409. struct ItemAndCount {
  410. IItem *item;
  411. uint32_t count;
  412. uint32_t loadedAmmo;
  413. };
  414.  
  415.  
  416. class AIZone {
  417. public:
  418. const char* m_name;
  419. size_t m_playerCount;
  420. std::set<AIZoneListener*, std::less<AIZoneListener*>, std::allocator<AIZoneListener*> > m_listeners;
  421.  
  422. public:
  423. AIZone(const std::string &);
  424. const std::string & GetName() const;
  425. bool IsActive() const;
  426. void OnPlayerEntered();
  427. void OnPlayerLeft();
  428. void AddListener(AIZoneListener *);
  429. void RemoveListener(AIZoneListener *);
  430. };
  431.  
  432. class AIZoneListener {
  433. public:
  434. AIZone *m_zone;
  435.  
  436. public:
  437. AIZoneListener();
  438. virtual ~AIZoneListener();
  439. void SetAIZone(const std::string &);
  440. virtual void OnAIZoneActivated();
  441. virtual void OnAIZoneDeactivated();
  442. bool IsAIZoneActive();
  443. };
  444.  
  445. class Spawner : public AIZoneListener {
  446. public:
  447. std::vector<Actor > m_actors;
  448. Vector3 m_position;
  449. Rotation m_rotation;
  450. size_t m_maxActors;
  451. float m_maxSpawnTimer;
  452. float m_currentSpawnTimer;
  453.  
  454. public:
  455. Spawner(const std::string &, const Vector3 &, const Rotation &, size_t,
  456. float);
  457. virtual void OnAIZoneActivated();
  458. virtual void OnAIZoneDeactivated();
  459. virtual void Tick(float);
  460. virtual Actor * Spawn();
  461. void RemoveActor(Actor *);
  462. virtual size_t GetMaxActors();
  463. virtual float GetSpawnTimer();
  464. };
  465.  
  466.  
  467. class IFastTravel {
  468. public:
  469. virtual ~IFastTravel();
  470. virtual size_t GetCount();
  471. virtual const char * GetRegionName(size_t);
  472. virtual const char * GetDisplayName(size_t);
  473. virtual void Destroy();
  474. };
  475.  
  476.  
  477.  
  478.  
  479. class Projectile : public Actor {
  480. public:
  481. IItem *m_item;
  482. float m_lifetime;
  483.  
  484. public:
  485. Projectile(IActor *, IItem *, const std::string &);
  486. virtual bool ShouldSendPositionUpdates();
  487. virtual bool IsProjectile();
  488. virtual int32_t GetDirectDamage();
  489. virtual DamageType GetDamageType();
  490. virtual bool HasSplashDamage();
  491. virtual float GetSplashRadius();
  492. virtual int32_t GetSplashDamage();
  493. virtual bool DamagesOnHit();
  494. IItem * GetItem() const;
  495. virtual void OnHit(IActor *, const Vector3 &, const Vector3 &);
  496. void DealDamage(IActor *);
  497. virtual void Tick(float);
  498. virtual void OnLifetimeEnded();
  499. static bool SpawnProjectile(IActor *, Projectile *);
  500. };
  501.  
  502. class IUE4Actor {
  503. public:
  504. virtual void * GetUE4Actor();
  505. virtual void RemoveFromWorld();
  506. virtual Vector3 GetPosition();
  507. virtual Rotation GetRotation();
  508. virtual Vector3 GetProjectilePosition();
  509. virtual Vector3 GetCharacterVelocity();
  510. virtual void SetPosition(const Vector3 &);
  511. virtual void SetRotation(const Rotation &);
  512. virtual void SetCharacterVelocity(const Vector3 &);
  513. virtual void SetForwardAndStrafeMovement(float, float);
  514. virtual void InterpolatePositionAndRotation(const Vector3 &, const Rotation &, float, float);
  515. virtual bool MoveToLocation(const Vector3 &);
  516. virtual bool MoveToRandomLocationInRadius(float);
  517. virtual bool MoveToActor(IActor *);
  518. virtual void OnUpdateState(const char *, bool);
  519. virtual void OnTriggerEvent(const char *, IActor *);
  520. virtual void OnUpdatePvPEnabled(bool);
  521. virtual IActor * LineTraceTo(const Vector3 &);
  522. virtual void FireBullets(IItem *, int32_t, DamageType, const Vector3 &, uint32_t, float);
  523. virtual void LocalRespawn(const Vector3 &, const Rotation &);
  524. virtual bool IsOnGround();
  525. virtual void OnReload(uint32_t);
  526. };
  527.  
  528. class ILocalPlayer : public IUE4Actor {
  529. public:
  530. virtual void SetPlayerInterface(IPlayer *);
  531. virtual Vector3 GetLookPosition();
  532. virtual Rotation GetLookRotation();
  533. virtual float GetForwardMovementFraction();
  534. virtual float GetStrafeMovementFraction();
  535. virtual void SetCurrentQuest(IQuest *, IQuestState *, uint32_t);
  536. virtual void DisplayMessage(const char *, const char *);
  537. virtual void DisplayEvent(const char *, const char *);
  538. virtual void OnEquip(size_t, IItem *);
  539. virtual void OnChangeSlot(size_t);
  540. virtual void OnUpdateCountdown(int32_t);
  541. virtual void OnUpdatePvPCountdown(bool, int32_t);
  542. virtual void OnNewItem(const char *, uint32_t);
  543. virtual void OnNPCConversationState(IActor *, const char *, const char **, const char **, size_t);
  544. virtual void OnNPCConversationEnd();
  545. virtual void OnNPCShop(IActor *);
  546. virtual void OnChatMessage(const char *, bool, const char *);
  547. virtual void OnPlayerKillMessage(const char *, bool, const char *, bool, IItem *);
  548. virtual void OnPlayerSuicideMessage(const char *, bool, IItem *);
  549. virtual void OnPlayerDeadMessage(const char *, bool, const char *);
  550. virtual void OnAchievement(const char *);
  551. virtual void OnLocalDeath(IActor *, IItem *);
  552. };
  553.  
  554.  
  555.  
  556. class IItem {
  557. public:
  558. virtual ~IItem();
  559. virtual const char * GetName();
  560. virtual const char * GetDisplayName();
  561. virtual const char * GetItemTypeName();
  562. virtual const char * GetDescription();
  563. virtual const char * GetFlavorText();
  564. virtual bool CanEquip();
  565. virtual uint32_t GetMaximumCount();
  566. virtual bool CanActivate(IPlayer *);
  567. virtual bool CanActivateInInventory();
  568. virtual void Activate(IPlayer *);
  569. virtual bool ShowInInventory();
  570. virtual bool ShowEventOnPickup();
  571. virtual bool ShowEventOnDuplicatePickup();
  572. virtual bool ShowNotificationOnPickup();
  573. virtual float GetCooldownTime();
  574. virtual ItemRarity GetItemRarity();
  575. virtual IItem * GetAmmoType();
  576. virtual uint32_t GetClipSize();
  577. virtual int32_t GetDamage();
  578. virtual int32_t GetDamagePerSecond();
  579. virtual DamageType GetDamageType();
  580. virtual int32_t GetManaCost();
  581. virtual const char * GetCustomCostDescription();
  582. virtual bool IsAutoFire();
  583. virtual uint32_t GetNumberOfProjectiles();
  584. virtual float GetReloadTime(int32_t);
  585. virtual bool HasPartialReload();
  586. virtual float GetRange();
  587. virtual int32_t GetTradeValue();
  588. virtual bool IsDynamic();
  589. virtual bool IsUpdating();
  590. };
  591.  
  592.  
  593.  
  594. class IPlayer {
  595. public:
  596. int32_t m_mana;
  597. virtual IActor * GetActorInterface();
  598. void AddRef();
  599. void Release();
  600. virtual bool IsLocalPlayer() const;
  601. virtual ILocalPlayer * GetLocalPlayer() const;
  602. virtual const char * GetPlayerName();
  603. virtual const char * GetTeamName();
  604. virtual uint8_t GetAvatarIndex();
  605. virtual const uint32_t * GetColors();
  606. virtual bool IsPvPDesired();
  607. virtual void SetPvPDesired(bool);
  608. virtual IInventory * GetInventory();
  609. virtual uint32_t GetItemCount(IItem *);
  610. virtual uint32_t GetLoadedAmmo(IItem *);
  611. virtual bool AddItem(IItem *, uint32_t, bool);
  612. virtual bool RemoveItem(IItem *, uint32_t);
  613. virtual bool AddLoadedAmmo(IItem *, IItem *, uint32_t);
  614. virtual bool RemoveLoadedAmmo(IItem *, uint32_t);
  615. virtual IItem * GetItemForSlot(size_t);
  616. virtual void EquipItem(size_t, IItem *);
  617. virtual size_t GetCurrentSlot();
  618. virtual void SetCurrentSlot(size_t);
  619. virtual IItem * GetCurrentItem();
  620. virtual int32_t GetMana();
  621. virtual bool UseMana(int32_t);
  622. virtual void SetItemCooldown(IItem *, float, bool);
  623. virtual bool IsItemOnCooldown(IItem *);
  624. virtual float GetItemCooldown(IItem *);
  625. virtual bool HasPickedUp(const char *);
  626. virtual void MarkAsPickedUp(const char *);
  627. virtual IQuest ** GetQuestList(size_t *);
  628. virtual void FreeQuestList(IQuest **);
  629. virtual IQuest * GetCurrentQuest();
  630. virtual void SetCurrentQuest(IQuest *);
  631. virtual PlayerQuestState GetStateForQuest(IQuest *);
  632. virtual void StartQuest(IQuest *);
  633. virtual void AdvanceQuestToState(IQuest *, IQuestState *);
  634. virtual void CompleteQuest(IQuest *);
  635. virtual bool IsQuestStarted(IQuest *);
  636. virtual bool IsQuestCompleted(IQuest *);
  637. virtual void EnterAIZone(const char *);
  638. virtual void ExitAIZone(const char *);
  639. virtual void UpdateCountdown(int32_t);
  640. void HideCountdown();
  641. virtual bool CanReload();
  642. virtual void RequestReload();
  643. virtual float GetWalkingSpeed();
  644. virtual float GetSprintMultiplier();
  645. virtual float GetJumpSpeed();
  646. virtual float GetJumpHoldTime();
  647. virtual bool CanJump();
  648. virtual void SetJumpState(bool);
  649. virtual void SetSprintState(bool);
  650. virtual void SetFireRequestState(bool);
  651. virtual void TransitionToNPCState(const char *);
  652. virtual void BuyItem(IActor *, IItem *, uint32_t);
  653. virtual void SellItem(IActor *, IItem *, uint32_t);
  654. virtual void EnterRegion(const char *);
  655. virtual void Respawn();
  656. virtual void Teleport(const char *);
  657. virtual void Chat(const char *);
  658. virtual IFastTravel * GetFastTravelDestinations(const char *);
  659. virtual void FastTravel(const char *, const char *);
  660. virtual void MarkAsAchieved(IAchievement *);
  661. virtual bool HasAchieved(IAchievement *);
  662. virtual void SubmitDLCKey(const char *);
  663. virtual uint32_t GetCircuitInputs(const char *);
  664. virtual void SetCircuitInputs(const char *, uint32_t);
  665. virtual void GetCircuitOutputs(const char *, bool *, size_t);
  666. };
  667.  
  668.  
  669.  
  670. class Player : public Actor, public IPlayer {
  671. public:
  672. uint32_t m_characterId;
  673. const char* m_playerName;
  674. const char* m_teamName;
  675. uint8_t m_avatarIndex;
  676. uint32_t m_colors[4];
  677. std::map<IItem*, ItemAndCount, std::less<IItem*>, std::allocator<std::pair<IItem* const, ItemAndCount> > > m_inventory;
  678. std::set<std::basic_string<char>,std::less<std::basic_string<char> >,std::allocator<std::basic_string<char> > > m_pickups;
  679. std::map<IItem*, float, std::less<IItem*>, std::allocator<std::pair<IItem* const, float> > > m_cooldowns;
  680. std::map<std::basic_string<char>,unsigned int,std::less<std::basic_string<char> >,std::allocator<std::pair<const std::basic_string<char>,unsigned int> > > m_circuitInputs;
  681. std::map<std::basic_string<char>,std::vector<bool,std::allocator<bool> >,std::less<std::basic_string<char> >,std::allocator<std::pair<const std::basic_string<char>,std::vector<bool,std::allocator<bool> > > > > m_circuitOutputs;
  682. bool m_admin;
  683. bool m_pvpEnabled;
  684. bool m_pvpDesired;
  685. float m_pvpChangeTimer;
  686. int32_t m_pvpChangeReportedTimer;
  687. bool m_changingServerRegion;
  688. const char* m_currentRegion;
  689. const char* m_changeRegion;
  690. std::set<std::string> m_aiZones;
  691. int32_t m_mana;
  692. float m_manaRegenTimer;
  693. float m_healthRegenCooldown;
  694. float m_healthRegenTimer;
  695. int32_t m_countdown;
  696. Vector3 m_remoteLookPosition;
  697. Rotation m_remoteLookRotation;
  698. IItem *m_equipped[10];
  699. size_t m_currentSlot;
  700. std::map<IQuest*, PlayerQuestState, std::less<IQuest*>, std::allocator<std::pair<IQuest* const, PlayerQuestState> > > m_questStates;
  701. IQuest *m_currentQuest;
  702. float m_walkingSpeed;
  703. float m_jumpSpeed;
  704. float m_jumpHoldTime;
  705. ActorRef<NPC> m_currentNPC;
  706. const char* m_currentNPCState;
  707. ILocalPlayer *m_localPlayer;
  708. WriteStream *m_eventsToSend;
  709. bool m_itemsUpdated;
  710. float m_itemSyncTimer;
  711. uint32_t m_chatMessageCounter;
  712. float m_chatFloodDecayTimer;
  713. IItem *m_lastHitByItem;
  714. float m_lastHitItemTimeLeft;
  715. float m_circuitStateCooldownTimer;
  716.  
  717. protected:
  718. virtual void OnKilled(IActor *, IItem *);
  719. public:
  720. Player(bool);
  721. virtual ~Player();
  722. virtual bool IsPlayer();
  723. virtual IPlayer * GetPlayerInterface();
  724. virtual IActor * GetActorInterface();
  725. virtual bool CanBeDamaged(IActor *);
  726. virtual bool IsCharacter();
  727. virtual bool ShouldSendPositionUpdates();
  728. virtual bool ShouldReceivePositionUpdates();
  729. virtual void Tick(float);
  730. virtual void Damage(IActor *, IItem *, int32_t, DamageType);
  731. virtual void OnDestroyActor();
  732. void OnKillEvent(IPlayer *, IActor *, IItem *);
  733. virtual Vector3 GetLookPosition();
  734. virtual Rotation GetLookRotation();
  735. void SetRemoteLookPosition(const Vector3 &);
  736. void SetRemoteLookRotation(const Rotation &);
  737. virtual bool CanJump();
  738. virtual bool IsLocalPlayer() const;
  739. virtual ILocalPlayer * GetLocalPlayer() const;
  740. void InitLocalPlayer(ILocalPlayer *);
  741. bool IsAdmin() const;
  742. void SetPlayerName(const std::string &);
  743. void SetTeamName(const std::string &);
  744. void SetAvatarIndex(uint8_t);
  745. void SetColors(const uint32_t *);
  746. void SetCharacterId(uint32_t);
  747. virtual bool IsPvPEnabled();
  748. virtual bool IsPvPDesired();
  749. virtual void SetPvPDesired(bool);
  750. void PerformSetPvPEnabled(bool);
  751. void PerformSetPvPDesired(bool);
  752. void PerformUpdatePvPCountdown(bool, int32_t);
  753. virtual void UpdateState(const std::string &, bool);
  754. virtual const char * GetPlayerName();
  755. virtual const char * GetTeamName();
  756. virtual uint8_t GetAvatarIndex();
  757. virtual const uint32_t * GetColors();
  758. uint32_t GetCharacterId() const;
  759. const std::map<IItem*, ItemAndCount, std::less<IItem*>, std::allocator<std::pair<IItem* const, ItemAndCount> > > & GetItemList() const;
  760. virtual IInventory * GetInventory();
  761. virtual uint32_t GetItemCount(IItem *);
  762. virtual uint32_t GetLoadedAmmo(IItem *);
  763. virtual bool AddItem(IItem *, uint32_t, bool);
  764. virtual bool RemoveItem(IItem *, uint32_t);
  765. bool PerformAddItem(IItem *, uint32_t, bool);
  766. bool PerformRemoveItem(IItem *, uint32_t);
  767. virtual bool AddLoadedAmmo(IItem *, IItem *, uint32_t);
  768. virtual bool RemoveLoadedAmmo(IItem *, uint32_t);
  769. void PerformSetLoadedAmmo(IItem *, uint32_t);
  770. virtual IItem * GetItemForSlot(size_t);
  771. virtual void EquipItem(size_t, IItem *);
  772. void PerformEquipItem(size_t, IItem *);
  773. virtual size_t GetCurrentSlot();
  774. virtual IItem * GetCurrentItem();
  775. virtual void SetCurrentSlot(size_t);
  776. void PerformSetCurrentSlot(size_t);
  777. void SetRemoteItem(IItem *);
  778. virtual int32_t GetMana();
  779. virtual bool UseMana(int32_t);
  780. void PerformSetMana(int32_t);
  781. virtual void SetItemCooldown(IItem *, float, bool);
  782. virtual bool IsItemOnCooldown(IItem *);
  783. virtual float GetItemCooldown(IItem *);
  784. virtual bool HasPickedUp(const char *);
  785. virtual void MarkAsPickedUp(const char *);
  786. void PerformMarkAsPickedUp(const std::string &);
  787. virtual IQuest ** GetQuestList(size_t *);
  788. virtual void FreeQuestList(IQuest **);
  789. virtual IQuest * GetCurrentQuest();
  790. virtual PlayerQuestState GetStateForQuest(IQuest *);
  791. virtual bool IsQuestStarted(IQuest *);
  792. virtual bool IsQuestCompleted(IQuest *);
  793. virtual void SetCurrentQuest(IQuest *);
  794. virtual void StartQuest(IQuest *);
  795. virtual void AdvanceQuestToState(IQuest *, IQuestState *);
  796. virtual void CompleteQuest(IQuest *);
  797. void PerformSetCurrentQuest(IQuest *);
  798. void PerformStartQuest(IQuest *);
  799. void PerformAdvanceQuestToState(IQuest *, IQuestState *);
  800. void PerformCompleteQuest(IQuest *);
  801. void SetInitialQuestStates(const std::map<std::string, QuestStateInfo> &,
  802. const std::string &);
  803. void SetInitialItemState(const std::map<std::string, ItemCountInfo> &,
  804. const std::vector<std::string> &, uint8_t);
  805. void SetInitialPickupState(const std::set<std::string> &);
  806. virtual void EnterAIZone(const char *);
  807. virtual void ExitAIZone(const char *);
  808. virtual void UpdateCountdown(int32_t);
  809. void PerformUpdateCountdown(int32_t);
  810. virtual void TriggerEvent(const std::string &, IActor *, bool);
  811. virtual bool CanReload();
  812. virtual void RequestReload();
  813. void PerformRequestReload();
  814. virtual float GetWalkingSpeed();
  815. virtual float GetSprintMultiplier();
  816. virtual float GetJumpSpeed();
  817. virtual float GetJumpHoldTime();
  818. virtual void SetJumpState(bool);
  819. virtual void SetSprintState(bool);
  820. virtual void SetFireRequestState(bool);
  821. void SetCurrentNPCState(NPC *, const std::string &);
  822. void EndNPCConversation();
  823. void EnterNPCShop(NPC *);
  824. NPC * GetCurrentNPC() const;
  825. const std::string & GetCurrentNPCState() const;
  826. virtual void TransitionToNPCState(const char *);
  827. void PerformTransitionToNPCState(const std::string &);
  828. virtual void BuyItem(IActor *, IItem *, uint32_t);
  829. void PerformBuyItem(IActor *, IItem *, uint32_t);
  830. virtual void SellItem(IActor *, IItem *, uint32_t);
  831. void PerformSellItem(IActor *, IItem *, uint32_t);
  832. virtual void EnterRegion(const char *);
  833. bool IsChangingRegion() const;
  834. const std::string & GetChangeRegionDestination() const;
  835. void PerformEnterRegion(const std::string &);
  836. LocationAndRotation GetSpawnLocation();
  837. virtual void Respawn();
  838. void PerformRespawn();
  839. void PerformRespawnAtLocation(const Vector3 &, const Rotation &);
  840. virtual void Teleport(const char *);
  841. void PerformTeleport(const std::string &);
  842. virtual void SendEvent(const WriteStream &);
  843. virtual void WriteAllEvents(WriteStream &);
  844. void SyncItems();
  845. virtual void Chat(const char *);
  846. void PerformChat(const std::string &);
  847. void ReceiveChat(Player *, const std::string &);
  848. virtual IFastTravel * GetFastTravelDestinations(const char *);
  849. virtual void FastTravel(const char *, const char *);
  850. void PerformFastTravel(const std::string &, const std::string &);
  851. void OnTravelComplete(const std::string &);
  852. IItem * GetLastHitByItem() const;
  853. void PerformSetLastHitByItem(IItem *);
  854. virtual void MarkAsAchieved(IAchievement *);
  855. virtual bool HasAchieved(IAchievement *);
  856. virtual void SubmitDLCKey(const char *);
  857. void PerformSubmitDLCKey(const std::string &);
  858. virtual uint32_t GetCircuitInputs(const char *);
  859. virtual void SetCircuitInputs(const char *, uint32_t);
  860. void PerformSetCircuitInputs(const std::string &, uint32_t);
  861. virtual void GetCircuitOutputs(const char *, bool *, size_t);
  862. void PerformSetCircuitOutputs(const std::string &, std::vector<bool>);
  863. void InitCircuitStates();
  864. };
  865.  
  866. class World {
  867. public:
  868. std::set<ActorRef<IPlayer>> m_players;
  869. std::set<ActorRef<IActor>> m_actors;
  870. std::map<unsigned int, ActorRef<IActor>> m_actorsById;
  871. ILocalPlayer *m_localPlayer;
  872. uint32_t m_nextId;
  873. std::map<std::string, AIZone*, std::less<std::string>, std::allocator<std::pair<std::string const, AIZone*> > > m_aiZones;
  874.  
  875. void AddActorToWorld(Actor *);
  876. void AddActorToWorldWithId(uint32_t, Actor *);
  877. void SendEventToAllPlayers(const WriteStream &);
  878. void SendEventToAllPlayersExcept(Player *, const WriteStream &);
  879. public:
  880. World();
  881. virtual ~World();
  882. virtual void Tick(float);
  883. virtual bool HasLocalPlayer();
  884. ILocalPlayer * GetLocalPlayer();
  885. virtual bool IsAuthority();
  886. virtual void AddLocalPlayer(Player *, ILocalPlayer *);
  887. virtual void AddRemotePlayer(Player *);
  888. virtual void AddRemotePlayerWithId(uint32_t, Player *);
  889. virtual void RemovePlayer(Player *);
  890. virtual void Use(Player *, Actor *);
  891. virtual void Activate(Player *, IItem *);
  892. virtual void Reload(Player *);
  893. virtual void Jump(bool);
  894. virtual void Sprint(bool);
  895. virtual void FireRequest(bool);
  896. virtual void TransitionToNPCState(Player *, const std::string &);
  897. virtual void BuyItem(Player *, Actor *, IItem *, uint32_t);
  898. virtual void SellItem(Player *, Actor *, IItem *, uint32_t);
  899. virtual void Respawn(Player *);
  900. virtual void Teleport(Player *, const std::string &);
  901. virtual void Chat(Player *, const std::string &);
  902. virtual void FastTravel(Player *, const std::string &, const std::string &);
  903. virtual void SetPvPDesired(Player *, bool);
  904. virtual void SubmitDLCKey(Player *, const std::string &);
  905. virtual void SetCircuitInputs(Player *, const std::string &, uint32_t);
  906. virtual void SendAddItemEvent(Player *, IItem *, uint32_t);
  907. virtual void SendRemoveItemEvent(Player *, IItem *, uint32_t);
  908. virtual void SendLoadedAmmoEvent(Player *, IItem *, uint32_t);
  909. virtual void SendPickedUpEvent(Player *, const std::string &);
  910. virtual void EquipItem(Player *, uint8_t, IItem *);
  911. virtual void SetCurrentSlot(Player *, uint8_t);
  912. virtual void SendEquipItemEvent(Player *, uint8_t, IItem *);
  913. virtual void SendCurrentSlotEvent(Player *, uint8_t);
  914. virtual void SetCurrentQuest(Player *, IQuest *);
  915. virtual void SendSetCurrentQuestEvent(Player *, IQuest *);
  916. virtual void SendStartQuestEvent(Player *, IQuest *);
  917. virtual void SendAdvanceQuestToStateEvent(Player *, IQuest *, IQuestState *);
  918. virtual void SendCompleteQuestEvent(Player *, IQuest *);
  919. virtual void SendHealthUpdateEvent(Actor *, int32_t);
  920. virtual void SendManaUpdateEvent(Player *, int32_t);
  921. virtual void SendCountdownUpdateEvent(Player *, int32_t);
  922. virtual void SendPvPCountdownUpdateEvent(Player *, bool, int32_t);
  923. virtual void SendPvPEnableEvent(Player *, bool);
  924. virtual void SendStateEvent(Actor *, const std::string &, bool);
  925. virtual void SendTriggerEvent(Actor *, const std::string &, Actor *, bool);
  926. virtual void SendFireBulletsEvent(Actor *, IItem *, const Vector3 &,
  927. uint32_t, float);
  928. virtual void SendDisplayEvent(Player *, const std::string &,
  929. const std::string &);
  930. virtual void SendNPCConversationStateEvent(Player *, Actor *,
  931. const std::string &);
  932. virtual void SendNPCConversationEndEvent(Player *);
  933. virtual void SendNPCShopEvent(Player *, Actor *);
  934. virtual void SendRespawnEvent(Player *, const Vector3 &, const Rotation &);
  935. virtual void SendTeleportEvent(Actor *, const Vector3 &, const Rotation &);
  936. virtual void SendRelativeTeleportEvent(Actor *, const Vector3 &);
  937. virtual void SendReloadEvent(Player *, IItem *, IItem *, uint32_t);
  938. virtual void SendPlayerJoinedEvent(Player *);
  939. virtual void SendPlayerLeftEvent(Player *);
  940. virtual void SendPlayerItemEvent(Player *);
  941. virtual void SendActorSpawnEvent(Actor *);
  942. virtual void SendActorDestroyEvent(Actor *);
  943. virtual void SendExistingPlayerEvent(Player *, Player *);
  944. virtual void SendExistingActorEvent(Player *, Actor *);
  945. virtual void SendChatEvent(Player *, const std::string &);
  946. virtual void SendKillEvent(Player *, Actor *, IItem *);
  947. virtual void SendCircuitOutputEvent(Player *, const std::string &, uint32_t,
  948. const std::vector<bool> &);
  949. virtual void SendActorPositionEvents(Player *);
  950. virtual void SendRegionChangeEvent(Player *, const std::string &);
  951. virtual void SendLastHitByItemEvent(Player *, IItem *);
  952. bool SpawnActor(Actor *, const Vector3 &, const Rotation &);
  953. bool SpawnActorAtNamedLocation(Actor *, const char *);
  954. void SpawnActorWithId(uint32_t, Actor *, const Vector3 &, const Rotation &);
  955. void DestroyActor(Actor *);
  956. void SendSpawnEventsForExistingActors(Player *);
  957. void AddAIZone(AIZone *);
  958. AIZone * GetAIZone(const std::string &);
  959. void OnPlayerEnteredAIZone(const std::string &);
  960. void OnPlayerLeftAIZone(const std::string &);
  961. std::vector<IPlayer*, std::allocator<IPlayer*> > GetPlayersInRadius(const Vector3 &, float);
  962. std::vector<Projectile*, std::allocator<Projectile*> > GetProjectilesInRadius(const Vector3 &, float);
  963. Actor * GetActorById(uint32_t);
  964. void RemoveAllActorsExceptPlayer(Player *);
  965. void ChangeActorId(Player *, uint32_t);
  966. bool IsPlayerAlreadyConnected(uint32_t);
  967. };
  968.  
  969. class ClientWorld : public World {
  970. public:
  971. ActorRef<IPlayer> m_activePlayer;
  972. float m_timeUntilNextNetTick;
  973.  
  974. public:
  975. ClientWorld();
  976. virtual bool HasLocalPlayer();
  977. virtual bool IsAuthority();
  978. virtual void AddLocalPlayer(Player *, ILocalPlayer *);
  979. virtual void Tick(float);
  980. virtual void Use(Player *, Actor *);
  981. virtual void Activate(Player *, IItem *);
  982. virtual void Reload(Player *);
  983. virtual void Jump(bool);
  984. virtual void Sprint(bool);
  985. virtual void FireRequest(bool);
  986. virtual void TransitionToNPCState(Player *, const std::string &);
  987. virtual void BuyItem(Player *, Actor *, IItem *, uint32_t);
  988. virtual void SellItem(Player *, Actor *, IItem *, uint32_t);
  989. virtual void Respawn(Player *);
  990. virtual void Teleport(Player *, const std::string &);
  991. virtual void Chat(Player *, const std::string &);
  992. virtual void FastTravel(Player *, const std::string &, const std::string &);
  993. virtual void SetPvPDesired(Player *, bool);
  994. virtual void SubmitDLCKey(Player *, const std::string &);
  995. virtual void SetCircuitInputs(Player *, const std::string &, uint32_t);
  996. virtual void SendAddItemEvent(Player *, IItem *, uint32_t);
  997. virtual void SendRemoveItemEvent(Player *, IItem *, uint32_t);
  998. virtual void SendLoadedAmmoEvent(Player *, IItem *, uint32_t);
  999. virtual void SendPickedUpEvent(Player *, const std::string &);
  1000. virtual void EquipItem(Player *, uint8_t, IItem *);
  1001. virtual void SetCurrentSlot(Player *, uint8_t);
  1002. virtual void SendEquipItemEvent(Player *, uint8_t, IItem *);
  1003. virtual void SendCurrentSlotEvent(Player *, uint8_t);
  1004. virtual void SetCurrentQuest(Player *, IQuest *);
  1005. virtual void SendSetCurrentQuestEvent(Player *, IQuest *);
  1006. virtual void SendStartQuestEvent(Player *, IQuest *);
  1007. virtual void SendAdvanceQuestToStateEvent(Player *, IQuest *, IQuestState *);
  1008. virtual void SendCompleteQuestEvent(Player *, IQuest *);
  1009. virtual void SendHealthUpdateEvent(Actor *, int32_t);
  1010. virtual void SendManaUpdateEvent(Player *, int32_t);
  1011. virtual void SendCountdownUpdateEvent(Player *, int32_t);
  1012. virtual void SendPvPCountdownUpdateEvent(Player *, bool, int32_t);
  1013. virtual void SendPvPEnableEvent(Player *, bool);
  1014. virtual void SendStateEvent(Actor *, const std::string &, bool);
  1015. virtual void SendTriggerEvent(Actor *, const std::string &, Actor *, bool);
  1016. virtual void SendFireBulletsEvent(Actor *, IItem *, const Vector3 &,
  1017. uint32_t, float);
  1018. virtual void SendDisplayEvent(Player *, const std::string &,
  1019. const std::string &);
  1020. virtual void SendNPCConversationStateEvent(Player *, Actor *,
  1021. const std::string &);
  1022. virtual void SendNPCConversationEndEvent(Player *);
  1023. virtual void SendNPCShopEvent(Player *, Actor *);
  1024. virtual void SendRespawnEvent(Player *, const Vector3 &, const Rotation &);
  1025. virtual void SendTeleportEvent(Actor *, const Vector3 &, const Rotation &);
  1026. virtual void SendRelativeTeleportEvent(Actor *, const Vector3 &);
  1027. virtual void SendReloadEvent(Player *, IItem *, IItem *, uint32_t);
  1028. virtual void SendPlayerJoinedEvent(Player *);
  1029. virtual void SendPlayerLeftEvent(Player *);
  1030. virtual void SendPlayerItemEvent(Player *);
  1031. virtual void SendActorSpawnEvent(Actor *);
  1032. virtual void SendActorDestroyEvent(Actor *);
  1033. virtual void SendExistingPlayerEvent(Player *, Player *);
  1034. virtual void SendExistingActorEvent(Player *, Actor *);
  1035. virtual void SendChatEvent(Player *, const std::string &);
  1036. virtual void SendKillEvent(Player *, Actor *, IItem *);
  1037. virtual void SendCircuitOutputEvent(Player *, const std::string &, uint32_t, const std::vector<bool> &);
  1038. virtual void SendActorPositionEvents(Player *);
  1039. virtual void SendRegionChangeEvent(Player *, const std::string &);
  1040. virtual void SendLastHitByItemEvent(Player *, IItem *);
  1041. };
  1042.  
  1043. class Item : public IItem {
  1044. public:
  1045. Item();
  1046. virtual ~Item();
  1047. virtual bool CanEquip();
  1048. virtual uint32_t GetMaximumCount();
  1049. virtual bool CanActivate(IPlayer *);
  1050. virtual void Activate(IPlayer *);
  1051. virtual void PerformActivate(IPlayer *);
  1052. virtual void LocalActivate(IPlayer *);
  1053. virtual bool CanActivateInInventory();
  1054. virtual bool ShowInInventory();
  1055. virtual bool ShowEventOnPickup();
  1056. virtual bool ShowEventOnDuplicatePickup();
  1057. virtual bool ShowNotificationOnPickup();
  1058. virtual float GetCooldownTime();
  1059. virtual ItemRarity GetItemRarity();
  1060. virtual IItem * GetAmmoType();
  1061. virtual uint32_t GetClipSize();
  1062. virtual int32_t GetDamage();
  1063. virtual int32_t GetDamagePerSecond();
  1064. virtual DamageType GetDamageType();
  1065. virtual int32_t GetManaCost();
  1066. virtual const char * GetCustomCostDescription();
  1067. virtual bool IsAutoFire();
  1068. virtual uint32_t GetNumberOfProjectiles();
  1069. virtual float GetReloadTime(int32_t);
  1070. virtual bool HasPartialReload();
  1071. virtual float GetRange();
  1072. virtual int32_t GetTradeValue();
  1073. virtual void Reset();
  1074. virtual void Update();
  1075. virtual bool IsDynamic();
  1076. virtual bool IsUpdating();
  1077. };
  1078.  
  1079. class ItemPickup : public Actor {
  1080. private:
  1081. IItem *m_item;
  1082. std::string m_pickupName;
  1083.  
  1084. public:
  1085. ItemPickup(IItem *, const std::string &, const std::string &);
  1086. IItem * GetItem() const;
  1087. const std::string & GetPickupName() const;
  1088. virtual bool CanUse(IPlayer *);
  1089. virtual void PerformUse(IPlayer *);
  1090. };
  1091.  
  1092. class BallmerPeakPoster : public Actor {
  1093. public:
  1094. BallmerPeakPoster();
  1095. virtual bool CanBeDamaged(IActor *);
  1096. virtual void Damage(IActor *, IItem *, int32_t, DamageType);
  1097. };
  1098.  
  1099.  
  1100. class BallmerPeakEgg : public ItemPickup {
  1101. public:
  1102. BallmerPeakEgg();
  1103. virtual bool CanUse(IPlayer *);
  1104. };
  1105.  
  1106. class GoldenEgg : public Item {
  1107. public:
  1108. virtual bool ShowEventOnPickup();
  1109. virtual bool ShowEventOnDuplicatePickup();
  1110. virtual const char * GetName();
  1111. virtual const char * GetDisplayName();
  1112. virtual const char * GetItemTypeName();
  1113. virtual const char * GetDescription();
  1114. virtual const char * GetFlavorText();
  1115. virtual ItemRarity GetItemRarity();
  1116. };
  1117.  
  1118. class Gun : public Item {
  1119. public:
  1120. virtual bool CanEquip();
  1121. virtual bool ShowEventOnPickup();
  1122. virtual bool CanActivate(IPlayer *);
  1123. virtual void PerformActivate(IPlayer *);
  1124. virtual void LocalActivate(IPlayer *);
  1125. virtual DamageType GetDamageType();
  1126. virtual float GetRange();
  1127. virtual float GetSpreadAngle();
  1128. virtual float GetReloadTime(int32_t);
  1129. float GetMaximumReloadTime();
  1130. float GetMinimumReloadTime();
  1131. virtual int32_t GetDamagePerSecond();
  1132. };
  1133.  
  1134.  
  1135. class AKRifle : public Gun {
  1136. public:
  1137. virtual const char * GetName();
  1138. virtual const char * GetDisplayName();
  1139. virtual const char * GetItemTypeName();
  1140. virtual const char * GetDescription();
  1141. virtual const char * GetFlavorText();
  1142. virtual float GetCooldownTime();
  1143. virtual int32_t GetDamage();
  1144. virtual float GetSpreadAngle();
  1145. virtual bool IsAutoFire();
  1146. virtual ItemRarity GetItemRarity();
  1147. virtual IItem * GetAmmoType();
  1148. virtual uint32_t GetClipSize();
  1149. virtual int32_t GetTradeValue();
  1150. };
  1151.  
  1152. class CowboyCoder : public Gun {
  1153. public:
  1154. virtual const char * GetName();
  1155. virtual const char * GetDisplayName();
  1156. virtual const char * GetItemTypeName();
  1157. virtual const char * GetDescription();
  1158. virtual const char * GetFlavorText();
  1159. virtual float GetCooldownTime();
  1160. virtual int32_t GetDamage();
  1161. virtual float GetSpreadAngle();
  1162. virtual float GetReloadTime(int32_t);
  1163. virtual ItemRarity GetItemRarity();
  1164. virtual IItem * GetAmmoType();
  1165. virtual uint32_t GetClipSize();
  1166. virtual int32_t GetTradeValue();
  1167. };
  1168.  
  1169. class StaticLink : public Item {
  1170. public:
  1171. virtual const char * GetName();
  1172. virtual const char * GetDisplayName();
  1173. virtual const char * GetItemTypeName();
  1174. virtual const char * GetDescription();
  1175. virtual const char * GetFlavorText();
  1176. virtual uint32_t GetMaximumCount();
  1177. virtual bool CanEquip();
  1178. virtual bool CanActivate(IPlayer *);
  1179. virtual void PerformActivate(IPlayer *);
  1180. virtual bool ShowEventOnPickup();
  1181. virtual float GetCooldownTime();
  1182. virtual int32_t GetDamage();
  1183. virtual DamageType GetDamageType();
  1184. virtual int32_t GetManaCost();
  1185. virtual float GetRange();
  1186. virtual ItemRarity GetItemRarity();
  1187. virtual bool IsAutoFire();
  1188. };
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194. struct ServerInfo {
  1195. std::string masterHost;
  1196. uint16_t masterPort;
  1197. std::string certPath;
  1198. std::string username;
  1199. std::string password;
  1200. std::string hostname;
  1201. uint16_t serverPort;
  1202. };
  1203.  
  1204. struct LootEntry {
  1205. IItem *item;
  1206. uint32_t minCount;
  1207. uint32_t maxCount;
  1208. float weight;
  1209. };
  1210.  
  1211. class LootTier {
  1212. private:
  1213. std::vector<LootEntry> m_loot;
  1214. float m_totalWeight;
  1215.  
  1216. public:
  1217. LootTier();
  1218. void SetEmptyWeight(float);
  1219. void AddItem(IItem *, uint32_t, uint32_t, float);
  1220. LootEntry GetItem();
  1221. };
  1222.  
  1223.  
  1224.  
  1225. class IAchievementList {
  1226. public:
  1227. virtual ~IAchievementList();
  1228. virtual size_t GetCount();
  1229. virtual IAchievement * GetAchievement(size_t);
  1230. virtual void Destroy();
  1231. };
  1232.  
  1233. struct FastTravelInfo {
  1234. std::string region;
  1235. std::string displayName;
  1236. };
  1237.  
  1238. class FastTravelDestination {
  1239. private:
  1240. std::string m_region;
  1241. std::string m_displayName;
  1242.  
  1243. public:
  1244. FastTravelDestination(const std::string &, const std::string &);
  1245. virtual bool IsAvailable(Player *);
  1246. void MarkAsVisited(Player *);
  1247. void AddToListIfValid(std::vector<FastTravelInfo> &, Player *, const std::string &);
  1248. };
  1249.  
  1250. class MasterServerConnection;
  1251. class GameServerConnection;
  1252. class CharacterInfo;
  1253.  
  1254. class GameAPI {
  1255. private:
  1256. void InitObjects();
  1257. void StartServerListener(const ServerInfo &);
  1258. public:
  1259. GameAPI();
  1260. void InitLocal(ILocalPlayer *);
  1261. void InitClient(ILocalPlayer *);
  1262. void InitServer(const char *, uint16_t, int32_t, const char *, uint16_t, const char *, const char *, const char *);
  1263. void Shutdown();
  1264. void Tick(float);
  1265. bool IsAuthority();
  1266. bool IsDedicatedServer();
  1267. bool IsTransitioningToNewServer();
  1268. IItem * GetItemByName(const char *);
  1269. IQuest * GetQuestByName(const char *);
  1270. FastTravelDestination * GetFastTravelDestination(const std::string &);
  1271. IAchievement * GetAchievement(const char *);
  1272. IAchievementList * GetAchievements();
  1273. std::vector<IAchievement*, std::allocator<IAchievement*> > GetAchievementList();
  1274. std::vector<ItemPickup*, std::allocator<ItemPickup*> > GetGoldenEggList();
  1275. size_t GetGoldenEggCount();
  1276. virtual bool SpawnActor(IActor *, const Vector3 &, const Rotation &, bool);
  1277. virtual bool SpawnActorAtNamedLocation(IActor *, const char *);
  1278. virtual bool SpawnRemotePlayer(IPlayer *, const Vector3 &, const Rotation &);
  1279. virtual void DamageInRadius(IActor *, IItem *, const Vector3 &, float, int32_t, DamageType);
  1280. virtual size_t GetNamedLocationPoints(const char *, LocationAndRotation *&);
  1281. virtual void FreeNamedLocationPoints(LocationAndRotation *);
  1282. std::vector<LocationAndRotation> GetNamedLocationPointList(const char *);
  1283. bool GetNamedLocationPoint(const std::string &, LocationAndRotation &);
  1284. std::vector<LocationAndRotation> GetSpawnPoints(const char *);
  1285. void GiveAll(IPlayer *);
  1286. virtual Vector3 GetDirectionFromRotation(const Rotation &);
  1287. virtual Rotation GetRotationFromDirection(const Vector3 &);
  1288. virtual void OnWeaponFired(IItem *, const Vector3 &, const Vector3 &);
  1289. virtual void OnBulletHitActor(IItem *, IActor *, const Vector3 &, const Vector3 &);
  1290. virtual void OnBulletHitWorld(IItem *, const Vector3 &, const Vector3 &);
  1291. virtual void OnLog(const char *);
  1292. void Log(const char *);
  1293. virtual void OnMasterServerConnected(bool, const char *, const char *);
  1294. virtual void OnLoginComplete(bool, const char *, bool, CharacterInfo *, size_t);
  1295. virtual void OnRegisterComplete(bool, const char *, const char *, bool);
  1296. virtual void OnCreateCharacterComplete(bool, const char *, int32_t);
  1297. virtual void OnDeleteCharacterComplete(bool, int32_t);
  1298. virtual void OnJoinGameServerComplete(bool, const char *, bool, const char *, uint16_t, const char *);
  1299. virtual void OnGameServerConnected(bool, const char *, const Vector3 &, const Rotation &);
  1300. virtual void OnTransitionToNewServer();
  1301. virtual void OnSubmitAnswerComplete(bool, const char *);
  1302. virtual void OnTeammatesListed(const char **, const char **, size_t);
  1303. virtual uint32_t GetDefaultCircuitInputs(const char *);
  1304. virtual size_t GetCircuitOutputCount(const char *);
  1305. virtual void GetCircuitOutputs(const char *, uint32_t, bool *, size_t, bool *);
  1306. LootTier * GetLootTier(uint32_t);
  1307. void Enqueue(const std::function<void ()> &);
  1308. void Process(const std::function<void ()> &);
  1309. MasterServerConnection * GetMasterServer();
  1310. void UpdatePlayerCounts();
  1311. void GetTeammates();
  1312. void Login(const char *, const char *);
  1313. void CreateCharacter(const char *, uint8_t, uint32_t *);
  1314. void DeleteCharacter(int32_t);
  1315. void JoinGameServer(int32_t, bool);
  1316. void SubmitAnswer(const char *, const char *);
  1317. GameServerConnection * GetGameServer();
  1318. void ConnectToGameServer(const char *, uint16_t, int32_t, const char *);
  1319. bool IsConnectedToMasterServer();
  1320. bool IsConnectedToGameServer();
  1321. int32_t GetUserId();
  1322. int32_t GetCharacterId();
  1323. const char * GetUserName();
  1324. const char * GetTeamName();
  1325. const char * GetTeamHash();
  1326. void ConnectToMasterServer(const char *, uint16_t, const char *);
  1327. void DisconnectFromMasterServer();
  1328. void Register(const char *, const char *, const char *);
  1329. void TransitionToNewGameServer();
  1330. Actor * CreateRemoteActorByName(const std::string &, bool);
  1331. Actor * CreateRemoteActorByNameWithOwner(const std::string &, bool, IActor *);
  1332. bool HasActorFactory(const std::string &);
  1333. int32_t GetTeamPlayerCount();
  1334. int32_t GetTotalPlayerCount();
  1335. };
  1336.  
  1337.  
  1338. /*
  1339.  
  1340. class ServerConnection {
  1341. protected:
  1342. bool m_running;
  1343. bool m_valid;
  1344. bool m_readyToDisconnect;
  1345. std::thread m_thread;
  1346. std::mutex m_mutex;
  1347. std::queue<std::function<void ()>, std::deque<std::function<void ()>, std::allocator<std::function<void ()> > > > m_serverQueue;
  1348. std::condition_variable m_serverQueueEvent;
  1349. ThreadActionQueue m_gameThreadActions;
  1350.  
  1351. void ThreadProc();
  1352. void StartConnectionThread();
  1353. void ServerEnqueue(const std::function<void ()> &);
  1354. void ServerProcess(const std::function<void ()> &);
  1355. virtual const char * GetServerType();
  1356. public:
  1357. ServerConnection();
  1358. virtual ~ServerConnection();
  1359. bool IsValid() const;
  1360. bool IsReadyToDisconnect() const;
  1361. void ProcessGameThreadActions();
  1362. void Disconnect();
  1363. }
  1364.  
  1365.  
  1366.  
  1367. class GameServerConnection : public ServerConnection {
  1368. protected:
  1369. TCPSocket *m_sock;
  1370. WriteStream m_writeStream;
  1371. volatile bool m_tickInProgress;
  1372.  
  1373. void NotifyDisconnect();
  1374. virtual const char * GetServerType();
  1375. void OnPositionEvent(Player *);
  1376. void OnPositionAndVelocityEvent(Player *);
  1377. void OnPlayerPositionEvent(Player *);
  1378. void OnAddItemEvent(Player *);
  1379. void OnRemoveItemEvent(Player *);
  1380. void OnLoadedAmmoEvent(Player *);
  1381. void OnPickedUpEvent(Player *);
  1382. void OnEquipItemEvent(Player *);
  1383. void OnCurrentSlotEvent(Player *);
  1384. void OnSetCurrentQuestEvent(Player *);
  1385. void OnStartQuestEvent(Player *);
  1386. void OnAdvanceQuestToStateEvent(Player *);
  1387. void OnCompleteQuestEvent(Player *);
  1388. void OnHealthUpdateEvent(Player *);
  1389. void OnManaUpdateEvent(Player *);
  1390. void OnCountdownUpdateEvent(Player *);
  1391. void OnPvPCountdownUpdateEvent(Player *);
  1392. void OnPvPEnableEvent(Player *);
  1393. void OnStateEvent(Player *);
  1394. void OnTriggerEvent(Player *);
  1395. void OnFireBulletsEvent(Player *);
  1396. void OnDisplayEvent(Player *);
  1397. void OnNPCConversationStateEvent(Player *);
  1398. void OnNPCConversationEndEvent(Player *);
  1399. void OnNPCShopEvent(Player *);
  1400. void OnRespawnThisPlayerEvent(Player *);
  1401. void OnRespawnOtherPlayerEvent(Player *);
  1402. void OnTeleportEvent(Player *);
  1403. void OnRelativeTeleportEvent(Player *);
  1404. void OnReloadEvent(Player *);
  1405. void OnRemoteReloadEvent(Player *);
  1406. void OnPlayerJoinedEvent(Player *);
  1407. void OnPlayerLeftEvent(Player *);
  1408. void OnPlayerItemEvent(Player *);
  1409. void OnActorSpawnEvent(Player *);
  1410. void OnActorDestroyEvent(Player *);
  1411. void OnChatEvent(Player *);
  1412. void OnKillEvent(Player *);
  1413. void OnCircuitOutputEvent(Player *);
  1414. void OnRegionChangeEvent(Player *);
  1415. void OnLastHitByItemEvent(Player *);
  1416. public:
  1417. GameServerConnection();
  1418. virtual ~GameServerConnection();
  1419. void Connect(const std::string &, uint16_t, int32_t, const std::string &, const std::function<void (bool, const std::basic_string<char> &, unsigned int, const LocationAndRotation &)> &);
  1420. void MoveAndGetEvents(Player *);
  1421. void Use(Actor *);
  1422. void Activate(Player *, IItem *);
  1423. void Reload();
  1424. void Jump(bool);
  1425. void Sprint(bool);
  1426. void FireRequest(bool);
  1427. void TransitionToNPCState(const std::string &);
  1428. void BuyItem(Actor *, IItem *, uint32_t);
  1429. void SellItem(Actor *, IItem *, uint32_t);
  1430. void Respawn();
  1431. void Teleport(const std::string &);
  1432. void EquipItem(uint8_t, IItem *);
  1433. void SetCurrentSlot(uint8_t);
  1434. void SetCurrentQuest(IQuest *);
  1435. void Chat(const std::string &);
  1436. void FastTravel(const std::string &, const std::string &);
  1437. void SetPvPDesired(bool);
  1438. void SubmitDLCKey(const std::string &);
  1439. void SetCircuitInputs(const std::string &, uint32_t);
  1440. }
  1441. */
  1442.  
  1443. class KeyVerifier {
  1444. public:
  1445. static bool VerifyKey(std::string const&);
  1446. };
  1447.  
  1448. enum EnemyRank {NormalEnemy, EliteEnemy, LegendaryEnemy};
  1449.  
  1450. class LootTable;
  1451.  
  1452.  
  1453. class LootTable {
  1454. private:
  1455. float m_dropChance;
  1456. //std::vector<LootTable::TableEntry> m_tiers;
  1457. //std::vector<LootTable::TableEntry> m_counts;
  1458. float m_totalTierWeight;
  1459. float m_totalCountWeight;
  1460. std::vector<LootEntry> m_additionalItems;
  1461.  
  1462. uint32_t GetRandomCount();
  1463. LootEntry GetRandomItem();
  1464. public:
  1465. LootTable();
  1466. void SetDropChance(float);
  1467. void SetTiers(uint32_t, uint32_t, float);
  1468. void SetCounts(uint32_t, uint32_t, float);
  1469. void AddAdditionalItem(IItem *, uint32_t, uint32_t, float);
  1470. std::map<IItem*, unsigned int, std::less<IItem*>, std::allocator<std::pair<IItem* const, unsigned int> > > GetItems();
  1471. };
  1472.  
  1473. class AIActor;
  1474.  
  1475. class AIState {
  1476. protected:
  1477. AIActor *m_owner;
  1478. TimerSet m_timers;
  1479.  
  1480. public:
  1481. AIState(AIActor *);
  1482. virtual ~AIState();
  1483. AIActor * GetOwner() const;
  1484. Actor * GetTarget() const;
  1485. virtual void EnterState(Actor *);
  1486. virtual void LeaveState();
  1487. virtual void Tick(float);
  1488. virtual void OnAIMoveComplete();
  1489. void AddTimer(const std::string &, float, const std::function<void ()> &);
  1490. void AddTimerWithContext(const std::string &, float, const std::function<void (Actor *)> &);
  1491. void AddRecurringTimer(const std::string &, float, const std::function<void ()> &);
  1492. void AddRecurringTimerWithContext(const std::string &, float, const std::function<void (Actor *)> &);
  1493. void CancelTimer(const std::string &);
  1494. void CancelAllTimers();
  1495. };
  1496.  
  1497. class AIActor : public Actor {
  1498. public:
  1499. std::map<std::string, AIState*, std::less<std::string>, std::allocator<std::pair<std::string const, AIState*> > > m_states;
  1500. AIState *m_initialState;
  1501. AIState *m_currentState;
  1502. ActorRef<Actor> m_target;
  1503.  
  1504. void AddInitialState(const std::string &, AIState *);
  1505. void AddState(const std::string &, AIState *);
  1506. public:
  1507. AIActor(const std::string &);
  1508. virtual ~AIActor();
  1509. virtual bool IsCharacter();
  1510. virtual bool ShouldSendPositionUpdates();
  1511. virtual bool ShouldReceivePositionUpdates();
  1512. Actor * GetTarget() const;
  1513. virtual bool ShouldTargetPlayer(Player *);
  1514. virtual bool ShouldAttackFromRange() const;
  1515. virtual float GetRangedAttackDistance() const;
  1516. virtual bool ShouldWander() const;
  1517. virtual bool ShouldMove() const;
  1518. virtual bool ShouldAttack() const;
  1519. virtual bool ShouldAttackMultipleTargets() const;
  1520. virtual void Tick(float);
  1521. virtual void OnAIMoveComplete();
  1522. AIState * GetStateByName(const std::string &);
  1523. void TransitionToState(const std::string &, Actor *);
  1524. virtual void TransitionToState(AIState *, Actor *);
  1525. };
  1526.  
  1527.  
  1528. class Enemy : public AIActor {
  1529. public:
  1530. LootTable m_loot;
  1531.  
  1532. virtual void OnKilled(IActor *, IItem *);
  1533. public:
  1534. Enemy(const std::string &);
  1535. virtual bool CanBeDamaged(IActor *);
  1536. virtual float GetMaximumDamageDistance();
  1537. virtual int32_t GetAttackDamage();
  1538. virtual DamageType GetAttackDamageType();
  1539. virtual IItem * GetAttackItem();
  1540. virtual float GetAggressionRadius();
  1541. virtual float GetAttackTime();
  1542. virtual float GetAttackHitTime();
  1543. virtual void OnPrepareAttack(Actor *);
  1544. virtual void OnEndAttack();
  1545. virtual void Attack(Actor *);
  1546. virtual EnemyRank GetRank() const;
  1547. virtual Rotation GetLookRotation();
  1548. virtual void Damage(IActor *, IItem *, int32_t, DamageType);
  1549. };
  1550.  
  1551. class Magmarok : public Enemy {
  1552. bool m_healingActive;
  1553. float m_healingTimeLeft;
  1554. float m_advanceQuestTimer;
  1555.  
  1556. protected:
  1557. virtual void OnKilled(IActor *, IItem *);
  1558. public:
  1559. Magmarok();
  1560. virtual float GetMaximumDamageDistance();
  1561. virtual float GetAggressionRadius();
  1562. virtual bool ShouldWander() const;
  1563. virtual bool ShouldAttackFromRange() const;
  1564. virtual bool ShouldMove() const;
  1565. virtual bool ShouldAttack() const;
  1566. virtual bool ShouldAttackMultipleTargets() const;
  1567. virtual float GetRangedAttackDistance() const;
  1568. virtual float GetAttackTime();
  1569. virtual int32_t GetMaxHealth();
  1570. virtual const char * GetDisplayName();
  1571. virtual const char * GetDeathMessage();
  1572. virtual bool IsElite();
  1573. virtual void Damage(IActor *, IItem *, int32_t, DamageType);
  1574. virtual void Tick(float);
  1575. virtual void OnPrepareAttack(Actor *);
  1576. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement