Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.13 KB | None | 0 0
  1. int SendItemTemplatePacket(Eluna* E, lua_State* L, Player* player)
  2.     {
  3.         int item = Eluna::CHECKVAL<int>(L, 2);
  4.         // send item to player (packet, overwrite cache)
  5.         ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(item);
  6.         if (pProto)
  7.         {
  8.             WorldPacket data(SMSG_ITEM_QUERY_SINGLE_RESPONSE, 600);
  9.             data << pProto->ItemId;
  10.             data << pProto->Class;
  11.             data << pProto->SubClass;
  12.             data << pProto->SoundOverrideSubclass;
  13.             data << pProto->Name1;
  14.             data << uint8(0x00);
  15.             data << uint8(0x00);
  16.             data << uint8(0x00);
  17.             data << pProto->DisplayInfoID;
  18.             data << pProto->Quality;
  19.             data << pProto->Flags;
  20.             data << pProto->Flags2;
  21.             data << pProto->BuyPrice;
  22.             data << pProto->SellPrice;
  23.             data << pProto->InventoryType;
  24.             data << pProto->AllowableClass;
  25.             data << pProto->AllowableRace;
  26.             data << pProto->ItemLevel;
  27.             data << pProto->RequiredLevel;
  28.             data << pProto->RequiredSkill;
  29.             data << pProto->RequiredSkillRank;
  30.             data << pProto->RequiredSpell;
  31.             data << pProto->RequiredHonorRank;
  32.             data << pProto->RequiredCityRank;
  33.             data << pProto->RequiredReputationFaction;
  34.             data << pProto->RequiredReputationRank;
  35.             data << int32(pProto->MaxCount);
  36.             data << int32(pProto->Stackable);
  37.             data << pProto->ContainerSlots;
  38.             data << pProto->StatsCount;                         // item stats count
  39.             for (uint32 i = 0; i < pProto->StatsCount; ++i)
  40.             {
  41.                 data << pProto->ItemStat[i].ItemStatType;
  42.                 data << pProto->ItemStat[i].ItemStatValue;
  43.             }
  44.             data << pProto->ScalingStatDistribution;            // scaling stats distribution
  45.             data << pProto->ScalingStatValue;                   // some kind of flags used to determine stat values column
  46.             for (int i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
  47.             {
  48.                 data << pProto->Damage[i].DamageMin;
  49.                 data << pProto->Damage[i].DamageMax;
  50.                 data << pProto->Damage[i].DamageType;
  51.             }
  52.  
  53.             data << pProto->Armor;
  54.             data << pProto->HolyRes;
  55.             data << pProto->FireRes;
  56.             data << pProto->NatureRes;
  57.             data << pProto->FrostRes;
  58.             data << pProto->ShadowRes;
  59.             data << pProto->ArcaneRes;
  60.  
  61.             data << pProto->Delay;
  62.             data << pProto->AmmoType;
  63.             data << pProto->RangedModRange;
  64.  
  65.             for (int s = 0; s < MAX_ITEM_PROTO_SPELLS; ++s)
  66.             {
  67.                 SpellInfo const* spell = sSpellMgr->GetSpellInfo(pProto->Spells[s].SpellId);
  68.                 if (spell)
  69.                 {
  70.                     bool db_data = pProto->Spells[s].SpellCooldown >= 0 || pProto->Spells[s].SpellCategoryCooldown >= 0;
  71.  
  72.                     data << pProto->Spells[s].SpellId;
  73.                     data << pProto->Spells[s].SpellTrigger;
  74.                     data << uint32(-abs(pProto->Spells[s].SpellCharges));
  75.  
  76.                     if (db_data)
  77.                     {
  78.                         data << uint32(pProto->Spells[s].SpellCooldown);
  79.                         data << uint32(pProto->Spells[s].SpellCategory);
  80.                         data << uint32(pProto->Spells[s].SpellCategoryCooldown);
  81.                     }
  82.                     else
  83.                     {
  84.                         data << uint32(spell->RecoveryTime);
  85.                         data << uint32(spell->CategoryEntry);
  86.                         data << uint32(spell->CategoryRecoveryTime);
  87.                     }
  88.                 }
  89.                 else
  90.                 {
  91.                     data << uint32(0);
  92.                     data << uint32(0);
  93.                     data << uint32(0);
  94.                     data << uint32(-1);
  95.                     data << uint32(0);
  96.                     data << uint32(-1);
  97.                 }
  98.             }
  99.             data << pProto->Bonding;
  100.             data << pProto->Description;
  101.             data << pProto->PageText;
  102.             data << pProto->LanguageID;
  103.             data << pProto->PageMaterial;
  104.             data << pProto->StartQuest;
  105.             data << pProto->LockID;
  106.             data << int32(pProto->Material);
  107.             data << pProto->Sheath;
  108.             data << pProto->RandomProperty;
  109.             data << pProto->RandomSuffix;
  110.             data << pProto->Block;
  111.             data << pProto->ItemSet;
  112.             data << pProto->MaxDurability;
  113.             data << pProto->Area;
  114.             data << pProto->Map;
  115.             data << pProto->BagFamily;
  116.             data << pProto->TotemCategory;
  117.             for (int s = 0; s < MAX_ITEM_PROTO_SOCKETS; ++s)
  118.             {
  119.                 data << pProto->Socket[s].Color;
  120.                 data << pProto->Socket[s].Content;
  121.             }
  122.             data << pProto->socketBonus;
  123.             data << pProto->GemProperties;
  124.             data << pProto->RequiredDisenchantSkill;
  125.             data << pProto->ArmorDamageModifier;
  126.             data << pProto->Duration;
  127.             data << pProto->ItemLimitCategory;
  128.             data << pProto->HolidayId;
  129.             player->GetSession()->SendPacket(&data);
  130.         }
  131.         return 0;
  132.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement