Ejemplo n.º 1
0
from ..Utilities.ArenaUtils import weightedDictRandom, DictToOrderedDict
from Objs.Events.Event import Event
import collections
import random
import math


def setupDiesFromExplosiveTrap(state):
    state["events"]["DiesFromExplosiveTrap"].eventStore.setdefault(
        "trapCounter", 0)
    state["events"]["DiesFromExplosiveTrap"].eventStore.setdefault(
        "trapMakerCounter", collections.OrderedDict())


Event.registerInsertedCallback("startup", setupDiesFromExplosiveTrap)

# Manipulate the weight of the event based on the number of traps and who it is


def modifyExplosiveTrapChance(actor, baseEventActorWeight, event):
    if event.name == "DiesFromExplosiveTrap":
        trapCounter = event.eventStore["trapCounter"]
        if trapCounter == 0:
            return 0, False
        return (1 + math.log(trapCounter, 2)) * baseEventActorWeight, True
    return baseEventActorWeight, True


Event.registerInsertedCallback("modifyIndivActorWeights",
                               modifyExplosiveTrapChance)
Ejemplo n.º 2
0
from Objs.Events.Event import Event
from Objs.Events.IndividualEventHandler import IndividualEventHandler
import random

def checkSponsorLove(actor, sponsor, baseEventActorWeight, event):
    if event.name != "SponsorGivesTips":
        return baseEventActorWeight, True
    possible_love = actor.hasThing("Love")
    if not possible_love or str(possible_love[0].target) != str(sponsor):    
        return baseEventActorWeight, True
    return baseEventActorWeight*event.stateStore[0]["settings"]["relationInfluence"], True

Event.registerInsertedCallback(
    "modifyIndivActorWeightsWithSponsors", checkSponsorLove)

def checkActorLove(actor, origWeight, event):
    if event.name == "SponsorGivesTips" and actor.hasThing("Love"):
        return (origWeight*event.stateStore[0]["settings"]["relationInfluence"]/3, True)

Event.registerEvent("modifyIndivActorWeights", checkActorLove)

def func(self, mainActor, state=None, participants=None, victims=None, sponsors=None):
    state["allRelationships"].IncreaseFriendLevel(
        mainActor, sponsors[0], random.randint(2, 3))
    mainActor.permStatChange({'survivalism': 2,
                              'cleverness': 2})

    # This cannot happen more than once
    eventHandler = IndividualEventHandler(state)
    eventHandler.banEventForSingleContestant(
        "SponsorGivesTips", mainActor.name)
Ejemplo n.º 3
0
            return baseEventActorWeight, True
        return 0, False
    return baseEventActorWeight, True


def checkParticipantLove(actor, participant, baseEventActorWeight, event):
    if event.name != "FriendGivesMedicine":
        return baseEventActorWeight, True
    possible_love = actor.hasThing("Love")
    if not possible_love or str(possible_love[0].target) != str(participant):
        return baseEventActorWeight, True
    return baseEventActorWeight * event.stateStore[0]["settings"][
        "relationInfluence"], True


Event.registerInsertedCallback("modifyIndivActorWeightsWithParticipants",
                               checkParticipantMedicine)
Event.registerInsertedCallback("modifyIndivActorWeightsWithParticipants",
                               checkParticipantLove)


def checkActorLove(actor, origWeight, event):
    if event.name == "FriendGivesMedicine" and actor.hasThing("Love"):
        return (origWeight *
                event.stateStore[0]["settings"]["relationInfluence"] / 3, True)


Event.registerEvent("modifyIndivActorWeights", checkActorLove)


def func(self,
         mainActor,
Ejemplo n.º 4
0
        return
    for x in range(1, TURNS_UNTIL_FORCE_FIGHT + 1):
        comparison = len(state["callbackStore"]["contestantLog"][
            turnNumber[0] - x + 1]) if x > 1 else len(
                liveContestants)  # Because of potential callback order issues
        if len(state["callbackStore"]["contestantLog"]
               [turnNumber[0] - x]) > 3 or comparison != len(
                   state["callbackStore"]["contestantLog"][turnNumber[0] - x]):
            return
    baseEventActorWeights["SponsorForceFight"] = 5 + \
        state["events"]["SponsorForceFight"].eventStore.setdefault(
            "forceLevel", 0)
    state["events"]["SponsorForceFight"].eventStore["forceLevel"] += 2


Event.registerInsertedCallback("modifyBaseWeights", allowForceFight)


def func(self,
         mainActor,
         state=None,
         participants=None,
         victims=None,
         sponsors=None):
    desc = "Tired of waiting, the sponsors force two of the remaining contestants to fight. "
    # Build dict of weights for various possibilities
    optionDict = collections.OrderedDict()
    optionDict['fight'] = 1
    if state['allRelationships'].friendships[str(mainActor)][str(
            participants[0])] > 3 and state['allRelationships'].friendships[
                str(participants[0])][str(mainActor)] > 3:
Ejemplo n.º 5
0
from Objs.Events.Event import Event
from collections import defaultdict


def countDaysWithoutWater(state):
    for contestant in state["contestants"].values():
        if contestant.hasThing("Clean Water"):
            state["events"]["Dysentary"].eventStore["daysWithoutWater"][str(
                contestant)] = 0
        else:
            state["events"]["Dysentary"].eventStore["daysWithoutWater"][str(
                contestant)] += 1


Event.registerInsertedCallback("postDayCallbacks", countDaysWithoutWater)


def adjustDysenteryChance(actor, indivProb, event):
    if str(event) == "Dysentary":
        # initializes if not present, by default it always returns 0
        event.eventStore.setdefault("daysWithoutWater", defaultdict(int))
        # A simple linear multiplier, more merciful and easier than exponential
        indivProb *= event.eventStore["daysWithoutWater"][str(actor)]
    return indivProb, True


Event.registerInsertedCallback("modifyIndivActorWeights",
                               adjustDysenteryChance)


def func(self,
Ejemplo n.º 6
0
from Objs.Events.Event import Event
import random


def fixedMadokamiCallback(contestantKey, thisevent, state, participants,
                          victims, sponsorsHere, alreadyUsed):
    if thisevent.name == "MadokamiKillsBadWorshipper":
        del sponsorsHere[:]  # Have to clear the list BUT keep the reference
        sponsorsHere.append(state["sponsors"]["Madokami"])
    return True, False


Event.registerInsertedCallback("overrideContestantEvent",
                               fixedMadokamiCallback)


def func(self,
         mainActor,
         state=None,
         participants=None,
         victims=None,
         sponsors=None):
    success = random.randint(0, 1)
    if success:
        mainActor.kill()
        desc = sponsors[0].name + ' struck down ' + mainActor.name + " for " + \
            Event.parseGenderPossessive(mainActor) + " blasphemous beliefs."
        tempList = [sponsors[0], mainActor]
        del state["events"]["AWorshipsB"].eventStore[mainActor.name]
        deadList = [mainActor.name]
    else:
Ejemplo n.º 7
0
from Objs.Events.Event import Event
import random


def fixedHomuciferCallback(contestantKey, thisevent, state, participants,
                           victims, sponsorsHere, alreadyUsed):
    if thisevent.name == "HomuciferKillsBadWorshipper":
        del sponsorsHere[:]  # Have to clear the list BUT keep the reference
        sponsorsHere.append(state["sponsors"]["Akuma Homura"])
    return True, False


Event.registerInsertedCallback("overrideContestantEvent",
                               fixedHomuciferCallback)


def func(self,
         mainActor,
         state=None,
         participants=None,
         victims=None,
         sponsors=None):
    success = random.randint(0, 1)
    if success:
        mainActor.kill()
        desc = sponsors[0].name + ' struck down ' + mainActor.name + " for " + \
            Event.parseGenderPossessive(mainActor) + " dangerous beliefs."
        tempList = [sponsors[0], mainActor]
        del state["events"]["AWorshipsB"].eventStore[mainActor.name]
        deadList = [mainActor.name]
    else:
Ejemplo n.º 8
0
        skippers = state["events"]["DoNothing"].eventStore[
            "CornucopiaDoNothing"]
        if skippers:
            thisWriter = state.get("thisWriter")
            if thisWriter is not None:
                state["thisWriter"].addEvent(
                    "The following contestants chose to skip the Cornucopia: "
                    + Event.englishList(skippers), skippers)
            else:
                print(
                    "The following contestants chose to skip the Cornucopia: "
                    + Event.englishList(skippers))
            skippers.clear()


Event.registerInsertedCallback("postPhaseCallbacks",
                               cornucopiaEndPhaseCallback)


def func(self,
         mainActor,
         state=None,
         participants=None,
         victims=None,
         sponsors=None):
    # This is a dummy event, representing the character not participating. For display purposes, these are only displayed at the end of the turn.
    listNothing = self.eventStore.setdefault("CornucopiaDoNothing", [])
    listNothing.append(mainActor)
    return (None, [mainActor], [])


Event.registerEvent("DoNothing", func)