79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
# ship.py -- sailing around the world takes time
|
|
# Created by: Kevin Zheng <kevinz5000@gmail.com>
|
|
#
|
|
# This script should be used in specially designed ship maps. Please see the
|
|
# ship from Scorn to Santo Dominion for a working example. Note that connection
|
|
# 10 and 11 must be used for the entrance and exit gates, respectively.
|
|
import Crossfire
|
|
|
|
player = Crossfire.WhoIsActivator()
|
|
whoami = Crossfire.WhoAmI()
|
|
sailtime = 15
|
|
|
|
# Get a previously set value, otherwise return zero.
|
|
def getValue(key):
|
|
value = Crossfire.WhoAmI().ReadKey(key)
|
|
|
|
if (len(value) != 0):
|
|
return value
|
|
else:
|
|
return 0
|
|
|
|
# Set a value.
|
|
def setValue(key, value):
|
|
Crossfire.WhoAmI().WriteKey(key, str(value), 1)
|
|
|
|
# Check ship state.
|
|
def getState():
|
|
return int(getValue("ship_state"))
|
|
|
|
# Set ship state.
|
|
def setState(state):
|
|
setValue("ship_state", state)
|
|
|
|
# Check if the ship is already sailing.
|
|
def isSailing():
|
|
if getState() != 0:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
# Set a timer for the specified amount of time.
|
|
def setTimer(time):
|
|
setValue("ship_timer", str(whoami.CreateTimer(time, 1)))
|
|
|
|
# Clear the previously set timer.
|
|
def clearTimer():
|
|
Crossfire.DestroyTimer(int(getValue("ship_timer")))
|
|
|
|
# Start sailing if the ship isn't already sailing.
|
|
if Crossfire.WhatIsEvent().Subtype == Crossfire.EventType.APPLY:
|
|
if isSailing() == 0:
|
|
setState(1)
|
|
|
|
# Close the entrance and notify the players onboard.
|
|
whoami.Map.TriggerConnected(10, 1)
|
|
whoami.Map.Print("\"Ahoy, the ship is ready to set sail!\" You feel the ship beginning to move.")
|
|
setTimer(sailtime)
|
|
else:
|
|
player.Message("The ship has already set sail, be patient!")
|
|
|
|
# Handle the timer event based on what state the ship is in.
|
|
elif Crossfire.WhatIsEvent().Subtype == Crossfire.EventType.TIMER:
|
|
if getState() == 1:
|
|
# Open the exit and tell players that they've arrived.
|
|
setState(2)
|
|
whoami.Map.TriggerConnected(11, 1)
|
|
whoami.Map.Print("The ship has arrived at its destination.")
|
|
|
|
# Clear and reset timer for another 15 seconds.
|
|
clearTimer()
|
|
setTimer(15)
|
|
elif getState() == 2:
|
|
# Reset the ship.
|
|
clearTimer()
|
|
whoami.Map.TriggerConnected(10, 0)
|
|
whoami.Map.TriggerConnected(11, 0)
|
|
whoami.Map.Print("The ship is ready to board.")
|
|
setState(0)
|