#ifndef NETWORK_H #define NETWORK_H 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 }; 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 }; 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 }; 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 }; 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 }; 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 }; 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 }; #define PI 3.1415926535 #define COLOR_GREEN 1 #define COLOR_WHITE 2 #define COLOR_YELLOW 3 #define COLOR_LIGHTBROWN 4 #define COLOR_MAGENTA 5 #define COLOR_RED 6 #define COLOR_GREEN2 7 #define COLOR_PINK 8 #define COLOR_LIGHTPINK 9 #define COLOR_YELLOW2 10 #define COLOR_LIGHTBROWN2 11 #define COLOR_GREY 12 #define COLOR_CYAN 13 #define COLOR_AQUAMARINE 14 #define COLOR_RED2 15 #define COLOR_GREEN3 16 #define COLOR_BLUE 17 #define COLOR_GREEN4 18 #define GLOBAL_MESSAGE -87654 #define EQUIPPED_HEAD 0 #define EQUIPPED_CHEST_U 1 #define EQUIPPED_GIRTH_U 2 #define EQUIPPED_UARMS_U 3 #define EQUIPPED_LARMS_U 4 #define EQUIPPED_HANDS 5 #define EQUIPPED_ULEGS_U 6 #define EQUIPPED_LLEGS_U 7 #define EQUIPPED_FEET 8 #define EQUIPPED_CHEST 9 #define EQUIPPED_GIRTH 10 #define EQUIPPED_UARMS 11 #define EQUIPPED_LARMS 12 #define EQUIPPED_ULEGS 13 #define EQUIPPED_LLEGS 14 #define EQUIPPED_NECKLACE 15 #define EQUIPPED_RBRACELET 16 #define EQUIPPED_LBRACELET 17 #define EQUIPPED_RRING 18 #define EQUIPPED_LRING 19 #define EQUIPPED_WEAPON 20 #define EQUIPPED_SHIELD 21 #define EQUIPPED_PROJECTILE 22 #define EQUIPPED_AMMO 23 #define EQUIPPED_FOCUS 24 #define SKILL_AXE 0x01 #define SKILL_BOW 0x02 #define SKILL_XBOW 0x03 #define SKILL_DAGGER 0x04 #define SKILL_MACE 0x05 #define SKILL_MELEE 0x06 #define SKILL_MISSILE 0x07 #define SKILL_UNKNOWN08 0x08 #define SKILL_SPEAR 0x09 #define SKILL_STAFF 0x0A #define SKILL_SWORD 0x0B #define SKILL_THROWN 0x0C #define SKILL_UNARMED 0x0D #define SKILL_LORE 0x0E #define SKILL_MAGICD 0x0F #define SKILL_MANAC 0x10 #define SKILL_UNKNOWN11 0x11 #define SKILL_APPRAISEITEM 0x12 #define SKILL_ASSESSPERSON 0x13 #define SKILL_DECEPTION 0x14 #define SKILL_HEALING 0x15 #define SKILL_JUMP 0x16 #define SKILL_LOCKPICK 0x17 #define SKILL_RUN 0x18 #define SKILL_UNKNOWN19 0x19 #define SKILL_UNKNOWN1A 0x1A #define SKILL_ASSESSCREATURE 0x1B #define SKILL_APPRAISEWEAPON 0x1C #define SKILL_APPRAISEARMOR 0x1D #define SKILL_APPRAISEMAGICITEM 0x1E #define SKILL_CREATURE 0x1F #define SKILL_ITEM 0x20 #define SKILL_LIFE 0x21 #define SKILL_WAR 0x22 #define SKILL_LEADERSHIP 0x23 #define SKILL_LOYALTY 0x24 #define SKILL_FLETCHING 0x25 #define SKILL_ALCHEMY 0x26 #define SKILL_COOKING 0x27 #define SKILL_UNASSIGNED 0x80 #define STAT_STRENGTH 0x00 #define STAT_ENDURANCE 0x01 #define STAT_COORDINATION 0x02 #define STAT_QUICKNESS 0x03 #define STAT_FOCUS 0x04 #define STAT_SELF 0x05 #define STAT_NULL 0xFF enum eTrainingType { eTrainUnusable, eTrainUntrained, eTrainTrained, eTrainSpecialized }; struct stSkillInfo { LPTSTR Name; long AttribA, AttribB; long Divider; int TrainStyle; }; struct cClientPacketHeader { DWORD m_dwSequence; DWORD m_dwFlags; DWORD m_dwServerID; DWORD m_dwCRC; WORD m_wTotalSize; BYTE m_bTime, m_bTable; DWORD m_dwSpecial; }; struct cServerPacketHeader { DWORD m_dwSequence; DWORD m_dwFlags; DWORD m_dwServerID; DWORD m_dwCRC; WORD m_wTotalSize; BYTE m_bTime, m_bTable; }; struct cMessageHeader { DWORD m_dwSequence; DWORD m_dwObjectID; WORD m_wFragmentCount; WORD m_wFragmentLength; WORD m_wFragmentIndex, m_wUnknown1; }; struct EmuHeader { enum PacketType { // Client to Server: login/pass Authenticate, // Server to Client: assign a session ID SetSession, // Client to Server: rejoin session on new node JoinSession, // Both: Terminate nicely Disconnect, // Both: Game related events Payload }; // Enum PacketType BYTE type_, // Unknown message flag (priority?) message_; // Bytes in the payload WORD payloadsize_; // Session ID DWORD session_; }; struct cPacket { BYTE *m_pbPayload; WORD m_wSize; }; struct stConnUser { bool Connected; int State; sockaddr_in sockaddy; SOCKET Socket; DWORD charGUID; char ZoneName[20]; BYTE bTime; DWORD RecTime, LastTime; bool Connable; int ConnTimer; int ZoneNum; DWORD curSeq; DWORD AttackCount; WORD move_count, PortalCount, AnimCount, EventCount, OverrideCount, ModelCount; BYTE MoveItemCount, EquipCount, Count237[0x20], Count244[3], Count23E; DWORD msgID; DWORD lastInSeq; EmuHeader CurrentHeader; BYTE RecvBuff[0x4000]; int RecvState; char Status[64]; DWORD SelectedItem; float PointX, PointY; cWorldObject_Char * Char; cWorldObject * MainPackPtr[102], * SidePacksPtr[7], * EquippedPtr[25]; std::map ObjectCache; typedef std::list< cPacket > cPacketQueue; cPacketQueue m_input, m_output; }; struct cAnimStruct { DWORD dwf74c; DWORD dwGUID; WORD wNumLogins; WORD wNumInteractions; WORD wNumAnimations; WORD wFlag; WORD wUnk1; WORD wAnimation_Family; union { struct { WORD wUnk2; WORD wUnk3; }; DWORD GUIDTarget; }; union { struct { WORD wAnimation_to_Play; WORD wAnimation_Seqnum; }; DWORD dwUnk1; }; union { float fPlaySpeed; DWORD dwUnk2; }; }; struct cAnimStructEx : public cAnimStruct { float fUnk1; DWORD Zero; }; struct stIPStore { char Login[20]; char Pass[20]; in_addr IP; bool Enabled; bool Valid; int ZoneNum; }; struct stAccounts { char Login[20]; char Pass[20]; DWORD Chars[5]; WORD Secs2Del[5]; char Names[5][32]; WORD LoggedIn; }; class cACServer { public: cACServer(); ~cACServer(); void SaveAccounts(); void LoadAccounts(); void LogDisp(char *toDisp); void IncTimes(); void DisconnectUser(int User); void StartListen(); void AcceptUser(); void NewRead(int); void AuthenticateUser(int UserParsing); void ParseMessage(int); void Parse200(int UserParsing, DWORD MessageType, BYTE *Packet, int PacketLen); void ParseF7B1(int UserParsing, DWORD MessageType, BYTE *Packet, int PacketLen); void WorldServerParse(int UserParsing, BYTE *tPackPtr, int amountRead, cClientPacketHeader *tphdr); void ServerMessage(int User, char *Text, DWORD Color); void GiveXP(int User, int Type, DWORD Amount); void LoadOptions(); void SaveOptions(); bool Private, MOTDaShown; HWND MainWnd; int MaxUsers, NumConnected; stConnUser ConnUser[128]; bool Listening; int ListenPort; char LocalIP[16]; char ServerName[64]; char Admin[64]; char Host[64]; char Speed[16]; char MOTDb[2048]; stIPStore IPStore[16384]; int NumStored; stAccounts ZonePasses[16384]; int NumPasses; SOCKET charSocket; std::map ObjectList; private: void PingReply(int User); void UpdateCharInfo(int User, char * NewText); void SendCharList(int User); void CalcNextFreeGUID(); void Send200(BYTE *data, int datalen, WORD wUnk, int User); void SaveCharacter(int UserNum); void LoadObjects(); void SaveObjects(); void SendLandblock(int User, WORD Landblock); void MoveUser(int User, Location_t *loc, bool Portal, bool Override); void SendAnim(int User, WORD AnimNum, float PlaySpeed); void SendParticle(int User, DWORD ParticleNum, float PlaySpeed); void SendSound(int User, DWORD SoundNum, float PlaySpeed); void PointAt(int User, DWORD GuidAt); void ActionComplete(int User); void RemoveItem(DWORD GUID); void EvalObject(int User, DWORD GUID); void UpdateSkill(int User, int Skill); void UpdateStat(int User, int Stat); void UpdateSecondaryStat(int User, int Stat); int Generate_F7B0_13(BYTE * OutPack, int User); char MOTDa[2048]; bool NeedToDelete; DWORD NextFreeCharGUID; unsigned char TestBuf[4096]; char sayit[10240]; std::map LBObjects[0x10000]; std::map Portals[0x10000]; }; float GetDistance(Location_t *loc1, Location_t *loc2); #endif