|
@@ -1417,31 +1417,62 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
internal void cb_unitDeadCallBack(InstanceUnit obj, InstanceUnit attacker)
|
|
|
{
|
|
|
- statisticForceDead(obj);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (obj.mProcessDeadCallbackTime > CommonLang.CUtils.localTimeMS)
|
|
|
+ {
|
|
|
+ log.Warn("cb_unitDeadCallBack 跳过:" + obj.mProcessDeadCallbackTime + ", " + obj.Parent.GetSceneID() + ", ID:" + obj.Info.ID + ", " + obj.PlayerUUID);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- LastHittedUnit = obj;
|
|
|
- LastKilledUnit = obj;
|
|
|
+ if (obj.IsMonster && obj.Virtual.GetMaType() >= 4 && obj.Level >= 80)
|
|
|
+ {
|
|
|
+ log.Info("boss死亡:" + obj.Parent.GetSceneID() + ", 单位id=" + obj.Info.ID + ", 处理死亡时间:" + obj.mProcessDeadCallbackTime
|
|
|
+ + ", SceneUID: " + obj.mZone.UUID + ", " + (attacker == null ? "null" : attacker.PlayerUUID));
|
|
|
|
|
|
- //if (attacker == null)
|
|
|
- // attacker = obj;
|
|
|
- LastAttackUnit = attacker;
|
|
|
+ if (attacker.IsPlayerUnit)
|
|
|
+ {
|
|
|
+ JSGHackerModule.OnPlayerKillMonster(attacker, obj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (obj.mProcessDeadCallbackTime > 0)
|
|
|
+ {
|
|
|
+ log.Warn("单位多次回调死亡逻辑:" + this.GetSceneID() + ", " + this.UUID + ", " + obj.Info.ID + ", attackID:" +
|
|
|
+ (attacker == null ? -1 : attacker.Info.ID) + ", UUID" + (attacker == null ? "null" : attacker.PlayerUUID) + ", " + CommonLang.TimeUtil.GetTimestampMS());
|
|
|
+ }
|
|
|
+ obj.mProcessDeadCallbackTime = CommonLang.CUtils.localTimeMS + 1000;
|
|
|
+ obj.mDeadTime = CommonLang.CUtils.localTimeMS;
|
|
|
|
|
|
- obj.doDead(attacker);
|
|
|
+ statisticForceDead(obj);
|
|
|
+ LastHittedUnit = obj;
|
|
|
+ LastKilledUnit = obj;
|
|
|
|
|
|
- if(attacker != null)
|
|
|
- {
|
|
|
- obj.deadDropItems(attacker.Force);
|
|
|
- attacker.CurrentMoney += obj.Info.DropMoney;
|
|
|
- }
|
|
|
+ //if (attacker == null)
|
|
|
+ // attacker = obj;
|
|
|
+ LastAttackUnit = attacker;
|
|
|
+ obj.doDead(attacker);
|
|
|
|
|
|
- mFormula.OnUnitDead(obj, attacker);
|
|
|
+ if (attacker != null)
|
|
|
+ {
|
|
|
+ obj.deadDropItems(attacker.Force);
|
|
|
+ attacker.CurrentMoney += obj.Info.DropMoney;
|
|
|
+ }
|
|
|
|
|
|
- obj.callback_onDead(this, attacker);
|
|
|
- if (mOnUnitDead != null)
|
|
|
- mOnUnitDead.Invoke(this, obj, attacker);
|
|
|
+ mFormula.OnUnitDead(obj, attacker);
|
|
|
|
|
|
- obj.mProcessDeadCallbackTime = CommonLang.CUtils.localTimeMS + 1000;
|
|
|
+ obj.callback_onDead(this, attacker);
|
|
|
+ if (mOnUnitDead != null)
|
|
|
+ {
|
|
|
+ mOnUnitDead.Invoke(this, obj, attacker);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(Exception e)
|
|
|
+ {
|
|
|
+ log.Error("cb_unitDeadCallBackcatch: " + this.GetSceneID() + ", " + (obj == null ? -1 : obj.Info.ID) + ", " + (attacker == null ? -1 : attacker.Info.ID)
|
|
|
+ + ",UUID: " + (obj == null ? "null" : obj.PlayerUUID) + ", " + (attacker == null ? "null" : attacker.PlayerUUID) + ", e: " + e);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
internal void cb_unitActivatedCallBack(InstanceUnit obj)
|
|
|
{
|
|
|
nearChange(obj);
|