1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-20 11:47:48 +00:00

Inv/Equip load on first character fixed.

This commit is contained in:
Filip Maj 2019-06-04 00:41:02 -04:00
parent 69d4b19979
commit ecf07317fc
3 changed files with 32 additions and 33 deletions

View file

@ -129,11 +129,8 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
return AddItem(itemId, quantity, 1); return AddItem(itemId, quantity, 1);
} }
public int AddItems(uint[] itemIds, uint[] quantity, byte[] quality) public int AddItems(uint[] itemIds, uint[] quantity = null, byte[] quality = null)
{ {
if (itemIds.Length != quantity.Length && itemIds.Length != quality.Length)
return ERROR_SYSTEM;
//Check if has space //Check if has space
if (!CanAdd(itemIds, quantity, quality)) if (!CanAdd(itemIds, quantity, quality))
return ERROR_FULL; return ERROR_FULL;
@ -153,14 +150,17 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
} }
//Check if item id exists //Check if item id exists
int quantityCount = (int) quantity[i]; uint setQuantity = quantity != null ? quantity[i] : 1;
int quantityCount = (int)setQuantity;
for (int j = 0; j < endOfListIndex; j++) for (int j = 0; j < endOfListIndex; j++)
{ {
InventoryItem item = list[j]; InventoryItem item = list[j];
Debug.Assert(item != null, "Item slot was null!!!"); Debug.Assert(item != null, "Item slot was null!!!");
if (item.itemId == itemIds[i] && item.quality == quantity[i] && item.quantity < gItem.maxStack) byte setQuality = quality != null ? quality[i] : (byte)1;
if (item.itemId == itemIds[i] && item.quality == setQuality && item.quantity < gItem.maxStack)
{ {
int oldQuantity = item.quantity; int oldQuantity = item.quantity;
item.quantity = Math.Min(item.quantity + quantityCount, gItem.maxStack); item.quantity = Math.Min(item.quantity + quantityCount, gItem.maxStack);
@ -184,7 +184,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
modifiers.durability = (uint)gItem.durability; modifiers.durability = (uint)gItem.durability;
} }
InventoryItem addedItem = Database.CreateItem(itemIds[i], Math.Min(quantityCount, gItem.maxStack), quality[i], modifiers); byte setQuality = quality != null ? quality[i] : (byte)1;
InventoryItem addedItem = Database.CreateItem(itemIds[i], Math.Min(quantityCount, gItem.maxStack), setQuality, modifiers);
addedItem.RefreshPositioning(owner, itemPackageCode, (ushort)endOfListIndex); addedItem.RefreshPositioning(owner, itemPackageCode, (ushort)endOfListIndex);
isDirty[endOfListIndex] = true; isDirty[endOfListIndex] = true;
list[endOfListIndex++] = addedItem; list[endOfListIndex++] = addedItem;
@ -206,23 +208,20 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
public bool CanAdd(uint[] itemIds, uint[] quantity, byte[] quality) public bool CanAdd(uint[] itemIds, uint[] quantity, byte[] quality)
{ {
if (itemIds.Length != quantity.Length && itemIds.Length != quality.Length)
return false;
int tempInvSize = GetCount(); int tempInvSize = GetCount();
for (int i = 0; i < itemIds.Length; i++) for (int i = 0; i < itemIds.Length; i++)
{ {
ItemData gItem = Server.GetItemGamedata(itemIds[i]); ItemData gItem = Server.GetItemGamedata(itemIds[i]);
//Check if item id exists and fill up til maxstack //Check if item id exists and fill up til maxstack
int quantityCount = (int) quantity[i]; int quantityCount = (int) (quantity != null ? quantity[i] : 1);
for (int j = 0; j < endOfListIndex; j++) for (int j = 0; j < endOfListIndex; j++)
{ {
InventoryItem item = list[j]; InventoryItem item = list[j];
Debug.Assert(item != null, "Item slot was null!!!"); Debug.Assert(item != null, "Item slot was null!!!");
if (item.itemId == itemIds[i] && item.quality == quality[i] && item.quantity < gItem.maxStack) if (item.itemId == itemIds[i] && item.quality == (quality != null ? quality[i] : 1) && item.quantity < gItem.maxStack)
{ {
quantityCount -= (gItem.maxStack - item.quantity); quantityCount -= (gItem.maxStack - item.quantity);
if (quantityCount <= 0) if (quantityCount <= 0)

View file

@ -41,19 +41,19 @@ namespace FFXIVClassic_Map_Server.actors.chara
toSet.CopyTo(referenceList, 0); toSet.CopyTo(referenceList, 0);
} }
public void SetList(ushort[] positions, InventoryItem[] values) public void Set(ushort[] positions, ushort[] itemSlots, ushort itemPackage)
{ {
Debug.Assert(positions.Length == values.Length); Debug.Assert(positions.Length == itemSlots.Length);
for (int i = 0; i < positions.Length; i++) for (int i = 0; i < positions.Length; i++)
{ {
InventoryItem item = values[i]; InventoryItem item = owner.GetItemPackage(itemPackage)?.GetItemAtSlot(itemSlots[i]);
if (item == null) if (item == null)
continue; continue;
//Database.EquipItem(owner, positions[i], item.uniqueId); Database.EquipItem(owner, positions[i], item.uniqueId);
referenceList[positions[i]] = values[i]; referenceList[positions[i]] = item;
} }
owner.QueuePacket(InventoryBeginChangePacket.BuildPacket(owner.actorId)); owner.QueuePacket(InventoryBeginChangePacket.BuildPacket(owner.actorId));

View file

@ -82,27 +82,27 @@ function initClassItems(player)
--DoW --DoW
if (player.charaWork.parameterSave.state_mainSkill[0] == 2) then --PUG if (player.charaWork.parameterSave.state_mainSkill[0] == 2) then --PUG
player:GetItemPackage(0):AddItem({4020001, 8030701, 8050728, 8080601, 8090307}); player:GetItemPackage(0):AddItems({4020001, 8030701, 8050728, 8080601, 8090307});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); player:GetEquipment():Set({0, 10, 12, 14, 15},{0, 1, 2, 3, 4},0);
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 3) then --GLA elseif (player.charaWork.parameterSave.state_mainSkill[0] == 3) then --GLA
player:GetItemPackage(0):AddItem({4030010, 8031120, 8050245, 8080601, 8090307}); player:GetItemPackage(0):AddItems({4030010, 8031120, 8050245, 8080601, 8090307});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); player:GetEquipment():Set({0, 10, 12, 14, 15},{0, 1, 2, 3, 4},0);
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 4) then --MRD elseif (player.charaWork.parameterSave.state_mainSkill[0] == 4) then --MRD
player:GetItemPackage(0):AddItem({4040001, 8011001, 8050621, 8070346, 8090307}); player:GetItemPackage(0):AddItems({4040001, 8011001, 8050621, 8070346, 8090307});
player:GetEquipment():SetEquipment({0, 8, 12, 13, 15},{0, 1, 2, 3, 4}); player:GetEquipment():Set({0, 8, 12, 13, 15},{0, 1, 2, 3, 4},0);
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 7) then --ARC elseif (player.charaWork.parameterSave.state_mainSkill[0] == 7) then --ARC
player:GetItemPackage(0):AddItem({4070001, 8030601, 8050622, 8080601, 8090307}); player:GetItemPackage(0):AddItems({4070001, 8030601, 8050622, 8080601, 8090307});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); player:GetEquipment():Set({0, 10, 12, 14, 15},{0, 1, 2, 3, 4},0);
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 8) then --LNC elseif (player.charaWork.parameterSave.state_mainSkill[0] == 8) then --LNC
player:GetItemPackage(0):AddItem({4080201, 8030801, 8051015, 8080501, 8090307}); player:GetItemPackage(0):AddItems({4080201, 8030801, 8051015, 8080501, 8090307});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); player:GetEquipment():Set({0, 10, 12, 14, 15},{0, 1, 2, 3, 4},0);
--DoM --DoM
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 22) then --THM elseif (player.charaWork.parameterSave.state_mainSkill[0] == 22) then --THM
player:GetItemPackage(0):AddItem({5020001, 8030245, 8050346, 8080346, 8090208}); player:GetItemPackage(0):AddItems({5020001, 8030245, 8050346, 8080346, 8090208});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); player:GetEquipment():Set({0, 10, 12, 14, 15},{0, 1, 2, 3, 4},0);
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 23) then --CNJ elseif (player.charaWork.parameterSave.state_mainSkill[0] == 23) then --CNJ
player:GetItemPackage(0):AddItem({5030101, 8030445, 8050031, 8080246, 8090208}); player:GetItemPackage(0):AddItems({5030101, 8030445, 8050031, 8080246, 8090208});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); player:GetEquipment():Set({0, 10, 12, 14, 15},{0, 1, 2, 3, 4},0);
--DoH --DoH
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 29) then -- elseif (player.charaWork.parameterSave.state_mainSkill[0] == 29) then --
@ -171,6 +171,6 @@ function initRaceItems(player)
player:GetItemPackage(0):AddItem(8060015); player:GetItemPackage(0):AddItem(8060015);
end end
player:GetEquipment():SetEquipment({9, 11},{5,6}); player:GetEquipment():Set({9,11},{5,6}, 0);
end end