public float GetContactWeight(PolityContact contact)
    {
        if (contact.Polity is Tribe)
        {
            return(_sourceTribe.CalculateContactStrength(contact));
        }

        return(0);
    }
    public override bool CanTrigger()
    {
        if (!base.CanTrigger())
        {
            return(false);
        }

        if (_sourceTribe.DominantFaction != OriginalDominantFaction)
        {
            return(false);
        }

        int rngOffset = unchecked ((int)(RngOffsets.EVENT_CAN_TRIGGER + Id));

        _targetContact = _sourceTribe.GetRandomPolityContact(rngOffset++, GetContactWeight, true);

        if (_targetContact == null)
        {
            return(false);
        }

        _targetTribe        = _targetContact.Polity as Tribe;
        _targetDominantClan = _targetTribe.DominantFaction as Clan;

        // We should use the latest cultural attribute values before calculating chances
        _originalSourceDominantClan.PreUpdate();
        _targetDominantClan.PreUpdate();

        _chanceOfMakingAttempt = CalculateChanceOfMakingAttempt();

        if (_chanceOfMakingAttempt <= 0.15f)
        {
            return(false);
        }

        _chanceOfRejectingOffer = CalculateChanceOfRejectingOffer();

        if (_chanceOfRejectingOffer >= 0.15f)
        {
            return(false);
        }

        return(true);
    }
Exemple #3
0
    public override bool CanTrigger()
    {
        //#if DEBUG
        //        if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0))
        //        {
        //            if (Polity.Id == 11267065402613603L)
        //            {
        //                SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage(
        //                    "MergeTribesDecisionEvent:CanTrigger - Polity.Id:" + Polity.Id,
        //                    "TriggerDate: " + TriggerDate +
        //                    ", SpawnDate: " + SpawnDate +
        //                    ", base.CanTrigger(): " + base.CanTrigger() +
        //                    ", _sourceTribe.DominantFaction == OriginalDominantFaction: " + (_sourceTribe.DominantFaction == OriginalDominantFaction) +
        //                    "");

        //                Manager.RegisterDebugEvent("DebugMessage", debugMessage);
        //            }
        //        }
        //#endif

        if (!base.CanTrigger())
        {
            return(false);
        }

        if (_sourceTribe.DominantFaction != OriginalDominantFaction)
        {
            return(false);
        }

        int rngOffset = unchecked ((int)(RngOffsets.EVENT_CAN_TRIGGER + Id));

        _targetContact = _sourceTribe.GetRandomPolityContact(rngOffset++, GetContactWeight, true);

        if (_targetContact == null)
        {
            return(false);
        }

        _targetTribe        = _targetContact.Polity as Tribe;
        _targetDominantClan = _targetTribe.DominantFaction as Clan;

//#if DEBUG
//        if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0))
//        {
//            //if (_targetTribe.Id == Manager.TracingData.PolityId)
//            //{
//            SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage(
//            "MergeTribesDecisionEvent:CanTrigger - Polity.Id:" + Polity.Id,
//            "TriggerDate: " + TriggerDate +
//            ", _targetTribe.Id: " + _targetTribe.Id +
//            ", _targetDominantClan.Id: " + _targetDominantClan.Id +
//            "");

//            Manager.RegisterDebugEvent("DebugMessage", debugMessage);
//            //}
//        }
//#endif

        // We should use the latest cultural attribute values before calculating chances
        _originalSourceDominantClan.PreUpdate();
        _targetDominantClan.PreUpdate();

        _chanceOfMakingAttempt = CalculateChanceOfMakingAttempt();

        _chanceOfRejectingOffer = CalculateChanceOfRejectingOffer();

        if (_chanceOfMakingAttempt <= 0.0f)
        {
            return(false);
        }

        if (_chanceOfRejectingOffer >= 1.0f)
        {
            return(false);
        }

        return(true);
    }