123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- using CommonAI.Zone;
- using CommonAI.Zone.Instance;
- using CommonLang.Vector;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using XmdsCommon.Message;
- namespace XmdsCommonServer.Plugin.Units
- {
- public class XmdsDropableInstanceItem : InstanceItem
- {
- public XmdsDropableInstanceItem(InstanceZone zone,
- ItemTemplate item,
- string name,
- int force,
- InstanceUnit creater,
- string disPlayName)
- : base(zone, item, name, force, creater, disPlayName,0)
- {
-
- }
- public override bool IsPickable(InstanceUnit unit)
- {
- if (base.IsPickable(unit))
- {
-
- XmdsCommon.Message.DropItem di = GenSyncItemInfo(false, unit.PlayerUUID).ExtData as XmdsCommon.Message.DropItem;
- if (di == null)
- {
- return true;
- }
-
-
- if (this.PassTimeMS < di.FreezeTime)
- {
- return false;
- }
-
- if (unit is XmdsInstancePlayer)
- {
- var player = unit as XmdsInstancePlayer;
- var playerVirtual = player.Virtual as XmdsVirtual;
-
-
-
- if (di.Mode == 1 && !player.CanPickDropableItem)
- {
- return false;
- }
- if (di.Mode == 2 && playerVirtual.GetTeamInventorySize() < 1)
- {
- playerVirtual.SendMsgToClient("noSpace");
- return false;
- }
- bool is_owner = false;
- if (di.PlayerUUID != null)
- {
- for (int i = 0; i < di.PlayerUUID.Count; i++)
- {
- if (player.PlayerUUID == di.PlayerUUID[i])
- {
- is_owner = true;
- break;
- }
- }
- }
-
- if(di.bindPlayerId != null && di.bindPlayerId == player.PlayerUUID)
- {
- is_owner = true;
- }
- if (is_owner)
- {
- return true;
- }
- else
- {
- if (this.PassTimeMS >= di.ProtectTime)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- }
- return false;
- }
- public override string GetBindPlayerId()
- {
- if(base.mSyncInfo.ExtData != null)
- {
- var dropItem = base.mSyncInfo.ExtData as XmdsCommon.Message.DropItem;
- if(dropItem != null)
- {
- return dropItem.bindPlayerId;
- }
- }
- return null;
- }
- protected override void onUpdate(bool slowRefresh)
- {
-
-
- if(this.Info.TemplateID != 998)
- {
- base.onUpdate(slowRefresh);
- return;
- }
- if (IsPaused) { return; }
- if (mRemovedExpire!= null && mRemovedExpire.Update(Parent.UpdateIntervalMS))
- {
- Parent.RemoveObject(this);
- }
- if (mViewTriggerTimer != null && mViewTriggerTimer.Update(Parent.UpdateIntervalMS))
- {
-
-
- float min_len = float.MaxValue;
- InstanceUnit min = null;
- Parent.ForEachNearObjects(X, Y, this.mData.BodySize, (InstanceUnit u, ref bool cancel) =>
- {
- if (u.IsPlayer && u is XmdsInstancePlayer &&!u.IsDead())
- {
- var player = u as XmdsInstancePlayer;
- var playerVirtual = player.Virtual as XmdsVirtual;
- float len = MathVector.getDistance(u.X, u.Y, this.X, this.Y) - playerVirtual.MirrorProp.pickupRange;
- if (min_len > len && len < this.mData.BodySize)
- {
- min_len = len;
- min = u;
- }
- }
-
- });
- if (min != null)
- {
- this.DirectPickItem(min,() => {
- RemoveDropItemB2C rd = new RemoveDropItemB2C(this.ID, min.ID);
- min.queueEvent(rd);
- });
- }
- }
- }
- }
- }
|