- The credit wont be decreased automatically
- The mission on train with Pam npc will not be done as expected
- The challenge wont teleport automatically
This commit is contained in:
Somebody
2024-07-12 20:24:11 +08:00
parent 640b527ac3
commit c8e586e45b
5 changed files with 99 additions and 16 deletions

View File

@@ -97,23 +97,29 @@ namespace EggLink.DanhengServer.Game.Inventory
itemData = item;
break;
case ItemMainTypeEnum.Virtual:
var actualCount = 0;
switch (itemConfig.ID)
{
case 1:
Player.Data.Hcoin += count;
actualCount = Player.Data.Hcoin;
break;
case 2:
Player.Data.Scoin += count;
actualCount = Player.Data.Scoin;
break;
case 3:
Player.Data.Mcoin += count;
actualCount = Player.Data.Mcoin;
break;
case 11:
Player.Data.Stamina += count;
actualCount = Player.Data.Stamina;
break;
case 22:
Player.Data.Exp += count;
Player.OnAddExp();
actualCount = Player.Data.Exp;
break;
case 32:
Player.Data.TalentPoints += count;
@@ -126,7 +132,7 @@ namespace EggLink.DanhengServer.Game.Inventory
itemData = new()
{
ItemId = itemId,
Count = count,
Count = actualCount,
};
}
break;
@@ -284,7 +290,7 @@ namespace EggLink.DanhengServer.Game.Inventory
}
if (sync && itemData != null)
{
Player.SendPacket(new PacketPlayerSyncScNotify(itemData));
Player.SendPacket(new PacketPlayerSyncScNotify(Player.ToProto()));
}
break;
case ItemMainTypeEnum.Equipment:
@@ -677,18 +683,31 @@ namespace EggLink.DanhengServer.Game.Inventory
avatarData.Exp = curExp;
DatabaseHelper.Instance!.UpdateInstance(Player.AvatarManager.AvatarData!);
// leftover
List<ItemData> list = [];
Dictionary<int, ItemData> list = [];
var leftover = exp;
while (leftover > 0)
{
var gain = false;
foreach (var expItem in GameData.AvatarExpItemConfigData.Values.Reverse())
foreach (var expItem in GameData.EquipmentExpItemConfigData.Values.Reverse())
{
if (leftover >= expItem.Exp)
if (leftover >= expItem.ExpProvide)
{
// add
list.Add(PutItem(expItem.ItemID, 1));
leftover -= expItem.Exp;
PutItem(expItem.ItemID, 1);
if (list.TryGetValue(expItem.ItemID, out var i))
{
i.Count++;
}
else
{
i = new ItemData()
{
ItemId = expItem.ItemID,
Count = 1
};
list[expItem.ItemID] = i;
}
leftover -= expItem.ExpProvide;
gain = true;
break;
}
@@ -698,13 +717,13 @@ namespace EggLink.DanhengServer.Game.Inventory
break; // no more item
}
}
if (list.Count > 0)
{
Player.SendPacket(new PacketPlayerSyncScNotify(list));
Player.SendPacket(new PacketPlayerSyncScNotify(list.Values.ToList()));
}
Player.SendPacket(new PacketPlayerSyncScNotify(avatarData));
return list;
return [.. list.Values];
}
#endregion
@@ -781,7 +800,7 @@ namespace EggLink.DanhengServer.Game.Inventory
itemData.Exp = curExp;
DatabaseHelper.Instance!.UpdateInstance(Data);
// leftover
List<ItemData> list = [];
Dictionary<int, ItemData> list = [];
var leftover = exp;
while (leftover > 0)
{
@@ -791,7 +810,20 @@ namespace EggLink.DanhengServer.Game.Inventory
if (leftover >= expItem.ExpProvide)
{
// add
list.Add(PutItem(expItem.ItemID, 1));
PutItem(expItem.ItemID, 1);
if (list.TryGetValue(expItem.ItemID, out var i))
{
i.Count++;
}
else
{
i = new ItemData()
{
ItemId = expItem.ItemID,
Count = 1
};
list[expItem.ItemID] = i;
}
leftover -= expItem.ExpProvide;
gain = true;
break;
@@ -802,12 +834,13 @@ namespace EggLink.DanhengServer.Game.Inventory
break; // no more item
}
}
if (list.Count > 0)
{
Player.SendPacket(new PacketPlayerSyncScNotify(list));
Player.SendPacket(new PacketPlayerSyncScNotify(list.Values.ToList()));
}
Player.SendPacket(new PacketPlayerSyncScNotify(itemData));
return list;
return [.. list.Values];
}
public Boolean promoteAvatar(int avatarId) {
@@ -835,6 +868,7 @@ namespace EggLink.DanhengServer.Game.Inventory
Player.SendPacket(new PacketPlayerSyncScNotify(avatarData));
return true;
}
public bool PromoteEquipment(int equipmentUniqueId)
{
var equipmentData = Player.InventoryManager!.Data.EquipmentItems.FirstOrDefault(x => x.UniqueId == equipmentUniqueId);
@@ -859,6 +893,7 @@ namespace EggLink.DanhengServer.Game.Inventory
return true;
}
public List<ItemData> LevelUpRelic(int uniqueId, ItemCostData costData)
{
var relicItem = Data.RelicItems.Find(x => x.UniqueId == uniqueId);
@@ -984,11 +1019,11 @@ namespace EggLink.DanhengServer.Game.Inventory
break; // no more item
}
}
if (list.Count > 0)
{
Player.SendPacket(new PacketPlayerSyncScNotify(list.Values.ToList()));
}
DatabaseHelper.Instance!.UpdateInstance(Data);
// sync
Player.SendPacket(new PacketPlayerSyncScNotify(relicItem));

View File

@@ -216,10 +216,17 @@ namespace EggLink.DanhengServer.Game.Scene
{
return null;
}
if (group.Id == 117)
{
GameData.GetAvatarExpRequired(0, 0);
}
if (!GameData.NpcDataData.ContainsKey(info.NPCID))
{
return null;
}
bool hasDuplicateNpcId = false;
foreach (IGameEntity entity in Scene.Entities.Values)
{
@@ -229,10 +236,12 @@ namespace EggLink.DanhengServer.Game.Scene
break;
}
}
if (hasDuplicateNpcId)
{
return null;
//return null;
}
EntityNpc npc = new(Scene, group, info);
Scene.AddEntity(npc, sendPacket);

View File

@@ -0,0 +1,19 @@
using EggLink.DanhengServer.Server;
using EggLink.DanhengServer.Server.Packet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Mission
{
[Opcode(CmdIds.GetFirstTalkNpcCsReq)]
public class HandlerGetFirstTalkNpcCsReq : Handler
{
public override void OnHandle(Connection connection, byte[] header, byte[] data)
{
connection.SendPacket(CmdIds.GetFirstTalkNpcScRsp);
}
}
}

View File

@@ -0,0 +1,19 @@
using EggLink.DanhengServer.Server;
using EggLink.DanhengServer.Server.Packet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Mission
{
[Opcode(CmdIds.GetRndOptionCsReq)]
public class HandlerGetRndOptionCsReq : Handler
{
public override void OnHandle(Connection connection, byte[] header, byte[] data)
{
connection.SendPacket(CmdIds.GetRndOptionScRsp);
}
}
}

View File

@@ -19,6 +19,7 @@ namespace EggLink.DanhengServer.Server.Packet.Send.Challenge
{
StartChallengeScRsp proto = new()
{
Scene = player.SceneInstance!.ToProto()
};
if (player.ChallengeManager!.ChallengeInstance != null)