Exemplo n.º 1
0
def congratulation(mob, player):
    if player.code == mob.specials["player"]:
        to_say = "a %s *illuminato* ebbrav$o cannabuscolo, risposta esatta ed eccoti dei px" % player.code
        player.experience += 10
    else:
        to_say = "a %s *zugiolone* bravò!" % player.code
    defer_if_possible(1, 1, command_say, mob, to_say)
def before_listen_rpg_channel(locandiera, player, target, phrase, ask, exclaim,
                              behavioured):
    # Mi assicuro che si stia parlando rivolgendosi alla locandiera
    if target != locandiera:
        return

    if is_infix("menù", phrase):
        to_say = "a %s Il nostro menù di oggi lo potete leggere anche da qui, è lì sul bancone." % player.code
        defer_if_possible(1, 2, locandiera, player, command_say, locandiera,
                          to_say)
        return

    proto_cibi = []
    for proto_code in PROTO_FOODS_CODES:
        table_name = "proto_" + proto_code.split("_")[1] + "s"
        proto_entity = database[table_name][proto_code]
        for keyword in multiple_arguments(
                proto_entity.get_keywords_attr(looker=locandiera)):
            if is_infix(keyword, phrase):
                proto_cibi.append(proto_entity)

    player_code = player.get_numbered_keyword(looker=locandiera)

    if not proto_cibi:
        to_say = "a %s Non abbiam nessun cibo di quel tipo..." % player_code
        command_say(locandiera, to_say)
        return

    proto_pietanza = random.choice(proto_cibi)
    pietanza = proto_pietanza.CONSTRUCTOR(proto_pietanza.code)

    to_say = "a %s Ottimo! %s in arrivo." % (
        player_code, first_color_upper(pietanza.get_name(looker=locandiera)))
    defer_random_time(1, 2, command_say, locandiera, to_say)
    defer_random_time(5, 7, locandiera_act, locandiera, player, pietanza)
Exemplo n.º 3
0
def after_listen_say(mob, player, target, phrase, behavioured):
    if not player.IS_PLAYER:
        return

    # Verifico che gli si parli con "a"
    if target != mob:
        return

    # Se non sta attendendo una risposta chiede l'indovinello
    if not mob.specials or not mob.specials["wait_for_reply"]:
        riddle_number = random.choice(RIDDLES.keys())
        to_say = "a %s *zugiolone* " % player.code
        to_say += RIDDLES[riddle_number][0]
        defer_if_possible(1, mob, player, command_say, mob, to_say)
        mob.specials["wait_for_reply"] = True
        mob.specials["player"] = player.code
        mob.specials["riddle"] = riddle_number
        message = "*asciutto* tempo scaduto e nessuno ha indovinato..."
        defer(WAITING_TIME, reset_timer, mob, message)
        return

    # Ripulisce la risposta del giocatore da paccottaglie e da articoli e simili
    phrase = ALFA_ONLY_PATTERN.sub("", phrase)
    phrase = remove_little_words(phrase)

    riddle_number = mob.specials["riddle"]
    print riddle_number
    solutions = RIDDLES[riddle_number][1:]
    for solution in solutions:
        print "soluzioni: ", solution, " frasi: ", phrase
        # (TD) qui al posto della is_same ci starebbe bene una futura implementazione di soundex
        if is_same(phrase, solution):
            congratulation(mob, player)
            reset_timer(mob)
            break
def start_idrusa_farfalla_quest(player, to_room, idrusa):
    # La quest deve iniziare solo per i giocatori
    if not player.IS_PLAYER:
        idrusa.specials["before_lookeding_me"] = True
        return

    # Idrusa tra qualche secondo proporrà al giocatore di aiutarla
    defer_if_possible(2, 4, idrusa, player, beg_the_player, idrusa, player)
def after_shake(player, target, argument):
    astronoma = get_target_implicetely(player, target, ASTRONOMA_PROTO_CODE)
    if not astronoma or "expecting_answer" not in astronoma.specials:
        return
    astronoma.specials["expecting_answer"] = False

    player_code = player.get_numbered_keyword(looker=astronoma)

    to_say = "a %s *indispettita* Oh..." % player_code
    defer_if_possible(1, 2, astronoma, player, command_say, astronoma, to_say)
    astronoma.specials["expecting_answer"] = False
def ask_again(apprendista, speaker):
    # Normale che capiti visto che la funzione viene deferrata
    if not apprendista or not speaker:
        return

    to_say = "a %s *deluso* Ok, forse non si siamo capiti, è un segreto che nessun'altro sarebbe disposto a svelarti." % speaker.code
    command_say(apprendista, to_say)
    to_say = "a %s Te lo richiedo: vuoi conoscere un segreto riguardo a questo villaggio?" % speaker.code
    defer_if_possible(1, apprendista, speaker, command_say, apprendista,
                      to_say)

    apprendista.specials["apprendista_situation"] = "domanda"
def reveal_secret(apprendista, speaker):
    # Normale che capiti visto che la funzione viene deferrata
    if not apprendista or not speaker:
        return

    # Qui è concettualmente meglio utilizzare il comando whisper piuttosto che
    # la act per poter giocare in futuro sulle lingue
    print ">>> SEGRETO <<<", speaker, apprendista
    to_whisper = "a %s *all'orecchio* Una delle leggende che i tagliapietre si tramandano di maestro in apprendista narra di una pietra, una pietra dalle proprietà eccezionali." % speaker.code
    command_whisper(apprendista, to_whisper)
    to_whisper = "a %s *all'orecchio* Un altro mito, di un altro tempo, racconta di accadimenti prodigiosi... nel centro del villaggio... nel cuore della foresta." % speaker.code
    defer_if_possible(1, apprendista, speaker, command_whisper, apprendista,
                      to_whisper)

    apprendista.specials["apprendista_situation"] = "segreto_svelato"
def spiegazioni(apprendista, player):
    # Normale che possa accadere visto che la funzione viene deferrata
    if not apprendista or not player:
        return

    if not player.IS_PLAYER:
        return

    to_say = "a %s *apprensivo* Io ti posso creare un golem per esercitarti a combattere ma mi devi dire di che materiale lo vuoi." % player.code
    command_say(apprendista, to_say)

    example = random.choice(ITEM_PROTO_CODE.keys())
    to_say = "a %s Per esempio potresti volerlo di %s." % (player.code,
                                                           example)
    defer_if_possible(1, 2, apprendista, player, command_say, apprendista,
                      to_say)
def after_listened(player, astronoma, descr, detail, behavioured):
    if "expecting_answer" in astronoma.specials and astronoma.specials[
            "expecting_answer"] == True:
        return

    player_code = player.get_numbered_keyword(looker=astronoma)

    if player.race in HATED_RACES:
        to_say = "a %s *astiosamente* Ti hanno condotto sin qui propositi di distruzione? La tua razza non è qui ben accetta." % player_code
        defer_if_possible(1, 2, astronoma, player, command_say, astronoma,
                          to_say)
        return

    to_say = "a %s *placidamente* Sei giunt$o sin qui stranier$o perché ti ha spinto il desiderio d'osservar il cielo e perderti negli infiniti spazi stellari?" % player_code
    defer_if_possible(1, 2, astronoma, player, command_say, astronoma, to_say)

    astronoma.specials["expecting_answer"] = True
    defer(15, reset_expecting_answer, player, astronoma)
def beg_the_player(idrusa, player):
    idrusa.specials["before_lookeding_me"] = False
    idrusa.specials["quest_status"] = "domanda"
    idrusa.specials["player_code"] = player.code

    to_say = "a %s *supponente* sei qui forse per accedere al regno di Klirbe?" % player.code
    command_say(idrusa, to_say)

    # Dopo un po' chiede nuovamente al giocatore di rispondere alla sua
    # richiesta di aiuto nel qual caso che il giocatore non abbia afferrato
    # l'indizio di quello che deve fare
    defer_if_possible(15, 30, idrusa, player, ask_for_answer, idrusa, player)

    # L'idrusa non starà ad aspettare in eterno che il giocatore si decida a
    # iniziare la quest, se dopo un po' di tempo lo status della quest non
    # è cambiato allora gli specials vengono azzerati
    deferred_reset = defer_random_time(60, 90, reset_farfalla_quest, idrusa)
    idrusa.specials["deferred_reset"] = deferred_reset
def after_listen_say(idrusa, speaker, target, phrase, behavioured):
    if not speaker.IS_PLAYER:
        return

    # Controlla se la quest non sia già stata resettata oppure avanzata
    if "quest_status" not in idrusa.specials or idrusa.specials[
            "quest_status"] != "domanda":
        return

    # Ricava la frase ripulita dalla punteggiatura e non continua la quest fino
    # a che il giocatore non dice: sì
    phrase = ALFA_ONLY_PATTERN.sub("", phrase)
    if not is_same(phrase, "si"):
        return

    # Guarda il giocatore che ha risposto
    command_look(idrusa, speaker.code)

    # Ignora coloro che hanno risposto ma che non hanno avviato la quest
    quest_player_code = idrusa.specials["player_code"]
    if speaker.code != quest_player_code:
        quest_player = database["players"][quest_player_code]
        # Ricava il nome o la short per come lo vede idrusa
        to_say = "a %s No, non la tua risposta attendo ma di %s." % (
            speaker.code, quest_player.get_name(looker=idrusa))
        command_say(idrusa, to_say)
        return

    # Visto che il secondo stadio della missione si sta attivando cancella il
    # precedente reset che è meglio che sia reimpostato a fine funzione
    delete_deferred_reset(idrusa)

    # Facciamo avanzare lo stato della quest
    idrusa.specials["quest_status"] = "cerca"

    # Descriviamo quello che vogliamo
    to_say = "a %s *in tono grave* L'accesso ti verrà indicato solo se porterai una farfalla!" % speaker.code
    defer_if_possible(1, 2, idrusa, speaker, command_say, idrusa, to_say)

    # Ecco qui, qui viene impostata la durata media della quest, ovvero quanto
    # idrusa attenderà che il giocatore gli porti la farfalla
    deferred_reset = defer_random_time(200, 300, reset_farfalla_quest, idrusa)
    idrusa.specials["deferred_reset"] = deferred_reset
Exemplo n.º 12
0
def locandiera_act(locandiera, pietanza, player):
    # Normale che possa capitare visto che la funzione è deferrata
    if not locandiera or not pietanza or not player:
        return

    pietanza.inject(locandiera)
    player_code = player.get_numbered_keyword(looker=locandiera)
    pietanza_code = pietanza.get_numbered_keyword(looker=locandiera)

    argument = "%s %s" % (pietanza_code, player_code)
    success_result = command_give(locandiera, argument)
    if success_result:
        defer_if_possible(1, 2, locandiera, player, command_say, locandiera,
                          "a %s Buon appetito!" % player_code)
    else:
        # (TD) Lo lascia per terra! è proprio grezzo, bisognerebbe che lo appoggi
        # su di un tavolo, appena vi sarà il sistema della mobilia lo farò
        defer_if_possible(1, 2, locandiera, player, command_say, locandiera,
                          "a %s Mi scuso ma la appoggio qui..." % player_code)
        defer_random_time(3, 4, command_drop, locandiera, pietanza_code)
def incites_to_follow(player, astronoma):
    # Possibile visto che questa funzione è deferrata
    if not player or not astronoma:
        return

    player_code = player.get_numbered_keyword(looker=astronoma)

    if calendar.is_day():
        to_say = "a %s *sorridendo* Allora torna da me quando è notte." % player_code
        command_say(astronoma, to_say)
        return

    to_say = "a %s *sorridendo* Seguimi allora stranier$o curios$o!" % player_code
    command_say(astronoma, to_say)
    defer_random_time(1, 2, command_up, astronoma)

    # Invia tra quasi due minuti un messaggio al pg se è ancora lì e poi poco dopo torna giù
    to_say = "a %s *sorridendo* Torno giù a seguire le mie occupazioni..." % player_code
    defer_if_possible(115, 118, astronoma, player, command_say, astronoma,
                      to_say)
    defer(120, command_down, astronoma)
def greet_the_astronoma(player, astronoma):
    # Se astronoma non è valida significa che i social non sono diretti
    # esplicitamente all'astronoma e quindi esce
    if not astronoma:
        return

    if "is_greetable" in astronoma.specials and astronoma.specials[
            "is_greetable"] == False:
        return

    player_code = player.get_numbered_keyword(looker=astronoma)

    if player.race in HATED_RACES:
        to_say = "a %s *astiosamente* Il tuo inchino non è accettato in questo luogo per il sangue innocente sparso, per l'avidità di alcuni..." % player_code
        defer_if_possible(1, 2, astronoma, player, command_say, astronoma,
                          to_say)
        return

    to_say = "a %s *placidamente* Buongiorno a te stranier$o curios$o, sei benvenut$o nella Torre per guardare le Stelle...." % player_code
    defer_if_possible(1, 2, astronoma, player, command_say, astronoma, to_say)

    astronoma.specials["is_greetable"] = False
    defer(60, reset_greetable, astronoma)
def after_listen_rpg_channel(apprendista, player, target, phrase, ask, exclaim,
                             behavioured):
    if target != apprendista:
        return

    if "work_in_progress" in apprendista.specials and apprendista.specials[
            "work_in_progress"]:
        return

    apprendista.specials["work_in_progress"] = True
    defer(10, change_status, apprendista)

    phrase = ALFA_ONLY_PATTERN.sub("", phrase)
    choosed_materials = []
    for materiale in ITEM_PROTO_CODE.keys():
        if is_infix(materiale, phrase):
            choosed_materials.append(materiale)
    if not choosed_materials:
        defer_if_possible(1, 2, target, player, spiegazioni, target, player)
    else:
        choosed_material = random.choice(choosed_materials)
        defer_random_time(1, 2, generate_item, apprendista, player,
                          choosed_material, apprendista.location)
Exemplo n.º 16
0
def before_get(entity, target, location, behavioured):
    # Se l'oggetto raccolto non è una spezia allora esce
    if target.prototype.code not in SPICES:
        return False

    # Se l'oggetto non è stato preso da terra allora esce
    if location != entity.location:
        return False

    # Recupera la venditrice che gestisce il baratto, se non c'è esce
    seller = get_seller(entity)
    if not seller:
        return False

    # Se ha effettuato almeno il drop di un oggetto per il baratto allora esce.
    # Questo check si trova dopo aver cercato la seller cosicché la presenza di
    # lei fa come da garante al resetting del drop_for_spice.
    if "drop_for_spice" in entity.specials and entity.specials[
            "drop_for_spice"]:
        entity.specials["drop_for_spice"] = False
        entity.act("$a ti sorride.", TO.ENTITY, target, seller)
        entity.act("$a sorride a $n", TO.OTHERS, target, seller)
        return False

    seller.act("$n ferma $N mentre sta raccogliendo $a.", TO.ENTITY, entity,
               target)
    seller.act("$n ferma $N mentre sta raccogliendo $a.", TO.OTHERS, entity,
               target)
    seller.act("$n ti ferma mentre stai raccogliendo $a.", TO.TARGET, entity,
               target)

    entity_keyword = entity.get_numbered_keyword(looker=seller)
    to_say = "a %s Ti esorto a lasciare qualcosa in cambio per poter prendere %s." % (
        entity_keyword, target.get_name(looker=seller))
    defer_if_possible(1, 2, seller, entity, command_say, seller, to_say)

    return True
def after_nod(player, target, argument):
    astronoma = get_target_implicetely(player, target, ASTRONOMA_PROTO_CODE)
    if not astronoma or "expecting_answer" not in astronoma.specials:
        return
    if not astronoma.specials["expecting_answer"]:
        return

    player_code = player.get_numbered_keyword(looker=astronoma)

    if astronoma.area.code != "citta-raminghe":
        to_say = "a %s *mestamente* Se solo mi trovassi nella mia città..." % player_code
        defer_if_possible(1, 2, astronoma, player, command_say, astronoma,
                          to_say)
        return

    if astronoma.location.prototype.code != "citta-raminghe_room_osservatorio-02":
        to_say = "a %s *mestamente* Se solo mi trovassi nel luogo in cui lavoro..." % player_code
        defer_if_possible(1, 2, astronoma, player, command_say, astronoma,
                          to_say)
        return

    defer_if_possible(1, 2, astronoma, player, incites_to_follow, player,
                      astronoma)
    astronoma.specials["expecting_answer"] = False
def after_wave(player, apprendista, argument):
    if not apprendista:
        return
    defer_if_possible(1, 2, apprendista, player, spiegazioni, apprendista,
                      player)
def before_giving(player, farfalla, idrusa, direction, behavioured):
    if not player.IS_PLAYER:
        to_say = "a %s *concentrato* No grazie. Non accetto nulla da chicchessia." % player.get_numbered_keyword(
        )
        defer_if_possible(1, 2, command_say, idrusa, to_say)
        return True

    command_look(idrusa, player.code)

    # Idrusa non ha iniziato a dare nessuna quest
    if "quest_status" not in idrusa.specials:
        to_say = "a %s *impensierito* No grazie. Ora non sono interessata." % player.code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    quest_player_code = idrusa.specials["player_code"]
    quest_player = database["players"][quest_player_code]
    quest_player_name = quest_player.get_name(looker=idrusa)

    quest_status = idrusa.specials["quest_status"]
    if quest_status == "domanda":
        to_say = "a %s *concentrato* No grazie. Sto attendendo che %s mi risponda." % (
            player.code, quest_player_name)
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    # Controlla che l'entità che dà sia il giocatore della quest
    if player.code != quest_player_code:
        to_say = "a %s No grazie. Sto aspettando che %s mi porti ciò che deve." % (
            player.code, quest_player_name)
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    # Controlla se l'oggetto dato sia una farfalla
    if not farfalla.race == RACE.BUTTERFLY:
        to_say = "a %s *critica* Stai cercando di muovermi a pena o di turlupinarmi?" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True
    else:
        idrusa.specials["quest_status"] = "completa"
        # Ora che la quest è completa ne blocca un eventuale reset
        delete_deferred_reset(idrusa)

        to_yell = "a %s *scortese* Pensavo avessi desistito ormai!" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_yell, idrusa, to_yell)
        to_say = "a %s *con un largo sorriso di scherno* La via per Klirbe non è però accessibile per te..." % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        to_say = "a %s In compenso hai fatto un po' d'esperienza!" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        player.experience += 100

        # Tra un po' di tempo si potranno cercare farfalle
        defer_random_time(3600, 4800, its_farfalla_time, idrusa)