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

WorldItems.h 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. #ifndef WORLDITEMS_H
  2. #define WORLDITEMS_H
  3. #define OBJECT_CHARACTER 1
  4. #define OBJECT_LIFESTONE 2
  5. #define OBJECT_PORTAL 3
  6. #define OBJECT_WEAPON 4
  7. #define OBJECT_OBJECTID 1000
  8. #define PORTAL_PLAYERSUMMONED 1
  9. #define PORTAL_TYABLE 2
  10. #define PORTAL_SUMMONABLE 4
  11. #define PORTAL_RECALLABLE 8
  12. #define WEAPON_UA 1
  13. #define WEAPON_DAGGER 2
  14. #define WEAPON_STAFF 3
  15. #define WEAPON_SWORD 4
  16. #define WEAPON_SPEAR 5
  17. #define WEAPON_MACE 6
  18. #define WEAPON_AXE 7
  19. #define WEAPON_THROWN 8
  20. #define WEAPON_BOW 9
  21. #define WEAPON_XBOW 10
  22. #define WEAPON_POLEARM 11
  23. #define SPOT_FTORSO 0
  24. #define SPOT_BTORSO 1
  25. #define SPOT_FGIRTH 2
  26. #define SPOT_BGIRTH 3
  27. #define SPOT_UARM 4
  28. #define SPOT_LARM 5
  29. #define SPOT_HAND 6
  30. #define SPOT_ULEG 7
  31. #define SPOT_LLEG 8
  32. #define SPOT_FOOT 9
  33. #define SPOT_EYE 10
  34. #define SPOT_NOSE 11
  35. #define SPOT_MOUTH 12
  36. #define BYOBJ_SELECTABLE 1
  37. #define SIZEOFCHAR sizeof(cWorldObject_Char) - sizeof(cWorldObject)
  38. //#define SIZEOFCHAR 32+8+4+(96*4)+8+(4*12)+4+12+(2*sizeof(Location_t))+4+(3*4*6)+(4*4*3)+(10*4)+(5*100*4)+4+(40*5*4)+(102*4)+(7*4)+(25*4)+8+4+(3*2*17)
  39. //#define SIZEOFCHAR 32+8+4+(96*4)+8+(4*12)+4+12+(2*sizeof(Location_t))+4+(3*4*6)+(4*4*3)+(10*4)+(5*100*4)+4+(40*5*4)+(102*4)+(7*4)+(25*4)+8+4
  40. void GenString(char *str2c, int *outlen, BYTE *outbuf);
  41. typedef struct
  42. {
  43. DWORD landblock; //turbine
  44. float x,y,z; //cartesian (relative to LB)
  45. float a,b,c,w; //quaternion
  46. } Location_t;
  47. class cWorldObject {
  48. public:
  49. DWORD Type;
  50. DWORD Size;
  51. DWORD GUID;
  52. char Name[32];
  53. Location_t Loc;
  54. DWORD Owner;
  55. cWorldObject()
  56. {
  57. Size = 4+4+4+32+sizeof(Location_t);
  58. }
  59. ~cWorldObject() { }
  60. virtual int Serialize(BYTE *Data)
  61. {
  62. Data = 0;
  63. return(0);
  64. }
  65. virtual void LoadFrom(BYTE *Here)
  66. {
  67. }
  68. virtual int GenerateCreatePacket(BYTE * Packet)
  69. {
  70. return(0);
  71. }
  72. };
  73. class cWorldObject_LS : public cWorldObject {
  74. public:
  75. cWorldObject_LS()
  76. {
  77. Size = 0;
  78. Type = OBJECT_LIFESTONE;
  79. Owner = 0;
  80. }
  81. virtual int Serialize(BYTE *Data)
  82. {
  83. Data = 0;
  84. return(0);
  85. }
  86. virtual void LoadFrom(BYTE *Here)
  87. {
  88. }
  89. virtual int GenerateCreatePacket(BYTE * Packet)
  90. {
  91. /* BYTE * PackPointer = Packet;
  92. DWORD tpd; WORD tpw;
  93. //F7b0 header
  94. tpd = 0xF745; memcpy(PackPointer, &tpd, 4); PackPointer += 4;
  95. memcpy(PackPointer, &GUID , 4); PackPointer += 4;
  96. tpd = 11; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //11
  97. tpd = 0x0013; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //PaletteCount...
  98. tpd = 0x0013; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //TextureCount...
  99. tpd = 0x0013; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //ModelCount...
  100. return((DWORD) PackPointer - (DWORD) Packet);*/
  101. unsigned char CREATE_ENT_LS[] = {
  102. 0x45, 0xF7, 0x00, 0x00, 0x01, 0xE0, 0xD9, 0x7B, 0x11, 0x00, 0x00, 0x00, 0x03, 0x88, 0x01, 0x00,
  103. 0x10, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0xF0, 0xD0, 0x03,
  104. 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x9E, 0xBD, 0x24, 0x68, 0x29, 0x42, 0x7B, 0xC3, 0x6A, 0x42,
  105. 0xF0, 0x88, 0x19, 0x41, 0xD5, 0x28, 0xCC, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  106. 0x73, 0xC4, 0x6A, 0xBF, 0x26, 0x00, 0x00, 0x09, 0x14, 0x00, 0x00, 0x20, 0xEE, 0x02, 0x00, 0x02,
  107. 0x44, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  108. 0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x80, 0x00, 0x0B, 0x00, 0x4C, 0x69, 0x66, 0x65, 0x20, 0x53,
  109. 0x74, 0x6F, 0x6E, 0x65, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x01, 0x55, 0x13, 0x80, 0x00, 0x00, 0x00,
  110. 0x14, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
  111. 0x04, 0x00, 0x00, 0x00, 0x06, 0x56, 0xFA, 0x02
  112. };
  113. memcpy(&CREATE_ENT_LS[4], &GUID, 4);
  114. memcpy(&CREATE_ENT_LS[0x24], &Loc, sizeof(Loc));
  115. memcpy(Packet, CREATE_ENT_LS, sizeof(CREATE_ENT_LS));
  116. return(sizeof(CREATE_ENT_LS));
  117. }
  118. };
  119. class cWorldObject_Portal : public cWorldObject {
  120. public:
  121. Location_t DestLoc;
  122. DWORD Flags;
  123. WORD Lower, Upper;
  124. /* 1 = PlayerSummoned
  125. 2 = Tyable
  126. 4 = Summonable
  127. 8 = Recallable
  128. 00FF0000 = Lower Limit
  129. FF000000 = Upper Limit
  130. 0000FFF0 = Expansion */
  131. cWorldObject_Portal()
  132. {
  133. Size = sizeof(DestLoc) + sizeof(DWORD);
  134. Type = OBJECT_PORTAL;
  135. Flags = PORTAL_RECALLABLE | PORTAL_TYABLE | PORTAL_SUMMONABLE;
  136. Owner = 0;
  137. }
  138. virtual int Serialize(BYTE *Data)
  139. {
  140. Data = (BYTE *) &DestLoc;
  141. return(Size);
  142. }
  143. virtual void LoadFrom(BYTE *Here)
  144. {
  145. memcpy(&DestLoc, &Here[0], sizeof(DestLoc));
  146. memcpy(&Flags, &Here[sizeof(DestLoc)], sizeof(DWORD));
  147. }
  148. virtual int GenerateCreatePacket(BYTE * Packet)
  149. {
  150. unsigned char CREATE_ENT_PORTAL_A[] = {
  151. 0x45, 0xF7, 0x00, 0x00, 0x37, 0xE0, 0x17, 0x70, 0x11, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0x00, //E÷..7à.p.....€..
  152. 0x0C, 0x0C, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0xF0, 0xD0, 0x03, // ........=..ðÐ.
  153. 0x00, 0x00, 0x00, 0x00, 0x6E, 0x01, 0x7E, 0x01, 0x00, 0x00, 0xF0, 0x41, 0x00, 0x00, 0x04, 0xC3, //....n.~...ðA...Ã
  154. 0x20, 0x06, 0x81, 0xBD, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .�½..€?........
  155. 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x09, 0xB3, 0x01, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, //........³.......
  156. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x00, 0x00, 0x00, //............©...
  157. 0x38, 0x00, 0x80, 0x00,
  158. };
  159. unsigned char CREATE_ENT_PORTAL_B[] = {
  160. 0x09, 0x12, 0x6B, 0x10, 0x80, 0x00, 0x01, 0x00, 0x14, 0x00, 0x04, 0x00, //l.....k.€.......
  161. 0x80, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xCD, 0xCC, 0xCC, 0xBD, 0x04, 0x00, 0x00, 0x00, //€... ...ÍÌ̽....
  162. };
  163. BYTE * PackPointer = Packet;
  164. memcpy(&CREATE_ENT_PORTAL_A[4], &GUID, 4);
  165. memcpy(&CREATE_ENT_PORTAL_A[0x24], &Loc, sizeof(Loc));
  166. memcpy(PackPointer, CREATE_ENT_PORTAL_A, sizeof(CREATE_ENT_PORTAL_A)); PackPointer += sizeof(CREATE_ENT_PORTAL_A);
  167. int outlen; GenString(Name, &outlen, PackPointer); PackPointer += outlen;
  168. memcpy(PackPointer, CREATE_ENT_PORTAL_B, sizeof(CREATE_ENT_PORTAL_B)); PackPointer += sizeof(CREATE_ENT_PORTAL_B);
  169. return((DWORD) PackPointer - (DWORD) Packet);
  170. }
  171. };
  172. class cWorldObject_Char : public cWorldObject {
  173. public:
  174. char Title[32];
  175. DWORD TotalXP, UnassignedXP;
  176. DWORD SkillCredits;
  177. DWORD SpellsLearned[96];
  178. DWORD Patron, Monarch, Vassal[12];
  179. DWORD Options;
  180. DWORD Race, Gender, Class, Level;
  181. Location_t LSTie, PortalTie;
  182. WORD PortalTieMinLevel, PortalTieMaxLevel;
  183. DWORD InitialStat[6], CurrentStat[6], XPIntoStat[6];
  184. DWORD SecondaryStatInc[3], CurrentSecondaryStat[3], XPIntoSecondaryStat[3], BaseSecondaryStat[3];
  185. DWORD ShortCut[10];
  186. DWORD SpellBar[5][100];
  187. DWORD Vitae;
  188. DWORD SkillInc[40], SkillTrain[40], SkillXP[40], SkillFreeXP[40], SkillBase[40];
  189. DWORD MainPack[102];
  190. DWORD SidePacks[7];
  191. DWORD Equipped[25]; //Equipped GUIDs
  192. WORD Model, NumLogins, Owner, Expand;
  193. float Scale;
  194. WORD ModelSwap[17];
  195. WORD OldTexSwap[17], TexSwap[17];
  196. cWorldObject_Char()
  197. {
  198. Size = SIZEOFCHAR;
  199. Type = OBJECT_CHARACTER;
  200. Owner = 0;
  201. // ZeroMemory(ModelSwap, 17*2);
  202. // ZeroMemory(TexSwap, 17*2);
  203. }
  204. virtual int Serialize(BYTE *Data)
  205. {
  206. memcpy(Data, Title, SIZEOFCHAR);
  207. return(SIZEOFCHAR);
  208. }
  209. virtual void LoadFrom(BYTE *Here)
  210. {
  211. memcpy(Title, Here, Size);
  212. }
  213. int GenerateTexChangePacket(BYTE *Packet)
  214. {
  215. BYTE * PackPointer = Packet;
  216. DWORD tpd; WORD tpw; BYTE tpb;
  217. tpd = 0xF625; memcpy(PackPointer, &tpd, 4); PackPointer += 4;
  218. memcpy(PackPointer, &GUID, 4); PackPointer += 4;
  219. tpb = 0x11; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //11
  220. tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //PaletteCount...
  221. BYTE MSwpCnt = 0;
  222. for (int i=0;i<17;i++)
  223. {
  224. if (TexSwap[i])
  225. MSwpCnt++;
  226. }
  227. tpb = MSwpCnt; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //TextureCount...
  228. tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //ModelCount...
  229. //texswaps
  230. for (i=0;i<17;i++)
  231. {
  232. if (TexSwap[i])
  233. {
  234. tpb = i; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //ID
  235. tpw = OldTexSwap[i];memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Swap
  236. tpw = TexSwap[i]; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Swap
  237. }
  238. }
  239. tpw = 0; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //modelsequencetype
  240. tpw = 0; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //modelsequence
  241. return((DWORD) PackPointer - (DWORD) Packet);
  242. }
  243. virtual int GenerateCreatePacket(BYTE *Packet)
  244. {
  245. BYTE * PackPointer = Packet;
  246. DWORD tpd; WORD tpw; BYTE tpb;// int i;
  247. tpd = 0xF745; memcpy(PackPointer, &tpd, 4); PackPointer += 4;
  248. memcpy(PackPointer, &GUID, 4); PackPointer += 4;
  249. // tpb = 0x11; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //11
  250. // tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //PaletteCount...
  251. // tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //TextureCount...
  252. // tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //ModelCount...
  253. //Header
  254. *((BYTE *)PackPointer) = 0x11; PackPointer += 1;
  255. *((BYTE *)PackPointer) = 3; PackPointer += 1;
  256. *((BYTE *)PackPointer) = 4; PackPointer += 1;
  257. *((BYTE *)PackPointer) = 17; PackPointer += 1;
  258. //PaletteSwaps
  259. *((WORD *)PackPointer) = 0x007E; PackPointer += 2;
  260. *((BYTE *)PackPointer) = 0xB3; PackPointer += 1;
  261. *((BYTE *)PackPointer) = 0x02; PackPointer += 1;
  262. *((WORD *)PackPointer) = 0x1800; PackPointer += 2;
  263. *((BYTE *)PackPointer) = 0xE1; PackPointer += 1;
  264. *((BYTE *)PackPointer) = 0x02; PackPointer += 1;
  265. *((WORD *)PackPointer) = 0x0818; PackPointer += 2;
  266. *((BYTE *)PackPointer) = 0xAF; PackPointer += 1;
  267. *((BYTE *)PackPointer) = 0x04; PackPointer += 1;
  268. //PaletteUnknown
  269. *((WORD *)PackPointer) = 0x0820; PackPointer += 2;
  270. //TextureSwaps
  271. *((BYTE *)PackPointer) = 10; PackPointer += 1;
  272. *((WORD *)PackPointer) = 0x0098; PackPointer += 2;
  273. *((WORD *)PackPointer) = 0x10B7; PackPointer += 2;
  274. *((BYTE *)PackPointer) = 10; PackPointer += 1;
  275. *((WORD *)PackPointer) = 0x024C; PackPointer += 2;
  276. *((WORD *)PackPointer) = 0x1120; PackPointer += 2;
  277. *((BYTE *)PackPointer) = 10; PackPointer += 1;
  278. *((WORD *)PackPointer) = 0x02F5; PackPointer += 2;
  279. *((WORD *)PackPointer) = 0x1162; PackPointer += 2;
  280. *((BYTE *)PackPointer) = 10; PackPointer += 1;
  281. *((WORD *)PackPointer) = 0x025C; PackPointer += 2;
  282. *((WORD *)PackPointer) = 0x11EA; PackPointer += 2;
  283. //ModelSwaps
  284. *((BYTE *)PackPointer) = 0; PackPointer += 1;
  285. *((WORD *)PackPointer) = 0x004E; PackPointer += 2;
  286. *((BYTE *)PackPointer) = 1; PackPointer += 1;
  287. *((WORD *)PackPointer) = 0x004F; PackPointer += 2;
  288. *((BYTE *)PackPointer) = 2; PackPointer += 1;
  289. *((WORD *)PackPointer) = 0x004D; PackPointer += 2;
  290. *((BYTE *)PackPointer) = 5; PackPointer += 1;
  291. *((WORD *)PackPointer) = 0x0053; PackPointer += 2;
  292. *((BYTE *)PackPointer) = 6; PackPointer += 1;
  293. *((WORD *)PackPointer) = 0x0051; PackPointer += 2;
  294. *((BYTE *)PackPointer) = 9; PackPointer += 1;
  295. *((WORD *)PackPointer) = 0x0054; PackPointer += 2;
  296. *((BYTE *)PackPointer) = 0xA; PackPointer += 1;
  297. *((WORD *)PackPointer) = 0x0497; PackPointer += 2;
  298. *((BYTE *)PackPointer) = 0xB; PackPointer += 1;
  299. *((WORD *)PackPointer) = 0x0495; PackPointer += 2;
  300. *((BYTE *)PackPointer) = 0xC; PackPointer += 1;
  301. *((WORD *)PackPointer) = 0x0076; PackPointer += 2;
  302. *((BYTE *)PackPointer) = 0xD; PackPointer += 1;
  303. *((WORD *)PackPointer) = 0x04AD; PackPointer += 2;
  304. *((BYTE *)PackPointer) = 0xE; PackPointer += 1;
  305. *((WORD *)PackPointer) = 0x0496; PackPointer += 2;
  306. *((BYTE *)PackPointer) = 0xF; PackPointer += 1;
  307. *((WORD *)PackPointer) = 0x0077; PackPointer += 2;
  308. *((BYTE *)PackPointer) = 3; PackPointer += 1;
  309. *((WORD *)PackPointer) = 0x004C; PackPointer += 2;
  310. *((BYTE *)PackPointer) = 7; PackPointer += 1;
  311. *((WORD *)PackPointer) = 0x0050; PackPointer += 2;
  312. *((BYTE *)PackPointer) = 4; PackPointer += 1;
  313. *((WORD *)PackPointer) = 0x004B; PackPointer += 2;
  314. *((BYTE *)PackPointer) = 8; PackPointer += 1;
  315. *((WORD *)PackPointer) = 0x0052; PackPointer += 2;
  316. *((BYTE *)PackPointer) = 0x10; PackPointer += 1;
  317. *((WORD *)PackPointer) = 0x049E; PackPointer += 2;
  318. //Filler
  319. *((BYTE *)PackPointer) = 0x00; PackPointer += 1;
  320. *((BYTE *)PackPointer) = 0x00; PackPointer += 1;
  321. *((BYTE *)PackPointer) = 0x00; PackPointer += 1;
  322. tpd = 0x000198C3; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Flags1
  323. tpd = 0x00404410; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown2
  324. //Flag1 Stuff Begin
  325. tpd = 0x00000008; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknownCount
  326. BYTE UnkBytes[8] = { 0x00, 0x00, 0x3D, 0x00, 0x00, 0xF0, 0xE7, 0x03 };
  327. memcpy(PackPointer, UnkBytes, 8); PackPointer += 8; //unknownBytes
  328. tpd = 0x00000000; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknownDword
  329. memcpy(PackPointer, &Loc, 32); PackPointer += 32; //location - 8000
  330. tpd = 0x09000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Grey - 2
  331. tpd = 0x20000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Yellow - 800
  332. tpd = 0x34000004; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Blue - 1000
  333. tpd = 0x02000000 | Model; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Skyblue - 1 Model
  334. tpd = 0x00000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Purple - 40 - starts at 0xAC
  335. tpd = 0xB8548268; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Purple - 40 - starts at 0xAC
  336. tpd = 0x00000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Purple - 40 - starts at 0xAC
  337. memcpy(PackPointer, &Scale, 4); PackPointer += 4; //Green - 80 Scale
  338. //Flags1 Stuff End
  339. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[0]=wNum_Move_Interact;
  340. tpw = 0x0001; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[1]=wNum_Anim_Interact;
  341. tpw = 0x0001; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[2]=wNum_Bubble_Mode;
  342. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[3]=wNum_Jumps;
  343. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[4]=wNum_Portals; (Bubble_Mode in a sense maybe)
  344. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[5]=wNum_Anim_Count;
  345. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[6]=wNum_Override;
  346. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[7]=
  347. tpw = 0x0003; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[8]=wNum_Logins;
  348. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[9]=
  349. tpd = 0x00800016; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Flags2
  350. int outlen; GenString(Name, &outlen, PackPointer); PackPointer += outlen; //objectName
  351. tpw = 0x0001; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //"model"
  352. tpw = 0x1036; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Icon
  353. tpd = 0x00000010; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown_v0_2 - Monster... lol
  354. tpd = 0x0000003C; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown_v0_3 - NotGrabbed+Player+Selectable+PK
  355. //Flags2 Stuff Begin
  356. tpb = 0x66; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //itemSlots
  357. tpb = 0x07; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //packSlots
  358. tpd = 0x00000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //total value
  359. tpd = 0x00000004; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown_v6
  360. //Flags2 Stuff End
  361. return((DWORD) PackPointer - (DWORD) Packet);
  362. }
  363. };
  364. class cWorldObject_ObjectID : public cWorldObject {
  365. public:
  366. WORD Model, Icon;
  367. DWORD Flags;
  368. float Scale;
  369. cWorldObject_ObjectID()
  370. {
  371. Size = sizeof(Model)*2 + sizeof(Flags) + sizeof(Scale);
  372. Type = OBJECT_OBJECTID;
  373. Owner = 0;
  374. Scale = 1.0f;
  375. }
  376. virtual int Serialize(BYTE *Data)
  377. {
  378. BYTE ForData[sizeof(Model)*2 + sizeof(Flags)];
  379. memcpy(&ForData[0], &Model, sizeof(Model));
  380. memcpy(&ForData[2], &Icon, sizeof(Icon));
  381. memcpy(&ForData[4], &Flags, sizeof(Flags));
  382. memcpy(&ForData[8], &Scale, sizeof(Scale));
  383. Data = (BYTE *) &ForData;
  384. return(sizeof(ForData));
  385. }
  386. virtual void LoadFrom(BYTE *Here)
  387. {
  388. memcpy(&Model, Here, sizeof(Model));
  389. memcpy(&Icon, Here+2, sizeof(Icon));
  390. memcpy(&Flags, Here + 4, sizeof(Flags));
  391. memcpy(&Scale, Here + 8, sizeof(Scale));
  392. }
  393. virtual int GenerateCreatePacket(BYTE * Packet)
  394. {
  395. BYTE * PackPointer = Packet;
  396. DWORD tpd; WORD tpw; BYTE tpb;
  397. tpd = 0xF745; memcpy(PackPointer, &tpd, 4); PackPointer += 4;
  398. memcpy(PackPointer, &GUID, 4); PackPointer += 4;
  399. tpb = 0x11; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //11
  400. tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //PaletteCount...
  401. tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //TextureCount...
  402. tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //ModelCount...
  403. tpd = 0x00029881; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Flags1
  404. tpd = 0x00000414; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown2
  405. //Flag1 Stuff Begin
  406. tpd = 0x00000065; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Unknown - 20000
  407. memcpy(PackPointer, &Loc, 32); PackPointer += 32; //location - 8000
  408. tpd = 0x20000014; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Yellow - 800
  409. tpd = 0x3400002B; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Blue - 1000
  410. tpd = 0x02000000 | Model; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Skyblue - 1 Model
  411. memcpy(PackPointer, &Scale, 4); PackPointer += 4; //Green - 80 Scale
  412. //Flags1 Stuff End
  413. tpw = 0x0004; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[0]=wNum_Move_Interact;
  414. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[1]=wNum_Anim_Interact;
  415. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[2]=wNum_Bubble_Mode;
  416. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[3]=wNum_Jumps;
  417. tpw = 0x0001; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[4]=wNum_Portals; (Bubble_Mode in a sense maybe)
  418. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[5]=wNum_Anim_Count;
  419. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[6]=wNum_Override;
  420. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[7]=
  421. tpw = 0x0005; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[8]=wNum_Logins;
  422. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[9]=
  423. tpd = 0x10010218; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Flags2
  424. int outlen; GenString(Name, &outlen, PackPointer); PackPointer += outlen; //objectName
  425. tpw = 0x020F; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //"model"
  426. tpw = 0x10CE; memcpy(PackPointer, &Icon, 2); PackPointer += 2; //Icon
  427. tpd = 0x00000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown_v0_2 - Jewelry :)
  428. tpd = 0;
  429. if (Flags & BYOBJ_SELECTABLE)
  430. tpd |= 0x00000010;
  431. else
  432. tpd |= 0x00000080;
  433. memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown_v0_3 - Cannot be selected
  434. //Flags2 Stuff Begin
  435. tpd = 0x0000000A; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //value
  436. tpd = 0x00000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //total value
  437. tpd = 0x10000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //equipment type
  438. tpd = 0x00000200; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //coverage
  439. tpd = 0x00134C52; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown
  440. //Flags2 Stuff End
  441. return((DWORD) PackPointer - (DWORD) Packet);
  442. }
  443. };
  444. class cWorldObject_Weapon : public cWorldObject {
  445. public:
  446. WORD Model, Icon;
  447. int WeapType;
  448. float DamageRatio, DamageMax;
  449. float AttackMod, DefenseMod;
  450. DWORD DamageType, Speed, Range, DamageMod;
  451. DWORD Spellcraft, Difficulty;
  452. DWORD RankReq, RaceReq;
  453. DWORD SkillReq, SkillReqAmount;
  454. DWORD Enchants[8];
  455. cWorldObject_Weapon()
  456. {
  457. Size = sizeof(cWorldObject_Weapon);
  458. Type = OBJECT_WEAPON;
  459. Owner = 0;
  460. }
  461. virtual int Serialize(BYTE *Data)
  462. {
  463. BYTE ForData[sizeof(cWorldObject_Weapon)];
  464. memcpy(ForData, &Model, Size);
  465. Data = (BYTE *) &ForData;
  466. return(sizeof(ForData));
  467. }
  468. virtual void LoadFrom(BYTE *Here)
  469. {
  470. memcpy(&Model, Here, Size);
  471. }
  472. virtual int GenerateCreatePacket(BYTE * Packet)
  473. {
  474. BYTE * PackPointer = Packet;
  475. DWORD tpd; WORD tpw; BYTE tpb;
  476. tpd = 0xF745; memcpy(PackPointer, &tpd, 4); PackPointer += 4;
  477. memcpy(PackPointer, &GUID, 4); PackPointer += 4;
  478. tpb = 0x11; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //11
  479. tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //PaletteCount...
  480. tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //TextureCount...
  481. tpb = 0x00; memcpy(PackPointer, &tpb, 1); PackPointer += 1; //ModelCount...
  482. tpd = 0x00029881; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Flags1
  483. tpd = 0x00000414; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown2
  484. //Flag1 Stuff Begin
  485. tpd = 0x00000065; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Unknown - 20000
  486. memcpy(PackPointer, &Loc, 32); PackPointer += 32; //location - 8000
  487. tpd = 0x20000014; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Yellow - 800
  488. tpd = 0x3400002B; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Blue - 1000
  489. tpd = 0x02000000 | Model; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Skyblue - 1 Model
  490. tpd = 0x3F8A3D71; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Green - 80
  491. //Flags1 Stuff End
  492. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[0]=wNum_Move_Interact;
  493. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[1]=wNum_Anim_Interact;
  494. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[2]=wNum_Bubble_Mode;
  495. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[3]=wNum_Jumps;
  496. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[4]=wNum_Portals; (Bubble_Mode in a sense maybe)
  497. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[5]=wNum_Anim_Count;
  498. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[6]=wNum_Override;
  499. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[7]=
  500. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[8]=wNum_Logins;
  501. tpw = 0x0000; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //Seagreen1 - vitals[9]=
  502. tpd = 0x10010218; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //Flags2
  503. int outlen; GenString(Name, &outlen, PackPointer); PackPointer += outlen; //objectName
  504. tpw = 0x020F; memcpy(PackPointer, &tpw, 2); PackPointer += 2; //"model"
  505. memcpy(PackPointer, &Icon, 2); PackPointer += 2; //Icon
  506. tpd = 0x00000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown_v0_2 - Weapon
  507. tpd = 0x12; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown_v0_3 - Cannot be selected
  508. //Flags2 Stuff Begin
  509. tpd = 0x0000000A; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //value
  510. tpd = 0x00000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //total value
  511. tpd = 0x10000001; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //equipment type
  512. tpd = 0x00000200; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //coverage
  513. tpd = 0x00134C52; memcpy(PackPointer, &tpd, 4); PackPointer += 4; //unknown
  514. //Flags2 Stuff End
  515. return((DWORD) PackPointer - (DWORD) Packet);
  516. }
  517. };
  518. #endif