Clone of Akilla's acserver @ https://github.com/deregtd/ACServer

Network.h 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. #ifndef NETWORK_H
  2. #define NETWORK_H
  3. const DWORD LevelArray[] = { 0, 0, 1000, 2777, 5697, 10248, 17031, 26784, 40391, 58895, 83511, 115645, 156898, 209088, 274259, 354692,452925, 571762, 714286, 883872, 1084206, 1319289, 1593459, 1911400, 2278153, 2699136, 3180153, 3727407, 4347513, 5047517, 5834900, 6717600, 7704021, 8803044, 10024047, 11376914, 12872048, 14520384, 16333408, 18323161, 20502261, 22883912, 25481915, 28310688, 31385275, 34721359, 38335275, 42244029, 46465302, 51017472, 55919623, 61191556, 66853809, 72927666, 79435170, 86399136, 93843170, 101791673, 110269863, 119303784, 128920317, 139147200, 150013037, 161547311, 173780397, 186743581, 200469064, 214989984, 230340425, 246555428, 263671011, 281724178, 300752932, 320796288, 341894292, 364088025, 387419625, 411932296, 437670319, 464679072, 493005039, 522695823, 553800159, 586367933, 620450186, 656099136, 693368187, 732311940, 772986213, 815448050, 859755734, 905968800, 954148054, 1004355577, 1056654747, 1111110248, 1167788081, 1226755584, 1288081441, 1351835695, 1418089761, 1486916445, 1558389948, 1632585888, 1709581309, 1789454692, 1872285975, 1958156562, 2047149336, 2139348672, 2234840456, 2333712089, 2436052509, 2541952200, 2651503203, 2764799136, 2881935203, 3003008207, 3128116563, 3257360317, 3390841150, 3528662400, 3670929071, 3817747844, 3969227097, 4125476914, 4286609098 };
  4. const DWORD PrimStatArray[] = { 0, 110,277,501,784,1125,1527,1988,2511,3097,3746,4459,5238,6084,6998,7982,9038,10167,11372,12654,14015,15459,16988,18604,20311,22113,24012,26014,28122,30341,32676,35132,37716,40434,43293,46301,49465,52795,56300,59991,63878,67975,72295,76851,81659,86737,92102,97775,103775,110128,116858,123991,131559,139591,148124,157194,166843,177113,188053,199715,212153,225429,239609,254762,270967,288306,306870,326756,348070,370928,395453,421779,450054,480434,513091,548210,585992,626654,670432,717582,768378,823122,882136,945773,1014414,1088469,1168386,1254649,1347781,1448351,1556972,1674311,1801089,1938088,2086155,2246205,2419233,2606314,2808613,3027394,3264023,3519983,3796877,4096444,4420567,4771285,5150808,5561528,6006039,6487148,7007896,7571580,8181768,8842327,9557443,10331656,11169877,12077431,13060084,14124082,15276190,16523738,17874666,19337572,20921773,22637359,24495261,26507320,28686361,31046278,33602120,36370190,39368147,42615120,46131828,49940719,54066105,58534323,63373901,68615745,74293328,80442912,87103777,94318471,102133083,110597540,119765922,129696811,140453665,152105222,164725942,178396483,193204214,209243776,226617688,245437001,265822007,287903011,311821164,337729361,365793227,396192167,429120520,464788799,503425038,545276249,590610001,639716134,692908610,750527522,812941268,880548904,953782704,1033110914,1119040753,1212121655,1312948783,1422166831,1540474151,1668627219,1807445467,1957816530,2120701915,2297143157,2488268472,2695299977,2919561502,3162487055,3425629996,3710672964,4019438644 };
  5. const DWORD SecondaryStatArray[] = { 0, 73,183,331,517,743,1008,1312,1658,2044,2472,2943,3457,4015,4619,5268,5965,6711,7505,8352,9250,10203,11212,12279,13406,14595,15848,17169,18561,20025,21566,23187,24893,26687,28574,30559,32647,34845,37158,39594,42160,44864,47715,50722,53895,57247,60788,64531,68492,72685,77126,81834,86829,92130,97762,103748,110116,116895,124115,131812,140021,148784,158142,168143,178838,190282,202534,215659,229726,244812,260999,278375,297036,317087,338640,361819,386755,413592,442486,473604,507130,543260,582210,624211,669513,718390,771135,828069,889536,955912,1027602,1105046,1188719,1279139,1376862,1482495,1596694,1720167,1853685,1998080,2154256,2323189,2505939,2703654,2917575,3149049,3399533,3670609,3963986,4281518,4625212,4997243,5399967,5835936,6307913,6818893,7372119,7971105,8619656,9321894,10082286,10905668,11797280,12762798,13808370,14940657,16166873,17494831,18932998,20490543,22177399,24004326,25982977,28125979,30447007,32960875,35683629,38632653,41826775,45286392,49033597,53092322,57488493,62250191,67407835,72994377,79045509,85599896,92699419,100389447,108719122,117741679,127514781,138100892,149567674,161988421,175442525,190015988,205801968,222901379,241423530,261486830,283219543,306760608,332260525,359882324,389802601,422212649,457319683,495348165,536541237,581162277,629496585,681853203,738566897,800000293,866546197,938630108,1016712940,1101293965,1192914009,1292158910,1399663264,1516114484,1642257192,1778897985,1926910591,2087241457,2260915797,2449044157,2652829505,2873574933,3112691986,3371709687,3652284316,3956210003,4285430197 };
  6. const DWORD TrainedSkillArray[] = { 0, 58,138,243,372,526,704,908,1138,1395,1678,1988,2326,2693,3089,3515,3971,4459,4980,5534,6122,6747,7408,8107,8846,9625,10448,11316,12230,13192,14206,15273,16396,17578,18821,20130,21508,22958,24485,26092,27786,29572,31454,33438,35533,37743,40078,42545,45152,47911,50830,53921,57196,60668,64350,68259,72409,76818,81506,86493,91800,97451,103472,109890,116736,124040,131838,140167,149067,158582,168758,179646,191301,203781,217149,231474,246830,263297,280959,299911,320252,342089,365539,390727,417789,446871,478129,511735,547871,586735,628540,673517,721913,773996,830054,890401,955370,1025326,1100659,1181791,1269177,1363308,1464714,1573965,1691679,1818520,1955205,2102508,2261264,2432373,2616806,2815610,3029917,3260945,3510009,3778529,4068034,4380177,4716738,5079638,5470950,5892911,6347931,6838614,7367765,7938414,8553825,9217523,9933309,10705283,11537868,12435837,13404336,14448918,15575574,16790764,18101461,19515183,21040043,22684790,24458865,26372451,28436532,30662960,33064516,35654992,38449264,41463378,44714647,48221744,52004816,56085593,60487519,65235884,70357967,75883199,81843326,88272594,95207949,102689242,110759467,119465000,128855871,138986049,149913755,161701793,174417913,188135201,202932500,218894860,236114028,254688979,274726480,296341707,319658907,344812110,371945902,401216255,432791424,466852915,503596527,543233477,585991620,632116749,681874018,735549461,793451636,855913403,923293832,995980273,1074390578,1158975507,1250221316,1348652558,1454835090,1569379334,1692943784,1826238790,1970030642,2125145977,2292476532,2472984268,2667706901,2877763869,3104362767,3348806291,3612499722,3896959013,4203819496 };
  7. const DWORD SpecSkillArray[] = { 0, 23,56,97,149,211,282,364,456,558,671,795,931,1077,1236,1406,1589,1784,1992,2214,2449,2699,2963,3243,3539,3850,4180,4527,4892,5277,5683,6109,6559,7031,7529,8052,8603,9183,9794,10437,11115,11829,12582,13376,14213,15098,16031,17018,18061,19165,20332,21569,22879,24267,25740,27304,28964,30728,32603,34597,36720,38981,41389,43956,46695,49616,52736,56067,59627,63433,67504,71859,76521,81513,86860,92590,98732,105319,112384,119965,128101,136836,146216,156291,167116,178749,191252,204694,219149,234694,251416,269407,288765,309599,332022,356161,382148,410131,440264,472717,507671,545324,585886,629586,676672,726408,777982,831204,886706,944149,1004623,1068144,1134867,1204278,1276904,1353312,1434114,1518971,1607595,1700755,1799280,1903065,2011073,2124346,2244006,2368266,2497430,2631909,2771224,2917013,3067048,3222235,3383635,3551467,3725130,3904206,4089485,4280974,4478917,4684816,4898446,5119881,5349513,5587084,5832707,6086897,6350606,6623252,6905759,7199598,7510827,7835138,8185908,8566254,8983087,9452180,9978231,10590938,11292080,12080597,12978687,13957900,14971249,16103320,17322402,18634617,20062065,21585981,23214900,24936844,26808511,28810492,30975492,33221583,35528463,38089744,40943261,43951402,47181470,50806066,54703511,59258291,64461548,70511600,77114508,84284685,92045555,100330262,109182433,118957009,129861131,141695103,154193427,167565923,183038936,200856634,221282414,244600416,271117157,301163291,336095513,374298608,418187661,466210448,520850007,581627417,648104789,721888505,802632699,890043017,984880677,1085966844,1196187351,1315497790,1443929007,1582593030,1730689458,1891512364,2064457725,2249031458,2449858070,2667631083,2902448781,3160874561,3440192563,3750444304,4100490438 };
  8. const int CreditLevel[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 23, 26, 29, 32, 35, 40, 45, 50, 55, 60, 65, 70, 70, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 666 };
  9. const int CreditCost[0x28] = { 0, 6, 6, 4, 4, 6, 10, 8, 0, 4, 4, 8, 6, 6, 4, 0, 6, 0, 2, 2, 6, 6, 0, 6, 0, 0, 0, 4, 8, 12, 16, 4, 0, 4, 8, 4 };
  10. #define PI 3.1415926535
  11. #define COLOR_GREEN 1
  12. #define COLOR_WHITE 2
  13. #define COLOR_YELLOW 3
  14. #define COLOR_LIGHTBROWN 4
  15. #define COLOR_MAGENTA 5
  16. #define COLOR_RED 6
  17. #define COLOR_GREEN2 7
  18. #define COLOR_PINK 8
  19. #define COLOR_LIGHTPINK 9
  20. #define COLOR_YELLOW2 10
  21. #define COLOR_LIGHTBROWN2 11
  22. #define COLOR_GREY 12
  23. #define COLOR_CYAN 13
  24. #define COLOR_AQUAMARINE 14
  25. #define COLOR_RED2 15
  26. #define COLOR_GREEN3 16
  27. #define COLOR_BLUE 17
  28. #define COLOR_GREEN4 18
  29. #define GLOBAL_MESSAGE -87654
  30. #define EQUIPPED_HEAD 0
  31. #define EQUIPPED_CHEST_U 1
  32. #define EQUIPPED_GIRTH_U 2
  33. #define EQUIPPED_UARMS_U 3
  34. #define EQUIPPED_LARMS_U 4
  35. #define EQUIPPED_HANDS 5
  36. #define EQUIPPED_ULEGS_U 6
  37. #define EQUIPPED_LLEGS_U 7
  38. #define EQUIPPED_FEET 8
  39. #define EQUIPPED_CHEST 9
  40. #define EQUIPPED_GIRTH 10
  41. #define EQUIPPED_UARMS 11
  42. #define EQUIPPED_LARMS 12
  43. #define EQUIPPED_ULEGS 13
  44. #define EQUIPPED_LLEGS 14
  45. #define EQUIPPED_NECKLACE 15
  46. #define EQUIPPED_RBRACELET 16
  47. #define EQUIPPED_LBRACELET 17
  48. #define EQUIPPED_RRING 18
  49. #define EQUIPPED_LRING 19
  50. #define EQUIPPED_WEAPON 20
  51. #define EQUIPPED_SHIELD 21
  52. #define EQUIPPED_PROJECTILE 22
  53. #define EQUIPPED_AMMO 23
  54. #define EQUIPPED_FOCUS 24
  55. #define SKILL_AXE 0x01
  56. #define SKILL_BOW 0x02
  57. #define SKILL_XBOW 0x03
  58. #define SKILL_DAGGER 0x04
  59. #define SKILL_MACE 0x05
  60. #define SKILL_MELEE 0x06
  61. #define SKILL_MISSILE 0x07
  62. #define SKILL_UNKNOWN08 0x08
  63. #define SKILL_SPEAR 0x09
  64. #define SKILL_STAFF 0x0A
  65. #define SKILL_SWORD 0x0B
  66. #define SKILL_THROWN 0x0C
  67. #define SKILL_UNARMED 0x0D
  68. #define SKILL_LORE 0x0E
  69. #define SKILL_MAGICD 0x0F
  70. #define SKILL_MANAC 0x10
  71. #define SKILL_UNKNOWN11 0x11
  72. #define SKILL_APPRAISEITEM 0x12
  73. #define SKILL_ASSESSPERSON 0x13
  74. #define SKILL_DECEPTION 0x14
  75. #define SKILL_HEALING 0x15
  76. #define SKILL_JUMP 0x16
  77. #define SKILL_LOCKPICK 0x17
  78. #define SKILL_RUN 0x18
  79. #define SKILL_UNKNOWN19 0x19
  80. #define SKILL_UNKNOWN1A 0x1A
  81. #define SKILL_ASSESSCREATURE 0x1B
  82. #define SKILL_APPRAISEWEAPON 0x1C
  83. #define SKILL_APPRAISEARMOR 0x1D
  84. #define SKILL_APPRAISEMAGICITEM 0x1E
  85. #define SKILL_CREATURE 0x1F
  86. #define SKILL_ITEM 0x20
  87. #define SKILL_LIFE 0x21
  88. #define SKILL_WAR 0x22
  89. #define SKILL_LEADERSHIP 0x23
  90. #define SKILL_LOYALTY 0x24
  91. #define SKILL_FLETCHING 0x25
  92. #define SKILL_ALCHEMY 0x26
  93. #define SKILL_COOKING 0x27
  94. #define SKILL_UNASSIGNED 0x80
  95. #define STAT_STRENGTH 0x00
  96. #define STAT_ENDURANCE 0x01
  97. #define STAT_COORDINATION 0x02
  98. #define STAT_QUICKNESS 0x03
  99. #define STAT_FOCUS 0x04
  100. #define STAT_SELF 0x05
  101. #define STAT_NULL 0xFF
  102. enum eTrainingType
  103. {
  104. eTrainUnusable,
  105. eTrainUntrained,
  106. eTrainTrained,
  107. eTrainSpecialized
  108. };
  109. struct stSkillInfo
  110. {
  111. LPTSTR Name;
  112. long AttribA, AttribB;
  113. long Divider;
  114. int TrainStyle;
  115. };
  116. struct cClientPacketHeader
  117. {
  118. DWORD m_dwSequence;
  119. DWORD m_dwFlags;
  120. DWORD m_dwServerID;
  121. DWORD m_dwCRC;
  122. WORD m_wTotalSize;
  123. BYTE m_bTime, m_bTable;
  124. DWORD m_dwSpecial;
  125. };
  126. struct cServerPacketHeader
  127. {
  128. DWORD m_dwSequence;
  129. DWORD m_dwFlags;
  130. DWORD m_dwServerID;
  131. DWORD m_dwCRC;
  132. WORD m_wTotalSize;
  133. BYTE m_bTime, m_bTable;
  134. };
  135. struct cMessageHeader
  136. {
  137. DWORD m_dwSequence;
  138. DWORD m_dwObjectID;
  139. WORD m_wFragmentCount;
  140. WORD m_wFragmentLength;
  141. WORD m_wFragmentIndex, m_wUnknown1;
  142. };
  143. struct EmuHeader
  144. {
  145. enum PacketType {
  146. // Client to Server: login/pass
  147. Authenticate,
  148. // Server to Client: assign a session ID
  149. SetSession,
  150. // Client to Server: rejoin session on new node
  151. JoinSession,
  152. // Both: Terminate nicely
  153. Disconnect,
  154. // Both: Game related events
  155. Payload };
  156. // Enum PacketType
  157. BYTE type_,
  158. // Unknown message flag (priority?)
  159. message_;
  160. // Bytes in the payload
  161. WORD payloadsize_;
  162. // Session ID
  163. DWORD session_;
  164. };
  165. struct cPacket
  166. {
  167. BYTE *m_pbPayload;
  168. WORD m_wSize;
  169. };
  170. struct stConnUser {
  171. bool Connected;
  172. int State;
  173. sockaddr_in sockaddy;
  174. SOCKET Socket;
  175. DWORD charGUID;
  176. char ZoneName[20];
  177. BYTE bTime;
  178. DWORD RecTime, LastTime;
  179. bool Connable; int ConnTimer;
  180. int ZoneNum;
  181. DWORD curSeq;
  182. DWORD AttackCount;
  183. WORD move_count, PortalCount, AnimCount, EventCount, OverrideCount, ModelCount;
  184. BYTE MoveItemCount, EquipCount, Count237[0x20], Count244[3], Count23E;
  185. DWORD msgID;
  186. DWORD lastInSeq;
  187. EmuHeader CurrentHeader;
  188. BYTE RecvBuff[0x4000];
  189. int RecvState;
  190. char Status[64];
  191. DWORD SelectedItem;
  192. float PointX, PointY;
  193. cWorldObject_Char * Char;
  194. cWorldObject * MainPackPtr[102], * SidePacksPtr[7], * EquippedPtr[25];
  195. std::map<DWORD, cWorldObject *> ObjectCache;
  196. typedef std::list< cPacket > cPacketQueue;
  197. cPacketQueue m_input,
  198. m_output;
  199. };
  200. struct cAnimStruct
  201. {
  202. DWORD dwf74c;
  203. DWORD dwGUID;
  204. WORD wNumLogins;
  205. WORD wNumInteractions;
  206. WORD wNumAnimations;
  207. WORD wFlag;
  208. WORD wUnk1;
  209. WORD wAnimation_Family;
  210. union {
  211. struct {
  212. WORD wUnk2;
  213. WORD wUnk3;
  214. };
  215. DWORD GUIDTarget;
  216. };
  217. union {
  218. struct {
  219. WORD wAnimation_to_Play;
  220. WORD wAnimation_Seqnum;
  221. };
  222. DWORD dwUnk1;
  223. };
  224. union {
  225. float fPlaySpeed;
  226. DWORD dwUnk2;
  227. };
  228. };
  229. struct cAnimStructEx : public cAnimStruct
  230. {
  231. float fUnk1;
  232. DWORD Zero;
  233. };
  234. struct stIPStore {
  235. char Login[20];
  236. char Pass[20];
  237. in_addr IP;
  238. bool Enabled;
  239. bool Valid;
  240. int ZoneNum;
  241. };
  242. struct stAccounts {
  243. char Login[20];
  244. char Pass[20];
  245. DWORD Chars[5];
  246. WORD Secs2Del[5];
  247. char Names[5][32];
  248. WORD LoggedIn;
  249. };
  250. class cACServer {
  251. public:
  252. cACServer();
  253. ~cACServer();
  254. void SaveAccounts();
  255. void LoadAccounts();
  256. void LogDisp(char *toDisp);
  257. void IncTimes();
  258. void DisconnectUser(int User);
  259. void StartListen();
  260. void AcceptUser();
  261. void NewRead(int);
  262. void AuthenticateUser(int UserParsing);
  263. void ParseMessage(int);
  264. void Parse200(int UserParsing, DWORD MessageType, BYTE *Packet, int PacketLen);
  265. void ParseF7B1(int UserParsing, DWORD MessageType, BYTE *Packet, int PacketLen);
  266. void WorldServerParse(int UserParsing, BYTE *tPackPtr, int amountRead, cClientPacketHeader *tphdr);
  267. void ServerMessage(int User, char *Text, DWORD Color);
  268. void GiveXP(int User, int Type, DWORD Amount);
  269. void LoadOptions();
  270. void SaveOptions();
  271. bool Private, MOTDaShown;
  272. HWND MainWnd;
  273. int MaxUsers, NumConnected;
  274. stConnUser ConnUser[128];
  275. bool Listening;
  276. int ListenPort;
  277. char LocalIP[16];
  278. char ServerName[64];
  279. char Admin[64];
  280. char Host[64];
  281. char Speed[16];
  282. char MOTDb[2048];
  283. stIPStore IPStore[16384]; int NumStored;
  284. stAccounts ZonePasses[16384]; int NumPasses;
  285. SOCKET charSocket;
  286. std::map<DWORD, cWorldObject *> ObjectList;
  287. private:
  288. void PingReply(int User);
  289. void UpdateCharInfo(int User, char * NewText);
  290. void SendCharList(int User);
  291. void CalcNextFreeGUID();
  292. void Send200(BYTE *data, int datalen, WORD wUnk, int User);
  293. void SaveCharacter(int UserNum);
  294. void LoadObjects();
  295. void SaveObjects();
  296. void SendLandblock(int User, WORD Landblock);
  297. void MoveUser(int User, Location_t *loc, bool Portal, bool Override);
  298. void SendAnim(int User, WORD AnimNum, float PlaySpeed);
  299. void SendParticle(int User, DWORD ParticleNum, float PlaySpeed);
  300. void SendSound(int User, DWORD SoundNum, float PlaySpeed);
  301. void PointAt(int User, DWORD GuidAt);
  302. void ActionComplete(int User);
  303. void RemoveItem(DWORD GUID);
  304. void EvalObject(int User, DWORD GUID);
  305. void UpdateSkill(int User, int Skill);
  306. void UpdateStat(int User, int Stat);
  307. void UpdateSecondaryStat(int User, int Stat);
  308. int Generate_F7B0_13(BYTE * OutPack, int User);
  309. char MOTDa[2048];
  310. bool NeedToDelete;
  311. DWORD NextFreeCharGUID;
  312. unsigned char TestBuf[4096];
  313. char sayit[10240];
  314. std::map<DWORD, cWorldObject *> LBObjects[0x10000];
  315. std::map<DWORD, cWorldObject *> Portals[0x10000];
  316. };
  317. float GetDistance(Location_t *loc1, Location_t *loc2);
  318. #endif