123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- #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<DWORD, cWorldObject *> 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<DWORD, cWorldObject *> 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<DWORD, cWorldObject *> LBObjects[0x10000];
- std::map<DWORD, cWorldObject *> Portals[0x10000];
- };
- float GetDistance(Location_t *loc1, Location_t *loc2);
- #endif
|