1. We have added a Gift Upgrades feature that allows you to gift an account upgrade to another member, just in time for the holiday season. You can see the gift option when going to the Account Upgrades screen, or on any user profile screen.
    Dismiss Notice

What controls how the AI uses spells?

Discussion in 'Civ4 - Fall from Heaven' started by Mouthwash, Jun 21, 2016.

  1. Mouthwash

    Mouthwash Escaped Lunatic

    Joined:
    Sep 26, 2011
    Messages:
    7,769
    Location:
    Hiding
    I gave Stephanos an irresistible version of the Domination spell, but he refuses to use it (I confirmed that he has it by using the Stephanos unit in WB). I understand that the caster loses the ability to cast the original version if he is resisted, so maybe there's some reluctance coded in there? I assumed it was the <iAIWeight>, so I changed it to 500 (instead of 50). When that didn't work, I removed that line entirely, since other spells don't seem to have it. Nothing worked. Do I have to go in python or something?

    EDIT: To be clear, I want him to use this ability every single turn it is available.
     
  2. The Crying Man

    The Crying Man Chieftain

    Joined:
    Jun 12, 2016
    Messages:
    11
    i know in coding you could use an if/then statement. so that when certain conditions (such as 2 or more enemies are near him) then he uses the spell. i dont know if that is true for civ 4. Though i do know that AI do have scripting
     
  3. hegemonkhan

    hegemonkhan Chieftain

    Joined:
    Jul 20, 2006
    Messages:
    201
    I don't know any of Civ4's/FFH2mods' various codes at all (only worked with Python a tiny bit), but in general the concepts of coding and coding/logic is this:

    -----------------

    @ The Crying Man

    there's also giving a 'priority/weight rating' indicator/flag too, for an example:

    do I save the hot girl or the ugly girl?

    lower the value, the higher the priority
    higher the value, the lower the priority

    hot_girl.priority = 1
    ugly_girl.priority = 2

    if (hot_girl.priority <= ugly_girl.priority) {
    -> hot_girl.save_her!
    } else {
    -> ugly_girl.save_her!
    }
    // you save the 'hot_girl'

    VS

    hot_girl.priority = 2
    ugly_girl.priority = 1

    if (hot_girl.priority <= ugly_girl.priority) {
    -> hot_girl.save_her!
    } else {
    -> ugly_girl.save_her!
    }
    // you save the 'ugly_girl'

    VS

    hot_girl.priority = 1
    ugly_girl.priority = 1

    if (hot_girl.priority <= ugly_girl.priority) {
    -> hot_girl.save_her!
    } else {
    -> ugly_girl.save_her!
    }
    // you save the 'hot_girl'

    ----------------------------------

    or you could have the opposite too:

    lower the value, lower the priority
    higher the value, higher the priority

    hot_girl.priority = 2
    ugly_girl.priority = 1

    if (hot_girl.priority >= ugly_girl.priority) {
    -> hot_girl.save_her!
    } else {
    -> ugly_girl.save_her!
    }
    // you save the 'hot_girl'

    VS

    hot_girl.priority = 1
    ugly_girl.priority = 2

    if (hot_girl.priority >= ugly_girl.priority) {
    -> hot_girl.save_her!
    } else {
    -> ugly_girl.save_her!
    }
    // you save the 'ugly_girl'

    VS

    hot_girl.priority = 1
    ugly_girl.priority = 1

    if (hot_girl.priority >= ugly_girl.priority) {
    -> hot_girl.save_her!
    } else {
    -> ugly_girl.save_her!
    }
    // you save the 'hot_girl'

    --------------------------------

    @ Mouthwash:

    maybe try changing the <iAIWeight> to 1 or 0 (or maybe even: -1), as maybe lower values have the greater priority, whereas your high value of 500 might have a lesser priority
     

Share This Page