mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-16 18:52:22 +00:00
(RoF+) Implemented Hero's Forge Armor Models for Items. To use, set herosforgemodel field in the item table to a model number such as 63 (for example).
This commit is contained in:
+29
-92
@@ -4361,7 +4361,8 @@ void Bot::SetLevel(uint8 in_level, bool command) {
|
||||
}
|
||||
|
||||
void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) {
|
||||
if(ns) {
|
||||
if(ns)
|
||||
{
|
||||
Mob::FillSpawnStruct(ns, ForWho);
|
||||
|
||||
ns->spawn.afk = 0;
|
||||
@@ -4389,98 +4390,34 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) {
|
||||
uint32 spawnedbotid = 0;
|
||||
spawnedbotid = this->GetBotID();
|
||||
|
||||
inst = GetBotItem(MainHands);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
ns->spawn.equipment[MaterialHands] = item->Material;
|
||||
ns->spawn.colors[MaterialHands].color = GetEquipmentColor(MaterialHands);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < _MaterialCount; i++)
|
||||
{
|
||||
inst = GetBotItem(i);
|
||||
if (inst)
|
||||
{
|
||||
item = inst->GetItem();
|
||||
if (item != 0)
|
||||
{
|
||||
ns->spawn.equipment[i].material = item->Material;
|
||||
ns->spawn.equipment[i].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[i].heroforgemodel = item->HerosForgeModel;
|
||||
if (armor_tint[i])
|
||||
{
|
||||
ns->spawn.colors[i].color = armor_tint[i];
|
||||
|
||||
inst = GetBotItem(MainHead);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
ns->spawn.equipment[MaterialHead] = item->Material;
|
||||
ns->spawn.colors[MaterialHead].color = GetEquipmentColor(MaterialHead);
|
||||
}
|
||||
}
|
||||
|
||||
inst = GetBotItem(MainArms);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
ns->spawn.equipment[MaterialArms] = item->Material;
|
||||
ns->spawn.colors[MaterialArms].color = GetEquipmentColor(MaterialArms);
|
||||
}
|
||||
}
|
||||
|
||||
inst = GetBotItem(MainWrist1);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
ns->spawn.equipment[MaterialWrist] = item->Material;
|
||||
ns->spawn.colors[MaterialWrist].color = GetEquipmentColor(MaterialWrist);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
// non-live behavior
|
||||
inst = GetBotItem(MainWrist2);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
ns->spawn.equipment[MaterialWrist] = item->Material;
|
||||
ns->spawn.colors[MaterialWrist].color = GetEquipmentColor(MaterialWrist);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
inst = GetBotItem(MainChest);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
ns->spawn.equipment[MaterialChest] = item->Material;
|
||||
ns->spawn.colors[MaterialChest].color = GetEquipmentColor(MaterialChest);
|
||||
}
|
||||
}
|
||||
|
||||
inst = GetBotItem(MainLegs);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
ns->spawn.equipment[MaterialLegs] = item->Material;
|
||||
ns->spawn.colors[MaterialLegs].color = GetEquipmentColor(MaterialLegs);
|
||||
}
|
||||
}
|
||||
|
||||
inst = GetBotItem(MainFeet);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
ns->spawn.equipment[MaterialFeet] = item->Material;
|
||||
ns->spawn.colors[MaterialFeet].color = GetEquipmentColor(MaterialFeet);
|
||||
}
|
||||
}
|
||||
|
||||
inst = GetBotItem(MainPrimary);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
if(strlen(item->IDFile) > 2)
|
||||
ns->spawn.equipment[MaterialPrimary] = atoi(&item->IDFile[2]);
|
||||
ns->spawn.colors[MaterialPrimary].color = GetEquipmentColor(MaterialPrimary);
|
||||
}
|
||||
}
|
||||
|
||||
inst = GetBotItem(MainSecondary);
|
||||
if(inst) {
|
||||
item = inst->GetItem();
|
||||
if(item) {
|
||||
if(strlen(item->IDFile) > 2)
|
||||
ns->spawn.equipment[MaterialSecondary] = atoi(&item->IDFile[2]);
|
||||
ns->spawn.colors[MaterialSecondary].color = GetEquipmentColor(MaterialSecondary);
|
||||
}
|
||||
else
|
||||
{
|
||||
ns->spawn.colors[i].color = item->Color;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (armor_tint[i])
|
||||
{
|
||||
ns->spawn.colors[i].color = armor_tint[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+89
-56
@@ -1823,80 +1823,113 @@ void Client::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho)
|
||||
// (update: i think pp should do it, as this holds LoY dye - plus, this is ugly code with Inventory!)
|
||||
const Item_Struct* item = nullptr;
|
||||
const ItemInst* inst = nullptr;
|
||||
if ((inst = m_inv[MainHands]) && inst->IsType(ItemClassCommon)) {
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialHands] = item->Material;
|
||||
ns->spawn.colors[MaterialHands].color = GetEquipmentColor(MaterialHands);
|
||||
}
|
||||
if ((inst = m_inv[MainHead]) && inst->IsType(ItemClassCommon)) {
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialHead] = item->Material;
|
||||
ns->spawn.colors[MaterialHead].color = GetEquipmentColor(MaterialHead);
|
||||
}
|
||||
if ((inst = m_inv[MainArms]) && inst->IsType(ItemClassCommon)) {
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialArms] = item->Material;
|
||||
ns->spawn.colors[MaterialArms].color = GetEquipmentColor(MaterialArms);
|
||||
}
|
||||
if ((inst = m_inv[MainWrist1]) && inst->IsType(ItemClassCommon)) {
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialWrist]= item->Material;
|
||||
ns->spawn.colors[MaterialWrist].color = GetEquipmentColor(MaterialWrist);
|
||||
}
|
||||
|
||||
/*
|
||||
// non-live behavior
|
||||
if ((inst = m_inv[SLOT_BRACER02]) && inst->IsType(ItemClassCommon)) {
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialWrist]= item->Material;
|
||||
ns->spawn.colors[MaterialWrist].color = GetEquipmentColor(MaterialWrist);
|
||||
}
|
||||
*/
|
||||
// Only Player Races Wear Armor
|
||||
if (IsPlayerRace(race))
|
||||
{
|
||||
if ((inst = m_inv[MainHands]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialHands].material = item->Material;
|
||||
ns->spawn.equipment[MaterialHands].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[MaterialHands].heroforgemodel = item->HerosForgeModel;
|
||||
ns->spawn.colors[MaterialHands].color = m_pp.item_tint[MaterialHands].rgb.use_tint ? m_pp.item_tint[MaterialHands].color : item->Color;
|
||||
}
|
||||
if ((inst = m_inv[MainHead]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialHead].material = item->Material;
|
||||
ns->spawn.equipment[MaterialHead].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[MaterialHead].heroforgemodel = item->HerosForgeModel;
|
||||
ns->spawn.colors[MaterialHead].color = m_pp.item_tint[MaterialHead].rgb.use_tint ? m_pp.item_tint[MaterialHead].color : item->Color;
|
||||
}
|
||||
if ((inst = m_inv[MainArms]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialArms].material = item->Material;
|
||||
ns->spawn.equipment[MaterialArms].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[MaterialArms].heroforgemodel = item->HerosForgeModel;
|
||||
ns->spawn.colors[MaterialArms].color = m_pp.item_tint[MaterialArms].rgb.use_tint ? m_pp.item_tint[MaterialArms].color : item->Color;
|
||||
}
|
||||
if ((inst = m_inv[MainWrist1]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialWrist].material = item->Material;
|
||||
ns->spawn.equipment[MaterialWrist].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[MaterialWrist].heroforgemodel = item->HerosForgeModel;
|
||||
ns->spawn.colors[MaterialWrist].color = m_pp.item_tint[MaterialWrist].rgb.use_tint ? m_pp.item_tint[MaterialWrist].color : item->Color;
|
||||
}
|
||||
|
||||
if ((inst = m_inv[MainChest]) && inst->IsType(ItemClassCommon)) {
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialChest] = item->Material;
|
||||
ns->spawn.colors[MaterialChest].color = GetEquipmentColor(MaterialChest);
|
||||
}
|
||||
if ((inst = m_inv[MainLegs]) && inst->IsType(ItemClassCommon)) {
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialLegs] = item->Material;
|
||||
ns->spawn.colors[MaterialLegs].color = GetEquipmentColor(MaterialLegs);
|
||||
}
|
||||
if ((inst = m_inv[MainFeet]) && inst->IsType(ItemClassCommon)) {
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialFeet] = item->Material;
|
||||
ns->spawn.colors[MaterialFeet].color = GetEquipmentColor(MaterialFeet);
|
||||
if ((inst = m_inv[MainChest]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialChest].material = item->Material;
|
||||
ns->spawn.equipment[MaterialChest].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[MaterialChest].heroforgemodel = item->HerosForgeModel;
|
||||
ns->spawn.colors[MaterialChest].color = m_pp.item_tint[MaterialChest].rgb.use_tint ? m_pp.item_tint[MaterialChest].color : item->Color;
|
||||
}
|
||||
if ((inst = m_inv[MainLegs]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialLegs].material = item->Material;
|
||||
ns->spawn.equipment[MaterialLegs].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[MaterialLegs].heroforgemodel = item->HerosForgeModel;
|
||||
ns->spawn.colors[MaterialLegs].color = m_pp.item_tint[MaterialLegs].rgb.use_tint ? m_pp.item_tint[MaterialLegs].color : item->Color;
|
||||
}
|
||||
if ((inst = m_inv[MainFeet]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
item = inst->GetItem();
|
||||
ns->spawn.equipment[MaterialFeet].material = item->Material;
|
||||
ns->spawn.equipment[MaterialFeet].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[MaterialFeet].heroforgemodel = item->HerosForgeModel;
|
||||
ns->spawn.colors[MaterialFeet].color = m_pp.item_tint[MaterialFeet].rgb.use_tint ? m_pp.item_tint[MaterialFeet].color : item->Color;
|
||||
}
|
||||
}
|
||||
int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
||||
if ((inst = m_inv[MainPrimary]) && inst->IsType(ItemClassCommon)) {
|
||||
if (inst->GetOrnamentationAug(ornamentationAugtype)) {
|
||||
if ((inst = m_inv[MainPrimary]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
if (inst->GetOrnamentationAug(ornamentationAugtype))
|
||||
{
|
||||
item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem();
|
||||
if (strlen(item->IDFile) > 2)
|
||||
ns->spawn.equipment[MaterialPrimary] = atoi(&item->IDFile[2]);
|
||||
{
|
||||
ns->spawn.equipment[MaterialPrimary].material = atoi(&item->IDFile[2]);
|
||||
}
|
||||
}
|
||||
else if (inst->GetOrnamentationIcon() && inst->GetOrnamentationIDFile()) {
|
||||
ns->spawn.equipment[MaterialPrimary] = inst->GetOrnamentationIDFile();
|
||||
else if (inst->GetOrnamentationIcon() && inst->GetOrnamentationIDFile())
|
||||
{
|
||||
ns->spawn.equipment[MaterialPrimary].material = inst->GetOrnamentationIDFile();
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
item = inst->GetItem();
|
||||
if (strlen(item->IDFile) > 2)
|
||||
ns->spawn.equipment[MaterialPrimary] = atoi(&item->IDFile[2]);
|
||||
{
|
||||
ns->spawn.equipment[MaterialPrimary].material = atoi(&item->IDFile[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((inst = m_inv[MainSecondary]) && inst->IsType(ItemClassCommon)) {
|
||||
if (inst->GetOrnamentationAug(ornamentationAugtype)) {
|
||||
if ((inst = m_inv[MainSecondary]) && inst->IsType(ItemClassCommon))
|
||||
{
|
||||
if (inst->GetOrnamentationAug(ornamentationAugtype))
|
||||
{
|
||||
item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem();
|
||||
if (strlen(item->IDFile) > 2)
|
||||
ns->spawn.equipment[MaterialSecondary] = atoi(&item->IDFile[2]);
|
||||
{
|
||||
ns->spawn.equipment[MaterialSecondary].material = atoi(&item->IDFile[2]);
|
||||
}
|
||||
}
|
||||
else if (inst->GetOrnamentationIcon() && inst->GetOrnamentationIDFile()) {
|
||||
ns->spawn.equipment[MaterialSecondary] = inst->GetOrnamentationIDFile();
|
||||
else if (inst->GetOrnamentationIcon() && inst->GetOrnamentationIDFile())
|
||||
{
|
||||
ns->spawn.equipment[MaterialSecondary].material = inst->GetOrnamentationIDFile();
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
item = inst->GetItem();
|
||||
if (strlen(item->IDFile) > 2)
|
||||
ns->spawn.equipment[MaterialSecondary] = atoi(&item->IDFile[2]);
|
||||
{
|
||||
ns->spawn.equipment[MaterialSecondary].material = atoi(&item->IDFile[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8341,7 +8341,7 @@ void Client::Handle_OP_ItemPreview(const EQApplicationPacket *app)
|
||||
outapp->WriteUInt32(item->Material);
|
||||
outapp->WriteUInt32(0); //unknown
|
||||
outapp->WriteUInt32(item->EliteMaterial);
|
||||
outapp->WriteUInt32(0); // unknown
|
||||
outapp->WriteUInt32(item->HerosForgeModel);
|
||||
outapp->WriteUInt32(0); // unknown
|
||||
outapp->WriteUInt32(0); //This is unknown057 from lucy
|
||||
for (spacer = 0; spacer < 77; spacer++) { //More Item stats, but some seem to be off based on packet check
|
||||
|
||||
+10
-2
@@ -5598,7 +5598,11 @@ void command_itemsearch(Client *c, const Seperator *sep)
|
||||
if (Seperator::IsNumber(search_criteria)) {
|
||||
item = database.GetItem(atoi(search_criteria));
|
||||
if (item)
|
||||
if (c->GetClientVersion() >= EQClientRoF)
|
||||
if (c->GetClientVersion() >= EQClientRoF2)
|
||||
{
|
||||
c->Message(0, " %i: %c%06X00000000000000000000000000000000000000000000000000%s%c", (int)item->ID, 0x12, item->ID, item->Name, 0x12);
|
||||
}
|
||||
else if (c->GetClientVersion() >= EQClientRoF)
|
||||
{
|
||||
c->Message(0, " %i: %c%06X0000000000000000000000000000000000000000000000000%s%c",(int) item->ID,0x12, item->ID, item->Name, 0x12);
|
||||
}
|
||||
@@ -5627,7 +5631,11 @@ void command_itemsearch(Client *c, const Seperator *sep)
|
||||
strupr(sName);
|
||||
pdest = strstr(sName, sCriteria);
|
||||
if (pdest != nullptr) {
|
||||
if (c->GetClientVersion() >= EQClientRoF)
|
||||
if (c->GetClientVersion() >= EQClientRoF2)
|
||||
{
|
||||
c->Message(0, " %i: %c%06X00000000000000000000000000000000000000000000000000%s%c", (int)item->ID, 0x12, item->ID, item->Name, 0x12);
|
||||
}
|
||||
else if (c->GetClientVersion() >= EQClientRoF)
|
||||
{
|
||||
c->Message(0, " %i: %c%06X0000000000000000000000000000000000000000000000000%s%c",(int) item->ID,0x12, item->ID, item->Name, 0x12);
|
||||
}
|
||||
|
||||
+19
-5
@@ -1196,18 +1196,32 @@ void Merc::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) {
|
||||
ns->spawn.NPC = 1; // 0=player,1=npc,2=pc corpse,3=npc corpse
|
||||
ns->spawn.IsMercenary = 1;
|
||||
|
||||
/*
|
||||
// Wear Slots are not setup for Mercs yet
|
||||
unsigned int i;
|
||||
//should not include 21 (SLOT_AMMO)
|
||||
for (i = 0; i < MainAmmo; i++) {
|
||||
if(equipment[i] == 0)
|
||||
for (i = 0; i < _MaterialCount; i++)
|
||||
{
|
||||
if (equipment[i] == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
const Item_Struct* item = database.GetItem(equipment[i]);
|
||||
if(item)
|
||||
{
|
||||
ns->spawn.equipment[i] = item->Material;
|
||||
ns->spawn.colors[i].color = item->Color;
|
||||
ns->spawn.equipment[i].material = item->Material;
|
||||
ns->spawn.equipment[i].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[i].heroforgemodel = item->HerosForgeModel;
|
||||
if (armor_tint[i])
|
||||
{
|
||||
ns->spawn.colors[i].color = armor_tint[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
ns->spawn.colors[i].color = item->Color;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+62
-11
@@ -963,22 +963,44 @@ void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho)
|
||||
ns->spawn.flymode = FindType(SE_Levitate) ? 2 : 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ns->spawn.flymode = flymode;
|
||||
}
|
||||
|
||||
ns->spawn.lastName[0] = '\0';
|
||||
|
||||
strn0cpy(ns->spawn.lastName, lastname, sizeof(ns->spawn.lastName));
|
||||
|
||||
for(i = 0; i < _MaterialCount; i++)
|
||||
const Item_Struct *item;
|
||||
|
||||
for (i = 0; i < _MaterialCount; i++)
|
||||
{
|
||||
ns->spawn.equipment[i] = GetEquipmentMaterial(i);
|
||||
if (armor_tint[i])
|
||||
// Only Player Races Wear Armor
|
||||
if (IsPlayerRace(race) || i > 6)
|
||||
{
|
||||
ns->spawn.colors[i].color = armor_tint[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
ns->spawn.colors[i].color = GetEquipmentColor(i);
|
||||
ns->spawn.equipment[i].material = GetEquipmentMaterial(i);
|
||||
|
||||
item = database.GetItem(GetEquipment(i));
|
||||
if (item != 0)
|
||||
{
|
||||
ns->spawn.equipment[i].elitematerial = item->EliteMaterial;
|
||||
ns->spawn.equipment[i].heroforgemodel = item->HerosForgeModel;
|
||||
if (armor_tint[i])
|
||||
{
|
||||
ns->spawn.colors[i].color = armor_tint[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
ns->spawn.colors[i].color = item->Color;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (armor_tint[i])
|
||||
{
|
||||
ns->spawn.colors[i].color = armor_tint[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2601,8 +2623,20 @@ void Mob::SendWearChange(uint8 material_slot)
|
||||
|
||||
wc->spawn_id = GetID();
|
||||
wc->material = GetEquipmentMaterial(material_slot);
|
||||
wc->elite_material = IsEliteMaterialItem(material_slot);
|
||||
wc->color.color = GetEquipmentColor(material_slot);
|
||||
const Item_Struct *item;
|
||||
item = database.GetItem(GetEquipment(material_slot));
|
||||
if (item != 0)
|
||||
{
|
||||
wc->elite_material = item->EliteMaterial;
|
||||
wc->hero_forge_model = item->HerosForgeModel;
|
||||
wc->color.color = item->Color;
|
||||
}
|
||||
else
|
||||
{
|
||||
wc->elite_material = 0;
|
||||
wc->hero_forge_model = 0;
|
||||
wc->color.color = 0;
|
||||
}
|
||||
wc->wear_slot_id = material_slot;
|
||||
|
||||
entity_list.QueueClients(this, outapp);
|
||||
@@ -2646,6 +2680,7 @@ void Mob::SetSlotTint(uint8 material_slot, uint8 red_tint, uint8 green_tint, uin
|
||||
|
||||
wc->spawn_id = this->GetID();
|
||||
wc->material = GetEquipmentMaterial(material_slot);
|
||||
wc->hero_forge_model = GetHeroForgeModel(material_slot);
|
||||
wc->color.color = color;
|
||||
wc->wear_slot_id = material_slot;
|
||||
|
||||
@@ -2653,7 +2688,7 @@ void Mob::SetSlotTint(uint8 material_slot, uint8 red_tint, uint8 green_tint, uin
|
||||
safe_delete(outapp);
|
||||
}
|
||||
|
||||
void Mob::WearChange(uint8 material_slot, uint16 texture, uint32 color)
|
||||
void Mob::WearChange(uint8 material_slot, uint16 texture, uint32 color, uint32 hero_forge_model)
|
||||
{
|
||||
armor_tint[material_slot] = color;
|
||||
|
||||
@@ -2662,6 +2697,7 @@ void Mob::WearChange(uint8 material_slot, uint16 texture, uint32 color)
|
||||
|
||||
wc->spawn_id = this->GetID();
|
||||
wc->material = texture;
|
||||
wc->hero_forge_model = hero_forge_model;
|
||||
wc->color.color = color;
|
||||
wc->wear_slot_id = material_slot;
|
||||
|
||||
@@ -2741,6 +2777,19 @@ uint32 Mob::IsEliteMaterialItem(uint8 material_slot) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 Mob::GetHeroForgeModel(uint8 material_slot) const
|
||||
{
|
||||
const Item_Struct *item;
|
||||
|
||||
item = database.GetItem(GetEquipment(material_slot));
|
||||
if (item != 0)
|
||||
{
|
||||
return item->HerosForgeModel;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// works just like a printf
|
||||
void Mob::Say(const char *format, ...)
|
||||
{
|
||||
@@ -3797,6 +3846,8 @@ int32 Mob::GetItemStat(uint32 itemid, const char *identifier)
|
||||
stat = int32(item->CastTime);
|
||||
if (id == "elitematerial")
|
||||
stat = int32(item->EliteMaterial);
|
||||
if (id == "herosforgemodel")
|
||||
stat = int32(item->HerosForgeModel);
|
||||
if (id == "procrate")
|
||||
stat = int32(item->ProcRate);
|
||||
if (id == "combateffects")
|
||||
|
||||
+2
-1
@@ -171,7 +171,7 @@ public:
|
||||
virtual void SendTextureWC(uint8 slot, uint16 texture, uint32 hero_forge_model = 0, uint32 elite_material = 0,
|
||||
uint32 unknown06 = 0, uint32 unknown18 = 0);
|
||||
virtual void SetSlotTint(uint8 material_slot, uint8 red_tint, uint8 green_tint, uint8 blue_tint);
|
||||
virtual void WearChange(uint8 material_slot, uint16 texture, uint32 color);
|
||||
virtual void WearChange(uint8 material_slot, uint16 texture, uint32 color, uint32 hero_forge_model = 0);
|
||||
void DoAnim(const int animnum, int type=0, bool ackreq = true, eqFilterType filter = FilterNone);
|
||||
void ProjectileAnimation(Mob* to, int item_id, bool IsArrow = false, float speed = 0,
|
||||
float angle = 0, float tilt = 0, float arc = 0, const char *IDFile = nullptr, SkillUseTypes skillInUse = SkillArchery);
|
||||
@@ -314,6 +314,7 @@ public:
|
||||
virtual int32 GetEquipmentMaterial(uint8 material_slot) const;
|
||||
virtual uint32 GetEquipmentColor(uint8 material_slot) const;
|
||||
virtual uint32 IsEliteMaterialItem(uint8 material_slot) const;
|
||||
virtual uint32 GetHeroForgeModel(uint8 material_slot) const;
|
||||
bool AffectedBySpellExcludingSlot(int slot, int effect);
|
||||
virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, SkillUseTypes attack_skill) = 0;
|
||||
virtual void Damage(Mob* from, int32 damage, uint16 spell_id, SkillUseTypes attack_skill,
|
||||
|
||||
+7
-3
@@ -7460,12 +7460,13 @@ XS(XS_Mob_WearChange)
|
||||
{
|
||||
dXSARGS;
|
||||
if (items < 3 || items > 4)
|
||||
Perl_croak(aTHX_ "Usage: Mob::WearChange(THIS, material_slot, texture, color)");
|
||||
Perl_croak(aTHX_ "Usage: Mob::WearChange(THIS, material_slot, texture, [color, hero_forge_model])");
|
||||
{
|
||||
Mob * THIS;
|
||||
uint8 material_slot = (uint8)SvIV(ST(1));
|
||||
uint16 texture = (uint16)SvUV(ST(2));
|
||||
uint32 color = 0;
|
||||
uint32 hero_forge_model = 0;
|
||||
|
||||
if (sv_derived_from(ST(0), "Mob")) {
|
||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||
@@ -7479,8 +7480,11 @@ XS(XS_Mob_WearChange)
|
||||
if (items > 3) {
|
||||
color = (uint32)SvUV(ST(3));
|
||||
}
|
||||
if (items > 4) {
|
||||
hero_forge_model = (uint32)SvUV(ST(3));
|
||||
}
|
||||
|
||||
THIS->WearChange(material_slot, texture, color);
|
||||
THIS->WearChange(material_slot, texture, color, hero_forge_model);
|
||||
}
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
@@ -8614,7 +8618,7 @@ XS(boot_Mob)
|
||||
newXSproto(strcpy(buf, "TarGlobal"), XS_Mob_TarGlobal, file, "$$$$$$$");
|
||||
newXSproto(strcpy(buf, "DelGlobal"), XS_Mob_DelGlobal, file, "$$");
|
||||
newXSproto(strcpy(buf, "SetSlotTint"), XS_Mob_SetSlotTint, file, "$$$$$");
|
||||
newXSproto(strcpy(buf, "WearChange"), XS_Mob_WearChange, file, "$$$;$");
|
||||
newXSproto(strcpy(buf, "WearChange"), XS_Mob_WearChange, file, "$$$;$$");
|
||||
newXSproto(strcpy(buf, "DoKnockback"), XS_Mob_DoKnockback, file, "$$$$");
|
||||
newXSproto(strcpy(buf, "RemoveNimbusEffect"), XS_Mob_RemoveNimbusEffect, file, "$$");
|
||||
newXSproto(strcpy(buf, "IsRunning"), XS_Mob_IsRunning, file, "$");
|
||||
|
||||
Reference in New Issue
Block a user