167 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
# Script for Lursendis the gourmet (/wolfsburg/lursendis).
 | 
						|
# Idea courtesy Yann Chachkoff.
 | 
						|
#
 | 
						|
# The script assumes you have:
 | 
						|
# * Lursendis
 | 
						|
# * a place where the player will drop the special omelet
 | 
						|
#
 | 
						|
# Copyright 2007 Nicolas Weeger
 | 
						|
# Released as GPL
 | 
						|
#
 | 
						|
# This script is supposed to be called for the time event of Lursendis.
 | 
						|
 | 
						|
import Crossfire
 | 
						|
import CFMove
 | 
						|
import random
 | 
						|
from CFDialog import DialogRule, Dialog
 | 
						|
 | 
						|
quest_name = "wolfsburg/Lursendis"
 | 
						|
 | 
						|
key_status = 'gourmet_status'
 | 
						|
st_getting = 'getting'
 | 
						|
st_eating = 'eating'
 | 
						|
key_eating_step = 'eating_step'
 | 
						|
plate_x = 2
 | 
						|
plate_y = 6
 | 
						|
 | 
						|
banquet_path = '/python/items/banquet.py'
 | 
						|
banquet_archetype = 'tome'
 | 
						|
event_archetype = 'event_apply'
 | 
						|
 | 
						|
color = Crossfire.MessageFlag.NDI_GREEN	# color to display messages
 | 
						|
 | 
						|
def check_plate():
 | 
						|
	obj = whoami.Map.ObjectAt(plate_x, plate_y)
 | 
						|
	while obj != None:
 | 
						|
		if obj.NamePl == 'Farnass\'s Special Caramels' and obj.Slaying == 'Farnass\'s Special Caramel':
 | 
						|
			if whoami.ReadKey(key_status) == st_getting:
 | 
						|
				whoami.Map.Print('%s grabs a %s and starts eating with an obvious pleasure.'%(whoami.Name, obj.Name))
 | 
						|
				obj.Quantity = obj.Quantity - 1
 | 
						|
				whoami.WriteKey(key_status, st_eating, 1)
 | 
						|
				whoami.WriteKey(key_eating_step, str(random.randint(5, 10)), 1)
 | 
						|
				Crossfire.SetReturnValue(1)
 | 
						|
				return
 | 
						|
 | 
						|
			whoami.Say('Oh! Could this be...')
 | 
						|
			whoami.WriteKey(key_status, st_getting, 1)
 | 
						|
			Crossfire.SetReturnValue(1)
 | 
						|
			return
 | 
						|
 | 
						|
		obj = obj.Above
 | 
						|
 | 
						|
	if whoami.ReadKey(key_status) == st_getting:
 | 
						|
		# we were on the spot, but no more omelet...
 | 
						|
		whoami.WriteKey(key_status, '', 1)
 | 
						|
 | 
						|
def create_book():
 | 
						|
	book = whoami.Map.CreateObject(banquet_archetype, whoami.X, whoami.Y)
 | 
						|
	book.Name = 'Unforgettable Banquet of %s'%whoami.Name
 | 
						|
	book.NamePl = 'Unforgettable Banquets of %s'%whoami.Name
 | 
						|
	event = book.CreateObject(event_archetype)
 | 
						|
	event.Slaying = banquet_path
 | 
						|
	event.Title = Crossfire.WhatIsEvent().Title
 | 
						|
 | 
						|
def move_gourmet():
 | 
						|
	st = whoami.ReadKey(key_status)
 | 
						|
	if st == st_getting:
 | 
						|
		move = CFMove.get_object_to(whoami, plate_x, plate_y)
 | 
						|
		if move == 0:
 | 
						|
			check_plate()
 | 
						|
			return
 | 
						|
		elif move == 2:
 | 
						|
			whoami.Say('Get outta my way!')
 | 
						|
		Crossfire.SetReturnValue(1)
 | 
						|
		return
 | 
						|
	elif st == st_eating:
 | 
						|
		step = int(whoami.ReadKey(key_eating_step)) - 1
 | 
						|
		if step == 0:
 | 
						|
			whoami.WriteKey(key_eating_step, '', 1)
 | 
						|
			whoami.WriteKey(key_status, '', 1)
 | 
						|
			whoami.Say('Now that\'s what I call a caramel! Thank you very much!')
 | 
						|
			whoami.Say('Here, take this as a token of my gratitude.')
 | 
						|
			create_book()
 | 
						|
			for pl in Crossfire.GetPlayers():
 | 
						|
			    if pl.Map == whoami.Map and pl.QuestGetState(quest_name) == 70:
 | 
						|
			        pl.QuestSetState(quest_name, 100)
 | 
						|
			return
 | 
						|
		whoami.WriteKey(key_eating_step, str(step), 1)
 | 
						|
		Crossfire.SetReturnValue(1)
 | 
						|
		return
 | 
						|
 | 
						|
	check_plate()
 | 
						|
 | 
						|
def talk_gourmet():
 | 
						|
    pl = Crossfire.WhoIsActivator()
 | 
						|
    speech = Dialog(Crossfire.WhoIsActivator(), Crossfire.WhoAmI(), quest_name)
 | 
						|
    completed = pl.QuestWasCompleted(quest_name)
 | 
						|
 | 
						|
    idx = 1
 | 
						|
 | 
						|
    prer = [["quest",quest_name, "10"]]
 | 
						|
    rmsg = ["So, do you have a caramel made by Farnass? If so, please put it on the plate, I'm so hungry!"]
 | 
						|
    postr = []
 | 
						|
    speech.addRule(DialogRule(["*"], prer, rmsg, postr),idx)
 | 
						|
    idx = idx + 1
 | 
						|
 | 
						|
    prer = [["quest",quest_name, "0"], ["token", "asked", "1"]]
 | 
						|
    postr = [["settoken", "asked", "0"]]
 | 
						|
    rmsg = ["Ha well, too bad... If you ever change your mind, please tell me!"]
 | 
						|
    speech.addRule(DialogRule(["no"], prer, rmsg, postr),idx)
 | 
						|
    idx = idx + 1
 | 
						|
 | 
						|
    if completed:
 | 
						|
        next = "40"
 | 
						|
    else:
 | 
						|
        next = "10"
 | 
						|
 | 
						|
    prer = [["quest",quest_name, "0"], ["token", "asked", "1"]]
 | 
						|
    postr = [["settoken", "asked", "0"], ["quest", quest_name, next]]
 | 
						|
    rmsg = ["Thank you very much!"]
 | 
						|
    speech.addRule(DialogRule(["yes"], prer, rmsg, postr),idx)
 | 
						|
    idx = idx + 1
 | 
						|
 | 
						|
    if completed:
 | 
						|
        prer = [["quest",quest_name, "0"]]
 | 
						|
        postr = [["settoken", "asked", "1"]]
 | 
						|
        rmsg = ["Hum, I'm still hungry, I could use another caramel from Farnass... Could you get me another one, please?"]
 | 
						|
        replies = [["yes", "Sure"], ["no", "Sorry, I'm really busy now, I don't have time..."]]
 | 
						|
        speech.addRule(DialogRule(["*"], prer, rmsg, postr, replies),idx)
 | 
						|
        idx = idx + 1
 | 
						|
    else:
 | 
						|
        prer = [["quest", quest_name, "0"], ["token", "dialog", "3"]]
 | 
						|
        postr = [["settoken", "asked", "1"], ["settoken", "dialog", "0"]]
 | 
						|
        rmsg = ["Would you really be as kind as that?"]
 | 
						|
        replies = [["yes", "If you really need one caramel, yes, sure."], ["no", "Well, no, I was just joking."]]
 | 
						|
        speech.addRule(DialogRule(["bring"], prer, rmsg, postr, replies),idx)
 | 
						|
        idx = idx + 1
 | 
						|
 | 
						|
        prer = [["quest", quest_name, "0"], ["token", "dialog", "2"]]
 | 
						|
        postr = [["settoken", "dialog", "3"]]
 | 
						|
        rmsg = ["Farnass 'The Recipe Spellcrafter'. Good friend, haven't seen him in 15 years...\nI think he lived in Scorn, or some island around."]
 | 
						|
        replies = [["bring", "Should I get you one of his caramels, then?", 2]]
 | 
						|
        speech.addRule(DialogRule(["farnass"], prer, rmsg, postr, replies),idx)
 | 
						|
        idx = idx + 1
 | 
						|
 | 
						|
        prer = [["quest", quest_name, "0"], ["token", "dialog", "1"]]
 | 
						|
        postr = [["settoken", "dialog", "2"]]
 | 
						|
        rmsg = ["Yes, but I would only eat a caramel made by my friend Farnass."]
 | 
						|
        replies = [["farnass", "Who is Farnass?", 2]]
 | 
						|
        speech.addRule(DialogRule(["caramel"], prer, rmsg, postr, replies),idx)
 | 
						|
        idx = idx + 1
 | 
						|
 | 
						|
        prer = [["quest", quest_name, "0"]]
 | 
						|
        postr = [["settoken", "dialog", "1"]]
 | 
						|
        rmsg = ["I'm hungry, I could use a caramel."]
 | 
						|
        replies = [["caramel", "A caramel, really?", 2]]
 | 
						|
        speech.addRule(DialogRule(["*"], prer, rmsg, postr, replies),idx)
 | 
						|
        idx = idx + 1
 | 
						|
 | 
						|
    speech.speak(Crossfire.WhatIsMessage())
 | 
						|
    Crossfire.SetReturnValue(1)
 | 
						|
 | 
						|
whoami = Crossfire.WhoAmI()
 | 
						|
if Crossfire.WhatIsEvent().Subtype == Crossfire.EventType.TIME:
 | 
						|
    move_gourmet()
 | 
						|
elif Crossfire.WhatIsEvent().Subtype == Crossfire.EventType.SAY:
 | 
						|
    talk_gourmet()
 |