Ich bin zwar der Meinung, ich habe noch keine Ahnung, was ich tue aber ich habe die OpenCloseExtension Funktion angepasst bekommen, so dass sie auch mit Sprites funktioniert, zumindest tut sie es jetzt auch mit dem Briefkasten. Musste dafür allerdings eine zweiten Parameter einführen und AGS sieht es anscheinend nicht vor, Parameter mit einen Standardwert zu belegen (außer wohl bei int und auch dort nur eingeschränkt).
Bei den Türen ändert sich nichts, bei einem Sprite muss die Sprite-ID des geschlossenen Objekts angegeben werden, im Fall des Briefkastens ist das die 46.
Ich versuche es hier zusammenzufassen:
VerbGui.asc:
/***********************************************************************
* OpenCloseExtension(int id, string type)
* Used in combination with the door scripts. This function returns a close extension, if the door with the given id is open and vice versa.
* For objects with different sprite graphics, give the sprite ID for the closed object and it returns an open, otherwise a close.
*
***********************************************************************/
static void Verbs::OpenCloseExtension(int id, String type)
{
Object*oo = Object.GetAtScreenXY(mouse.x, mouse.y);
if (type == "door") {
if ((Doors.GetDoorState(id)==0) || (Doors.GetDoorState(id)==2)) {
Verbs.AddExtension('o');
} else Verbs.AddExtension('c');
}
if (type == "sprite") {
if (oo.Graphic == id) {
Verbs.AddExtension('o');
} else Verbs.AddExtension('c');
}
}
/***********************************************************************
* VariableExtensions(
* This function is called, if you have have set "v" as an extension for a certain location.
* Currently it is used for the OpenClose extension, but of course you can add your own variable extensions here,
* for example "turn on / turn off"
*
***********************************************************************/
static void Verbs::VariableExtensions()
{
// define here, which things will use a variable extension (>v)
// by default, it's only used for doors.
int r = player.Room;
Object*oo = Object.GetAtScreenXY(mouse.x, mouse.y);
int o=0;
if (oo != null) o = oo.ID;
Hotspot*hh = Hotspot.GetAtScreenXY(mouse.x, mouse.y);
int h = hh.ID;
// Other possible extensions could be: Turn On/Turn Off
// Open/Close Extension:
// Room | Hotspot |(Door_id)
//if (r==2 && h == 1) Verbs.OpenCloseExtension (10);
if (r==BernBernardsRoom && h == 1) Verbs.OpenCloseExtension(BernBernardsRoom, "door");
else if (r==BernHallSecondFloor && h == 1) Verbs.OpenCloseExtension (BernBritneysRoom, "door");
else if (r==BernHallSecondFloor && h == 2) Verbs.OpenCloseExtension (BernBernardsRoom, "door");
else if (r==BernHallSecondFloor && h == 3) Verbs.OpenCloseExtension (BernBedroom, "door");
else if (r==BernHallSecondFloor && h == 4) Verbs.OpenCloseExtension (BernBath, "door");
else if (r==BernBritneysRoom && h == 1) Verbs.OpenCloseExtension (BernBritneysRoom, "door");
else if (r==BernBedroom && h == 2) Verbs.OpenCloseExtension (BernBedroom, "door");
else if (r==BernBath && h == 2) Verbs.OpenCloseExtension (BernBath, "door");
else if (r==BernHallFirstFloor && h == 1) Verbs.OpenCloseExtension (BernLivingRoom, "door");
else if (r==BernHallFirstFloor && h == 2) Verbs.OpenCloseExtension (BernLibrary, "door");
else if (r==BernHallFirstFloor && h == 3) Verbs.OpenCloseExtension (BernStorageRoom, "door");
else if (r==BernStorageRoom && h == 1) Verbs.OpenCloseExtension (BernStorageRoom, "door");
else if (r==BernLibrary && h == 1) Verbs.OpenCloseExtension (BernLibrary, "door");
else if (r==BernLibrary && h == 2) Verbs.OpenCloseExtension (BernDiningRoom, "door");
else if (r==BernDiningRoom && h == 1) Verbs.OpenCloseExtension (BernDiningRoom, "door");
else if (r==BernDiningRoom && h == 2) Verbs.OpenCloseExtension (BernKitchen, "door");
else if (r==BernKitchen && h == 1) Verbs.OpenCloseExtension (BernKitchen, "door");
else if (r==BernLivingRoom && h == 1) Verbs.OpenCloseExtension (BernLivingRoom, "door");
else if (r==BernEntrance && h == 3) Verbs.OpenCloseExtension (BernEntrance, "door");
else if (r==BernEntrance && h == 2) Verbs.OpenCloseExtension (BernBasement1, "door");
else if (r==BernBasement1 && h == 2) Verbs.OpenCloseExtension (BernBasement2, "door");
else if (r==BernBasement2 && h == 1) Verbs.OpenCloseExtension (BernBasement2, "door");
else if (r==BernOutside && h == 1) Verbs.OpenCloseExtension (BernEntrance, "door");
else if (r==BernGarage && h == 1) Verbs.OpenCloseExtension (BernGarage, "door");
else if (r==BernOutside && o == 1) Verbs.OpenCloseExtension (46, "sprite");
}
In der Vergui.ash muss die Funktion mit den neuen Parameternamen ergänzt werden (Zeile 243).
verbgui.ash:
import static void OpenCloseExtension(int id, String type);