Пример #1
0
        public static void RegistryFragInfos(Room room,SLOT killer,out int score,bool isBotMode,bool isSuicide,FragInfos kills)
        {
            score = 0;
            ITEM_CLASS idStatics = (ITEM_CLASS)ComDiv.getIdStatics(kills.weapon,1);

            for (int index = 0; index < kills.frags.Count; ++index)
            {
                Frag       frag       = kills.frags[index];
                CharaDeath charaDeath = (CharaDeath)((int)frag.hitspotInfo >> 4);
                if ((int)kills.killsCount - (isSuicide ? 1 : 0) > 1)
                {
                    frag.killFlag |= charaDeath == CharaDeath.BOOM || charaDeath == CharaDeath.OBJECT_EXPLOSION || (charaDeath == CharaDeath.POISON || charaDeath == CharaDeath.HOWL) || (charaDeath == CharaDeath.TRAMPLED || idStatics == ITEM_CLASS.SHOTGUN) ? KillingMessage.MassKill : KillingMessage.PiercingShot;
                }
                else
                {
                    int num1 = 0;
                    switch (charaDeath)
                    {
                    case CharaDeath.DEFAULT:
                        if (idStatics == ITEM_CLASS.KNIFE)
                        {
                            num1 = 6;
                            break;
                        }
                        break;

                    case CharaDeath.HEADSHOT:
                        num1 = 4;
                        break;
                    }
                    if (num1 > 0)
                    {
                        int num2 = killer.lastKillState >> 12;
                        switch (num1)
                        {
                        case 4:
                            if (num2 != 4)
                            {
                                killer.repeatLastState = false;
                            }
                            killer.lastKillState = num1 << 12 | killer.killsOnLife + 1;
                            if (killer.repeatLastState)
                            {
                                frag.killFlag |= (killer.lastKillState & 16383) <= 1 ? KillingMessage.Headshot : KillingMessage.ChainHeadshot;
                                break;
                            }
                            frag.killFlag         |= KillingMessage.Headshot;
                            killer.repeatLastState = true;
                            break;

                        case 6:
                            if (num2 != 6)
                            {
                                killer.repeatLastState = false;
                            }
                            killer.lastKillState = num1 << 12 | killer.killsOnLife + 1;
                            if (killer.repeatLastState && (killer.lastKillState & 16383) > 1)
                            {
                                frag.killFlag |= KillingMessage.ChainSlugger;
                                break;
                            }
                            killer.repeatLastState = true;
                            break;
                        }
                    }
                    else
                    {
                        killer.lastKillState   = 0;
                        killer.repeatLastState = false;
                    }
                }
                int  victimSlot = frag.VictimSlot;
                SLOT slot       = room._slots[victimSlot];
                if (slot.killsOnLife > 3)
                {
                    frag.killFlag |= KillingMessage.ChainStopper;
                }
                if ((kills.weapon != 19016 && kills.weapon != 19022 || (int)kills.killerIdx != victimSlot) && !slot.specGM)
                {
                    ++slot.allDeaths;
                }
                if (killer._team != slot._team)
                {
                    score += AllUtils.getKillScore(frag.killFlag);
                    ++killer.allKills;
                    if (killer._deathState == DeadEnum.isAlive)
                    {
                        ++killer.killsOnLife;
                    }
                    if (slot._team == 0)
                    {
                        ++room._redDeaths;
                        ++room._blueKills;
                    }
                    else
                    {
                        ++room._blueDeaths;
                        ++room._redKills;
                    }
                    if (room.room_type == (byte)7)
                    {
                        if (killer._team == 0)
                        {
                            room.red_dino += 4;
                        }
                        else
                        {
                            room.blue_dino += 4;
                        }
                    }
                }
                slot.lastKillState   = 0;
                slot.killsOnLife     = 0;
                slot.repeatLastState = false;
                slot.passSequence    = 0;
                slot._deathState     = DeadEnum.isDead;
                if (!isBotMode)
                {
                    AllUtils.CompleteMission(room,slot,MISSION_TYPE.DEATH,0);
                }
                if (charaDeath == CharaDeath.HEADSHOT)
                {
                    ++killer.headshots;
                }
            }
        }
        public static void RegistryFragInfos(Room room,SLOT killer,out int score,bool isBotMode,bool isSuicide,FragInfos kills)
        {
            score = 0;
            ITEM_CLASS weaponClass = (ITEM_CLASS)ComDiv.getIdStatics(kills.weapon,1);

            for (int i = 0; i < kills.frags.Count; i++)
            {
                Frag       frag      = kills.frags[i];
                CharaDeath deathType = (CharaDeath)(frag.hitspotInfo >> 4);
                if (kills.killsCount - (isSuicide ? 1 : 0) > 1)
                {
                    frag.killFlag |= deathType == CharaDeath.BOOM || deathType == CharaDeath.OBJECT_EXPLOSION || deathType == CharaDeath.POISON || deathType == CharaDeath.HOWL || deathType == CharaDeath.TRAMPLED || weaponClass == ITEM_CLASS.SHOTGUN ? KillingMessage.MassKill : KillingMessage.PiercingShot;
                }
                else
                {
                    int num2 = 0;
                    if (deathType == CharaDeath.HEADSHOT)
                    {
                        num2 = 4;
                    }
                    else if (deathType == CharaDeath.DEFAULT && weaponClass == ITEM_CLASS.KNIFE)
                    {
                        num2 = 6;
                    }
                    if (num2 > 0)
                    {
                        int num3 = killer.lastKillState >> 12;
                        if (num2 == 4)
                        {
                            if (num3 != 4)
                            {
                                killer.repeatLastState = false;
                            }
                            killer.lastKillState = num2 << 12 | (killer.killsOnLife + 1);
                            if (killer.repeatLastState)
                            {
                                frag.killFlag |= (killer.lastKillState & 16383) <= 1 ? KillingMessage.Headshot : KillingMessage.ChainHeadshot;
                            }
                            else
                            {
                                frag.killFlag         |= KillingMessage.Headshot;
                                killer.repeatLastState = true;
                            }
                        }
                        else if (num2 == 6)
                        {
                            if (num3 != 6)
                            {
                                killer.repeatLastState = false;
                            }
                            killer.lastKillState = num2 << 12 | (killer.killsOnLife + 1);
                            if (killer.repeatLastState && (killer.lastKillState & 16383) > 1)
                            {
                                frag.killFlag |= KillingMessage.ChainSlugger;
                            }
                            else
                            {
                                killer.repeatLastState = true;
                            }
                        }
                    }
                    else
                    {
                        killer.lastKillState   = 0;
                        killer.repeatLastState = false;
                    }
                }
                int  victimId   = frag.VictimSlot;
                SLOT victimSlot = room._slots[victimId];
                if (victimSlot.killsOnLife > 3)
                {
                    frag.killFlag |= KillingMessage.ChainStopper;
                }
                if ((kills.weapon == 19016 || kills.weapon == 19022) && kills.killerIdx == victimId || victimSlot.specGM)
                {
                }
                else
                {
                    victimSlot.allDeaths++; //exprosao acid
                }
                if (killer._team != victimSlot._team)
                {
                    score += AllUtils.getKillScore(frag.killFlag);
                    killer.allKills++;
                    if (killer._deathState == DeadEnum.isAlive)
                    {
                        killer.killsOnLife++;
                    }
                    if (victimSlot._team == 0)
                    {
                        room._redDeaths++;
                        room._blueKills++;
                    }
                    else
                    {
                        room._blueDeaths++;
                        room._redKills++;
                    }
                    if (room.room_type == 7)
                    {
                        if (killer._team == 0)
                        {
                            room.red_dino += 4;
                        }
                        else
                        {
                            room.blue_dino += 4;
                        }
                    }
                }
                victimSlot.lastKillState   = 0;
                victimSlot.killsOnLife     = 0;
                victimSlot.repeatLastState = false;
                victimSlot.passSequence    = 0;
                victimSlot._deathState     = DeadEnum.isDead;
                if (!isBotMode)
                {
                    AllUtils.CompleteMission(room,victimSlot,MISSION_TYPE.DEATH,0);
                }
                if (deathType == CharaDeath.HEADSHOT)
                {
                    killer.headshots++;
                }
            }
        }