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
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
|
|
|