### 1. 修改 Protocol.h 中奖励经验包结构
**文件:**
\Source\4.GameServer_UP15\GameServer\Protocol.h`
#### 1.1 删除原结构体代码
```cpp
struct PMSG_REWARD_EXPERIENCE_SEND
{
PBMSG_HEAD header; // C1:9C
BYTE index[2];
WORD experience[2];
BYTE damage[2];
#if(GAMESERVER_EXTRA==1)
DWORD ViewDamageHP;
#endif
};
```
#### 1.2 粘贴新结构体代码
```cpp
struct PMSG_REWARD_EXPERIENCE_SEND
{
PBMSG_HEAD header; // C1:9C
BYTE ExperienceType;
DWORD AddedExperience;
DWORD DamageOfLastHit;
WORD KilledObjectId;
WORD KillerObjectId;
#if(GAMESERVER_EXTRA==1)
DWORD ViewDamageHP;
#endif
};
```
---
### 2. 修改 Protocol.cpp 中 GCMonsterDieSend
**文件:**
\Source\4.GameServer_UP15\GameServer\Protocol.cpp`
#### 2.1 删除原 GCMonsterDieSend 函数
```cpp
void GCMonsterDieSend(int aIndex, int bIndex, int experience, int damage, BYTE flag) // OK
{
PMSG_REWARD_EXPERIENCE_SEND pMsg;
pMsg.header.setE(0x9C, sizeof(pMsg));
pMsg.index[0] = SET_NUMBERHB(bIndex) | (flag * 0x80);
pMsg.index[1] = SET_NUMBERLB(bIndex);
pMsg.experience[0] = SET_NUMBERHW(experience);
pMsg.experience[1] = SET_NUMBERLW(experience);
pMsg.damage[0] = SET_NUMBERHB(GET_MAX_WORD_VALUE(damage));
pMsg.damage[1] = SET_NUMBERLB(GET_MAX_WORD_VALUE(damage));
#if(GAMESERVER_EXTRA==1)
pMsg.ViewDamageHP = damage;
#endif
DataSend(aIndex, (BYTE*)&pMsg, pMsg.header.size);
}
```
#### 2.2 粘贴新 GCMonsterDieSend 函数
```cpp
void GCMonsterDieSend(int aIndex, int bIndex, int experience, int damage, BYTE flag) // OK
{
PMSG_REWARD_EXPERIENCE_SEND pMsg;
pMsg.header.setE(0x9C, sizeof(pMsg));
pMsg.ExperienceType = (gMasterSkillTree.CheckMasterLevel(&gObj[aIndex]) != 0) ? 2 : 1;
pMsg.AddedExperience = experience;
pMsg.DamageOfLastHit = damage;
pMsg.KilledObjectId = bIndex;
pMsg.KillerObjectId = aIndex;
#if(GAMESERVER_EXTRA==1)
pMsg.ViewDamageHP = damage;
#endif
DataSend(aIndex, (BYTE*)&pMsg, pMsg.header.size);
}
```
---
### 3. 修改 Protocol.cpp 中 GCRewardExperienceSend
**文件:**
\Source\4.GameServer_UP15\GameServer\Protocol.cpp
#### 3.1 删除原 GCRewardExperienceSend 函数
```cpp
void GCRewardExperienceSend(int aIndex, int experience) // OK
{
PMSG_REWARD_EXPERIENCE_SEND pMsg;
pMsg.header.setE(0x9C, sizeof(pMsg));
pMsg.index[0] = 0xFF;
pMsg.index[1] = 0xFF;
pMsg.experience[0] = SET_NUMBERHW(experience);
pMsg.experience[1] = SET_NUMBERLW(experience);
pMsg.damage[0] = 0;
pMsg.damage[1] = 0;
#if(GAMESERVER_EXTRA==1)
pMsg.ViewDamageHP = 0;
#endif
DataSend(aIndex, (BYTE*)&pMsg, pMsg.header.size);
}
```
#### 3.2 粘贴新 GCRewardExperienceSend 函数
```cpp
void GCRewardExperienceSend(int aIndex, int experience) // OK
{
PMSG_REWARD_EXPERIENCE_SEND pMsg;
pMsg.header.setE(0x9C, sizeof(pMsg));
pMsg.ExperienceType = (gMasterSkillTree.CheckMasterLevel(&gObj[aIndex]) != 0) ? 2 : 1;
pMsg.AddedExperience = experience;
pMsg.DamageOfLastHit = 0;
pMsg.KilledObjectId = 0;
pMsg.KillerObjectId = 0;
#if(GAMESERVER_EXTRA==1)
pMsg.ViewDamageHP = 0;
#endif
DataSend(aIndex, (BYTE*)&pMsg, pMsg.header.size);
}
```