Пример #1
0
        public void OnDeath(ShPlayer player)
        {
            if (player.svPlayer.lastAttacker && player.svPlayer.lastAttacker != player)
            {
                player.svPlayer.lastAttacker.job.OnKillPlayer(player);

                // Only drop items if attacker present, to prevent AI suicide item farming
                if (Physics.Raycast(
                        player.GetPosition + Vector3.up,
                        Vector3.down,
                        out RaycastHit hit,
                        10f,
                        MaskIndex.world))
                {
                    ShEntity briefcase = player.manager.svManager.AddNewEntity(
                        player.manager.svManager.briefcasePrefabs.GetRandom(),
                        player.GetPlace,
                        hit.point,
                        Quaternion.LookRotation(player.GetPositionT.forward, Vector3.up),
                        false);

                    if (briefcase)
                    {
                        foreach (KeyValuePair <int, InventoryItem> pair in player.myItems)
                        {
                            if (Random.value < 0.8f)
                            {
                                InventoryItem i = new InventoryItem(
                                    pair.Value.item,
                                    Mathf.CeilToInt(pair.Value.count * Random.Range(0.05f, 0.3f)));
                                briefcase.myItems.Add(pair.Key, i);
                            }
                        }
                    }
                }
            }

            player.RemoveItemsDeath();

            player.svPlayer.ClearWitnessed();

            if (!player.isHuman)
            {
                player.svPlayer.SetState(StateIndex.Null);
            }

            player.svPlayer.Send(SvSendType.Self, Channel.Reliable, ClPacket.ShowTimer, player.svPlayer.RespawnTime);

            player.SetStance(StanceIndex.Dead, true);
        }
Пример #2
0
        public override void OnDestroyEntity(ShEntity entity)
        {
            base.OnDestroyEntity(entity);
            if (entity is ShPlayer victim && bounties.ContainsKey(victim.username))
            {
                player.svPlayer.Reward(3, 1000);
                bounties.Remove(victim.username);
                ChatHandler.SendToAll($"{player.username} assassinated {victim.username}");

                if (victim == aiTarget)
                {
                    aiTarget = null;
                }
            }
        }
Пример #3
0
 public static bool SvAddCrime(SvPlayer player, ref byte crimeIndex, ref ShEntity victim)
 {
     try
     {
         if (GodModeLevel >= 1 && CheckGodMode.Run(player, null, "<color=#b7b5b5>Blocked crime and losing EXP!</color>"))
         {
             return(true);
         }
     }
     catch (Exception ex)
     {
         ErrorLogging.Run(ex);
     }
     return(false);
 }
Пример #4
0
 override protected bool ValidTarget(ShEntity target)
 {
     if (target is ShPlayer p)
     {
         if (destinationMarker)
         {
             return(base.ValidTarget(target) && ValidPlayer(p) && p.curMount && p.curMount == player.curMount);
         }
         else
         {
             return(base.ValidTarget(target) && ValidPlayer(p) && !p.curMount);
         }
     }
     return(false);
 }
Пример #5
0
 public override void OnDamageEntity(ShEntity damaged)
 {
     if (damaged is ShPlayer victim && victim.wantedLevel == 0)
     {
         if (victim.characterType == CharacterType.Mob)
         {
             player.svPlayer.SvAddCrime(CrimeIndex.AnimalCruelty, victim);
         }
         else if (player.curEquipable is ShGun)
         {
             player.svPlayer.SvAddCrime(CrimeIndex.ArmedAssault, victim);
         }
         else
         {
             player.svPlayer.SvAddCrime(CrimeIndex.Assault, victim);
         }
     }
Пример #6
0
        public override void OnDestroyEntity(ShEntity entity)
        {
            base.OnDestroyEntity(entity);

            if (entity is ShPlayer victim)
            {
                if (!svManager.gangWar)
                {
                    if (player.isHuman && victim.svPlayer.job is Gangster && this != victim.svPlayer.job)
                    {
                        ShTerritory t;
                        if (gangstersKilled >= 1 && (t = player.svPlayer.GetTerritory) && t.ownerIndex != info.shared.jobIndex)
                        {
                            t.svTerritory.StartGangWar(info.shared.jobIndex);
                            gangstersKilled = 0;
                        }
                        else
                        {
                            gangstersKilled++;
                        }

                        player.svPlayer.Reward(2, 50);
                    }
                }
                else if (victim.svPlayer.job is Gangster)
                {
                    ShTerritory t = player.svPlayer.GetTerritory;
                    if (t && t.attackerIndex != Util.InvalidByte)
                    {
                        if (victim.svPlayer.job.info.shared.jobIndex == t.ownerIndex)
                        {
                            t.svTerritory.defendersKilled++;
                            t.svTerritory.SendTerritoryStats();
                            player.svPlayer.Reward(3, 100);
                        }
                        else if (victim.svPlayer.job.info.shared.jobIndex == t.attackerIndex)
                        {
                            t.svTerritory.attackersKilled++;
                            t.svTerritory.SendTerritoryStats();
                            player.svPlayer.Reward(3, 100);
                        }
                    }
                }
            }
        }
Пример #7
0
        override public void ResetTarget()
        {
            if (targetPlayer)
            {
                targetPlayer.svPlayer.SvDismount();
                targetPlayer.svPlayer.ResetAI();
            }

            if (destinationMarker)
            {
                destinationMarker.Destroy();
                destinationMarker = null;

                player.svPlayer.Send(SvSendType.Self, Channel.Reliable, ClPacket.DestroyTimer);
            }

            base.ResetTarget();
        }
Пример #8
0
        public void ButtonPush(ShEntity target, ShPlayer caller)
        {
            if (voidRunning)
            {
                caller.svPlayer.SendGameMessage("Do not challenge the void");
                return;
            }

            const int cost = 500;

            if (caller.MyMoneyCount < cost)
            {
                caller.svPlayer.SendGameMessage("Not enough cash");
                return;
            }

            caller.TransferMoney(DeltaInv.RemoveFromMe, cost);

            target.StartCoroutine(EnterTheVoid(target.svEntity.svManager));
        }
Пример #9
0
        protected bool SetTarget()
        {
            ResetTarget();

            GetEntityCallback handler = GetTargetHandler();

            for (int i = 0; i < 20; i++)
            {
                ShEntity e = handler();

                if (ValidTarget(e))
                {
                    target = e;
                    FoundTarget();
                    return(true);
                }
            }

            return(false);
        }
Пример #10
0
        public override void OnSpecialAction(ShEntity target, string actionID)
        {
            if (!target || target.IsDead || !player.InActionRange(target))
            {
                return;
            }

            if (targetPlayer != target)
            {
                player.svPlayer.SendGameMessage("Wrong target");
                return;
            }

            player.svPlayer.Reward(2, Mathf.CeilToInt(timeDeadline - Time.time));

            target.TransferItem(DeltaInv.AddToMe, deliveryItem);

            player.svPlayer.SendGameMessage("Successfully Delivered " + deliveryItem.itemName + " to " + targetPlayer.username);

            targetPlayer.svPlayer.SendGameMessage("Received delivery from " + player.username);

            ResetTarget();
        }
Пример #11
0
 public void RequestHeal(ShEntity target, ShPlayer player) => ((target as ShPlayer)?.svPlayer.job as Paramedic)?.RequestHeal(player);
Пример #12
0
 public void DeliverItem(ShEntity target, ShPlayer player) => (player.svPlayer.job as DeliveryMan)?.DeliverItemAction(target);
Пример #13
0
 public void RequestItem(ShEntity target, ShPlayer player) => ((target as ShPlayer)?.svPlayer.job as Mayor)?.RequestItemAction(player);
Пример #14
0
        public void OnRemoveItemsDeath(ShPlayer player, bool dropItems)
        {
            List <InventoryItem> removedItems = new List <InventoryItem>();

            // Allows players to keep items/rewards from job ranks
            foreach (InventoryItem myItem in player.myItems.Values.ToArray())
            {
                int extra = myItem.count;

                if (player.svPlayer.job.info.upgrades.Length > player.rank)
                {
                    for (int rankIndex = player.rank; rankIndex >= 0; rankIndex--)
                    {
                        foreach (InventoryStruct i in player.svPlayer.job.info.upgrades[rankIndex].items)
                        {
                            if (myItem.item.name == i.itemName)
                            {
                                extra = Mathf.Max(0, myItem.count - i.count);
                            }
                        }
                    }
                }

                // Remove everything except legal items currently worn
                if (extra > 0 && (myItem.item.illegal || !(myItem.item is ShWearable w) || player.curWearables[(int)w.type].index != w.index))
                {
                    removedItems.Add(new InventoryItem(myItem.item, extra));
                    player.TransferItem(DeltaInv.RemoveFromMe, myItem.item.index, extra, true);
                }
            }

            if (dropItems && removedItems.Count > 0)
            {
                // Only drop items if attacker present, to prevent AI suicide item farming
                if (Physics.Raycast(
                        player.GetPosition + Vector3.up,
                        Vector3.down,
                        out RaycastHit hit,
                        10f,
                        MaskIndex.world))
                {
                    ShEntity briefcase = player.manager.svManager.AddNewEntity(
                        player.manager.svManager.briefcasePrefabs.GetRandom(),
                        player.GetPlace,
                        hit.point,
                        Quaternion.LookRotation(player.GetPositionT.forward, hit.normal),
                        false);

                    if (briefcase)
                    {
                        foreach (var invItem in removedItems)
                        {
                            if (Random.value < 0.8f)
                            {
                                invItem.count = Mathf.CeilToInt(invItem.count * Random.Range(0.05f, 0.3f));
                                briefcase.myItems.Add(invItem.item.index, invItem);
                            }
                        }
                    }
                }
            }
        }
Пример #15
0
 protected override bool ValidTarget(ShEntity target) => base.ValidTarget(target) && (target is ShPlayer p) && !p.curMount && !(p.svPlayer.job is Prisoner);
Пример #16
0
 protected override bool ValidTarget(ShEntity target)
 {
     return(base.ValidTarget(target) && (target as ShPlayer).wantedLevel >= info.attackLevel);
 }
Пример #17
0
 public virtual void ResetTarget()
 {
     player.svPlayer.DestroyGoalMarker();
     target = null;
 }
Пример #18
0
 protected virtual bool ValidTarget(ShEntity target) => target && target != player && target.isActiveAndEnabled && !target.IsDead;
Пример #19
0
 public MinigameContainer(ShPlayer player, int entityID)
 {
     this.player  = player;
     targetEntity = EntityCollections.FindByID(entityID);
 }
Пример #20
0
 public override void OnHealEntity(ShEntity entity)
 {
     player.svPlayer.Reward(2, 100);
 }
Пример #21
0
 protected override bool ValidTarget(ShEntity target)
 {
     return(base.ValidTarget(target) && (target as ShPlayer).IsKnockedOut);
 }