106 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
'''
 | 
						|
This script is part of the Witherspoon quest, that starts in /scorn/mansion/witherspoon_manor_attic.
 | 
						|
Check the README file in the same directory as this file for more details.
 | 
						|
 | 
						|
Script for Rolanda, in /scorn/houses/rolanda.
 | 
						|
 | 
						|
Support to be called for TIME, TIMER and CUSTOM events.
 | 
						|
'''
 | 
						|
 | 
						|
import Crossfire
 | 
						|
import CFMove
 | 
						|
import random
 | 
						|
 | 
						|
whoami = Crossfire.WhoAmI()
 | 
						|
whoisother = Crossfire.WhoIsOther()
 | 
						|
command = Crossfire.WhatIsMessage()
 | 
						|
event = Crossfire.WhatIsEvent()
 | 
						|
pl = Crossfire.WhoIsActivator()
 | 
						|
 | 
						|
 | 
						|
# Message color for player
 | 
						|
color = Crossfire.MessageFlag.NDI_BROWN
 | 
						|
 | 
						|
# coordinates to look for chairs
 | 
						|
search_chairs = [ [ 0, -1 ], [ 0, 1 ], [ -1, 0 ], [ 1, 0 ] ]
 | 
						|
 | 
						|
def do_give():
 | 
						|
	'''handle the player giving an item.'''
 | 
						|
	if whoisother.ReadKey('special_item') != 'ghost_dagger':
 | 
						|
		whoami.Say('And what am I supposed to do with this %s.'%whoisother.Name)
 | 
						|
		return
 | 
						|
 | 
						|
	whoami.Say('Ohhhhhhhh... This, this dagger...');
 | 
						|
	pl.Message('%s puts her hand to her forehead, and staggers.'%whoami.Name)
 | 
						|
	whoami.WriteKey('witherspoon_saw_dagger', '1', 1)
 | 
						|
	whoami.WriteKey('witherspoon_seated', '', 1)
 | 
						|
	whoami.WriteKey('explaining_for', pl.Name, 1)
 | 
						|
 | 
						|
def search_chair():
 | 
						|
	'''if fainting, try to find a chair when TIME happens.'''
 | 
						|
	for search in range(0, len(search_chairs)):
 | 
						|
		x = whoami.X + search_chairs[search][0]
 | 
						|
		y = whoami.Y + search_chairs[search][1]
 | 
						|
		obj = whoami.Map.ObjectAt(x, y)
 | 
						|
		while obj:
 | 
						|
			if obj.Name == 'chair':
 | 
						|
				whoami.WriteKey('witherspoon_seated', '1', 1)
 | 
						|
				whoami.Say('Thank you very much.')
 | 
						|
				whoami.WriteKey('chair_x', str(x), 1)
 | 
						|
				whoami.WriteKey('chair_y', str(y), 1)
 | 
						|
				return
 | 
						|
			obj = obj.Above
 | 
						|
 | 
						|
def move_to_chair():
 | 
						|
	'''trying to move to first found chair.'''
 | 
						|
	m = CFMove.get_object_to(whoami, int(whoami.ReadKey('chair_x')), int(whoami.ReadKey('chair_y')))
 | 
						|
	if m == 0:
 | 
						|
		whoami.WriteKey('witherspoon_seated', '2', 1)
 | 
						|
		whoami.Map.Print('%s sits on the chair.'%whoami.Name, color)
 | 
						|
		whoami.Say('I shall explain everything...')
 | 
						|
		whoami.Map.Print('%s starts sobbing.'%whoami.Name, color)
 | 
						|
		whoami.CreateTimer(random.randint(5, 10), 1)
 | 
						|
	elif m == 2:
 | 
						|
		whoami.Say('Please let me sit...')
 | 
						|
 | 
						|
def explain():
 | 
						|
	'''explanation of the ghost story. Let Rolanda be still from now on.'''
 | 
						|
 | 
						|
	pl = Crossfire.FindPlayer(whoami.ReadKey('explaining_for'))
 | 
						|
	if pl == None:
 | 
						|
		# just in case someone else is around ^_-
 | 
						|
		whoami.Say('Tss, people just aren\'t patient...')
 | 
						|
		return
 | 
						|
	pl.WriteKey('witherspoon_know_all', '1', 1)
 | 
						|
 | 
						|
	whoami.Say('See, this dagger...')
 | 
						|
	whoami.Say('Alfred wanted...')
 | 
						|
	whoami.Map.Print('%s sighes deeply, and goes on.'%whoami.Name)
 | 
						|
	whoami.Say('he wanted to have some, shall I say, different experience, the kind a man and a woman can have together.')
 | 
						|
	whoami.Say('And since he likes pain, he asked to suffer, to see if the pain would... excite him.')
 | 
						|
	whoami.Map.Print('%s sobs'%whoami.Name)
 | 
						|
	whoami.Say('But he didn\'t think he would die!')
 | 
						|
	whoami.Say('So I... I hide the body, hoping to forget him.')
 | 
						|
	whoami.Say('But now I can\'t forget him! Ever!')
 | 
						|
	pl.Write('You wonder what the ghost (Alfred, according to %s) will make of that...'%whoami.Name, color)
 | 
						|
 | 
						|
if event.Subtype == Crossfire.EventType.USER and command == 'give':
 | 
						|
	do_give()
 | 
						|
elif event.Subtype == Crossfire.EventType.TIME:
 | 
						|
	if whoami.ReadKey('witherspoon_saw_dagger') != '':
 | 
						|
		# No moving while fainting
 | 
						|
		Crossfire.SetReturnValue(1)
 | 
						|
		if whoami.ReadKey('witherspoon_seated') == '':
 | 
						|
			search_chair()
 | 
						|
		elif whoami.ReadKey('witherspoon_seated') == '1':
 | 
						|
			move_to_chair()
 | 
						|
elif event.Subtype == Crossfire.EventType.SAY:
 | 
						|
	if whoami.ReadKey('witherspoon_saw_dagger') != '':
 | 
						|
		# No talking while fainting
 | 
						|
		Crossfire.SetReturnValue(1)
 | 
						|
		whoami.Say('Ohhhhhhh......')
 | 
						|
		pl.Message('%s seems to be ready to faint.'%whoami.Name)
 | 
						|
elif event.Subtype == Crossfire.EventType.TIMER:
 | 
						|
	if whoami.ReadKey('witherspoon_seated') == '2':
 | 
						|
		explain()
 |