You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

361 lines
5.9 KiB

#pragma once
#include <fstream>
#include <memory>
#include <sstream>
#include "Backend/DAPIBackendCore/DAPIProtoClient.h"
#include "GameData.h"
#include "control.h"
#include "cursor.h"
#include "diablo.h"
#include "engine/random.hpp"
#include "gamemenu.h"
#include "gmenu.h"
#include "inv.h"
#include "levels/gendung.h"
#include "minitext.h"
#include "missiles.h"
#include "msg.h"
#include "multi.h"
#include "objects.h"
#include "player.h"
#include "portal.h"
#include "qol/chatlog.h"
#include "spelldat.h"
#include "stores.h"
#include "towners.h"
namespace DAPI {
enum struct CommandType {
STAND,
WALKXY,
ACK_PLRINFO,
ADDSTR,
ADDMAG,
ADDDEX,
ADDVIT,
SBSPELL,
GETITEM,
AGETITEM,
PUTITEM,
RESPAWNITEM,
ATTACKXY,
RATTACKXY,
SPELLXY,
TSPELLXY,
OPOBJXY,
DISARMXY,
ATTACKID,
ATTACKPID,
RATTACKID,
RATTACKPID,
SPELLID,
SPELLPID,
TSPELLID,
TSPELLPID,
RESURRECT,
OPOBJT,
KNOCKBACK,
TALKXY,
NEWLVL,
WARP,
CHEAT_EXPERIENCE,
CHEAT_SPELL_LEVEL,
DEBUG,
SYNCDATA,
MONSTDEATH,
MONSTDAMAGE,
PLRDEAD,
REQUESTGITEM,
REQUESTAGITEM,
GOTOGETITEM,
GOTOAGETITEM,
OPENDOOR,
CLOSEDOOR,
OPERATEOBJ,
PLROPOBJ,
BREAKOBJ,
CHANGEPLRITEMS,
DELPLRITEMS,
PLRDAMAGE,
PLRLEVEL,
DROPITEM,
PLAYER_JOINLEVEL,
SEND_PLRINFO,
SATTACKXY,
ACTIVATEPORTAL,
DEACTIVATEPORTAL,
DLEVEL_0,
DLEVEL_1,
DLEVEL_2,
DLEVEL_3,
DLEVEL_4,
DLEVEL_5,
DLEVEL_6,
DLEVEL_7,
DLEVEL_8,
DLEVEL_9,
DLEVEL_10,
DLEVEL_11,
DLEVEL_12,
DLEVEL_13,
DLEVEL_14,
DLEVEL_15,
DLEVEL_16,
DLEVEL_JUNK,
DLEVEL_END,
HEALOTHER,
STRING,
SETSTR,
SETMAG,
SETDEX,
SETVIT,
RETOWN,
SPELLXYD,
ITEMEXTRA,
SYNCPUTITEM,
KILLGOLEM,
SYNCQUEST,
ENDSHIELD,
AWAKEGOLEM,
NOVA,
SETSHIELD,
REMSHIELD,
FAKE_SETID,
FAKE_DROPID,
TOGGLECHARACTER,
SETSPELL,
TOGGLEINVENTORY,
PUTINCURSOR,
PUTCURSORITEM,
IDENTIFYSTOREITEM,
NUM_CMDS,
};
enum struct EquipSlot {
HEAD = 0,
RIGHTRING = 1,
LEFTRING = 2,
AMULET = 3,
LEFTHAND = 4,
RIGHTHAND = 5,
BODY = 6,
INV1 = 7,
INV2 = 8,
INV3 = 9,
INV4 = 10,
INV5 = 11,
INV6 = 12,
INV7 = 13,
INV8 = 14,
INV9 = 15,
INV10 = 16,
INV11 = 17,
INV12 = 18,
INV13 = 19,
INV14 = 20,
INV15 = 21,
INV16 = 22,
INV17 = 23,
INV18 = 24,
INV19 = 25,
INV20 = 26,
INV21 = 27,
INV22 = 28,
INV23 = 29,
INV24 = 30,
INV25 = 31,
INV26 = 32,
INV27 = 33,
INV28 = 34,
INV29 = 35,
INV30 = 36,
INV31 = 37,
INV32 = 38,
INV33 = 39,
INV34 = 40,
INV35 = 41,
INV36 = 42,
INV37 = 43,
INV38 = 44,
INV39 = 45,
INV40 = 46,
BELT1 = 47,
BELT2 = 48,
BELT3 = 49,
BELT4 = 50,
BELT5 = 51,
BELT6 = 52,
BELT7 = 53,
BELT8 = 54,
STASH1 = 55,
STASH2 = 56,
STASH3 = 57,
STASH4 = 58,
STASH5 = 59,
STASH6 = 60,
STASH7 = 61,
STASH8 = 62,
STASH9 = 63,
STASH10 = 64,
STASH11 = 65,
STASH12 = 66,
STASH13 = 67,
STASH14 = 68,
STASH15 = 69,
STASH16 = 70,
STASH17 = 71,
STASH18 = 72,
STASH19 = 73,
STASH20 = 74,
STASH21 = 75,
STASH22 = 76,
STASH23 = 77,
STASH24 = 78,
STASH25 = 79,
STASH26 = 80,
STASH27 = 81,
STASH28 = 82,
STASH29 = 83,
STASH30 = 84,
STASH31 = 85,
STASH32 = 86,
STASH33 = 87,
STASH34 = 88,
STASH35 = 89,
STASH36 = 90,
STASH37 = 91,
STASH38 = 92,
STASH39 = 93,
STASH40 = 94,
STASH41 = 95,
STASH42 = 96,
STASH43 = 97,
STASH44 = 98,
STASH45 = 99,
STASH46 = 100,
STASH47 = 101,
STASH48 = 102,
STASH49 = 103,
STASH50 = 104,
STASH51 = 105,
STASH52 = 106,
STASH53 = 107,
STASH54 = 108,
STASH55 = 109,
STASH56 = 110,
STASH57 = 111,
STASH58 = 112,
STASH59 = 113,
STASH60 = 114,
STASH61 = 115,
STASH62 = 116,
STASH63 = 117,
STASH64 = 118,
STASH65 = 119,
STASH66 = 120,
STASH67 = 121,
STASH68 = 122,
STASH69 = 123,
STASH70 = 124,
STASH71 = 125,
STASH72 = 126,
STASH73 = 127,
STASH74 = 128,
STASH75 = 129,
STASH76 = 130,
STASH77 = 131,
STASH78 = 132,
STASH79 = 133,
STASH80 = 134,
STASH81 = 135,
STASH82 = 136,
STASH83 = 137,
STASH84 = 138,
STASH85 = 139,
STASH86 = 140,
STASH87 = 141,
STASH88 = 142,
STASH89 = 143,
STASH90 = 144,
STASH91 = 145,
STASH92 = 146,
STASH93 = 147,
STASH94 = 148,
STASH95 = 149,
STASH96 = 150,
STASH97 = 151,
STASH98 = 152,
STASH99 = 153,
STASH100 = 154
};
enum struct Backend {
Vanilla109,
DevilutionX
};
struct Server {
Server();
Server(const Server &other) = delete;
Server(Server &&other) = delete;
void update();
bool isConnected() const;
int FPS;
std::ofstream output;
private:
void processMessages();
void checkForConnections();
void updateGameData();
bool isOnScreen(int x, int y);
bool OKToAct();
void move(int x, int y);
void talk(int x, int y);
void selectStoreOption(StoreOption option);
void buyItem(int itemID);
void sellItem(int itemID);
void rechargeItem(int itemID);
void repairItem(int itemID);
void attackMonster(int index);
void attackXY(int x, int y);
void operateObject(int index);
void useBeltItem(int slot);
void toggleCharacterScreen();
void increaseStat(CommandType commandType);
void getItem(int itemID);
void setSpell(int spellID, devilution::SpellType spellType);
void castSpell(int index);
void toggleInventory();
void putInCursor(size_t itemID);
void putCursorItem(int location);
void dropCursorItem();
void useItem(size_t itemID);
void identifyStoreItem(int itemID);
void castSpell(int x, int y);
void cancelQText();
void setFPS(int newFPS);
void disarmTrap(int index);
void skillRepair(int itemID);
void skillRecharge(int itemID);
void toggleMenu();
void saveGame();
void quit();
void clearCursor();
void identifyItem(int itemID);
void sendChat(std::string message);
bool listening = false;
std::unique_ptr<GameData> data;
std::map<std::pair<int, int>, bool> panelScreenCheck;
DAPIProtoClient protoClient;
};
} // namespace DAPI