Hi,
ich möchte nicht bei jedem Inventory-Object ein "look at"-Script machen ala "DisplaySpeechAt..", sondern nur eine Skript-Zeile, die den Text aus den Properties nimmt.
Krieg das aber irgendwie nicht gebacken, und wär für jeden Tipp dankbar..
Script-Frage: Look at Inv<--->properties
- Sinitrena
- Tastatursteuerer
- Beiträge: 678
- Registriert: 08.05.2004, 01:01
- Wohnort: Frankfurt
- Kontaktdaten:
Ich glaube du suchst nach unhandeld_event:
unhandled_event (int what, int type)
Called when an interaction is run, but no events are listed in the interaction window. This could be used to display a default "I can't do that" type of message. The values of WHAT and TYPE tell you what the player did.
The possible values are listed below:
WHAT TYPE Description
1 1 Look at hotspot
1 2 Interact with hotspot
1 3 Use inventory on hotspot
1 4 Talk to hotspot
1 7 Pick up hotspot
1 8 Cursor Mode 8 on hotspot
1 9 Cursor Mode 9 on hotspot
2 0 Look at object
2 1 Interact with object
2 2 Talk to object
2 3 Use inventory on object
2 5 Pick up object
2 6 Cursor Mode 8 on object
2 7 Cursor Mode 9 on object
3 0 Look at character
3 1 Interact with character
3 2 Speak to character
3 3 Use inventory on character
3 5 Pick up character
3 6 Cursor Mode 8 on character
3 7 Cursor Mode 9 on character
4 1 Look at nothing (ie. no hotspot)
4 2 Interact with nothing
4 3 Use inventory with nothing
4 4 Talk to nothing
5 0 Look at inventory
5 1 Interact with inventory (currently not possible)
5 2 Speak to inventory
5 3 Use an inventory item on another
5 4 Other click on inventory
Note that the "Character stands on hotspot" event does not trigger this function, and it will not be triggered if there is an "Any click" interaction defined. This function is not triggered if the player clicks on nothing (hotspot 0).
Wenn du bei look at nichts eingibst und dafür im global script ein unhandeled event für look at machst (am besten mit einem random* effekt, damit es nicht immer die gleiche Nachricht ist) erreichst du wohl was du willst.
*: Random
Random (int max)
Returns a random number between 0 and MAX. This could be useful to do various effects in your game.
NOTE: The range returned is inclusive - ie. if you do Random(3); then it can return 0, 1, 2 or 3.
Example:
int ran=Random(2);
if (ran==0) NewRoom(1);
else if (ran==1) NewRoom(2);
else NewRoom(3);
will change the current room to room 1,2 or 3 depending on a random result.
unhandled_event (int what, int type)
Called when an interaction is run, but no events are listed in the interaction window. This could be used to display a default "I can't do that" type of message. The values of WHAT and TYPE tell you what the player did.
The possible values are listed below:
WHAT TYPE Description
1 1 Look at hotspot
1 2 Interact with hotspot
1 3 Use inventory on hotspot
1 4 Talk to hotspot
1 7 Pick up hotspot
1 8 Cursor Mode 8 on hotspot
1 9 Cursor Mode 9 on hotspot
2 0 Look at object
2 1 Interact with object
2 2 Talk to object
2 3 Use inventory on object
2 5 Pick up object
2 6 Cursor Mode 8 on object
2 7 Cursor Mode 9 on object
3 0 Look at character
3 1 Interact with character
3 2 Speak to character
3 3 Use inventory on character
3 5 Pick up character
3 6 Cursor Mode 8 on character
3 7 Cursor Mode 9 on character
4 1 Look at nothing (ie. no hotspot)
4 2 Interact with nothing
4 3 Use inventory with nothing
4 4 Talk to nothing
5 0 Look at inventory
5 1 Interact with inventory (currently not possible)
5 2 Speak to inventory
5 3 Use an inventory item on another
5 4 Other click on inventory
Note that the "Character stands on hotspot" event does not trigger this function, and it will not be triggered if there is an "Any click" interaction defined. This function is not triggered if the player clicks on nothing (hotspot 0).
Wenn du bei look at nichts eingibst und dafür im global script ein unhandeled event für look at machst (am besten mit einem random* effekt, damit es nicht immer die gleiche Nachricht ist) erreichst du wohl was du willst.
*: Random
Random (int max)
Returns a random number between 0 and MAX. This could be useful to do various effects in your game.
NOTE: The range returned is inclusive - ie. if you do Random(3); then it can return 0, 1, 2 or 3.
Example:
int ran=Random(2);
if (ran==0) NewRoom(1);
else if (ran==1) NewRoom(2);
else NewRoom(3);
will change the current room to room 1,2 or 3 depending on a random result.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Deine Frage lässt mich wieder hoffen...endlich mal eine vernünftige, intelligente Frage, die auch noch zeigt, dass Du Dir eigene Gedanken gemacht hast. (Das mein ich ernst)
Das einzige, was noch fehlt: Welche AGS Version benutzt Du? MMMania-Starterpack oder nicht?
Genau diese (sehr elegante) Methode benutze ich übrigens auch
Alles AGS 2.62-code:
Im Global Script gibt es die Funktion on_mouse_click, im defaultgame sieht der Teil, der einen Linksklick behandelt, so aus:ProcessClick() ist eine eingebaute Funktion, die sich nicht verändern lässt. Man muss also alles manuell coden. Bei mir sieht das so aus:
Ganz am Anfang von on_mouse_click:Dann der LinksKlick-Teil:
Wenn du jetzt im Properties Editor ein Property namens description hinzufügst, wird immer der Text angezeigt, der dort steht. Wenn ich allerdings wollte, dass doch mehr passiert, hab ich dort process eingetragen, in diesem Fall wird dann das Interaction event aufgerufen.
EDIT: hab gerade gesehen, dass Du inventory items gemeint hast
hier (auch in on_mouse_click):
Rechtsklick auf Inventory item -> Character sagt Beschreibung
diese ist process -> stattdessen wird Interaction event aufgerufen
Das einzige, was noch fehlt: Welche AGS Version benutzt Du? MMMania-Starterpack oder nicht?
Genau diese (sehr elegante) Methode benutze ich übrigens auch
Alles AGS 2.62-code:
Im Global Script gibt es die Funktion on_mouse_click, im defaultgame sieht der Teil, der einen Linksklick behandelt, so aus:
Code: Alles auswählen
else if (button == LEFT) {
ProcessClick(mouse.x, mouse.y, mouse.Mode );
}
Ganz am Anfang von on_mouse_click:
Code: Alles auswählen
int x=mouse.x;
int y=mouse.y;
int obj=GetObjectAt(x, y);
int cha=GetCharacterAt(x,y);
int hot=GetHotspotAt(x,y);
string do;
Code: Alles auswählen
if (button==LEFT)
{
if (GetCursorMode()==MODE_LOOK)
{
StrCopy(do, "ns");
if (hot>0) // look at hotspot
{
GetHotspotPropertyText(hot, "description", do);
}
else if (obj>-1) // look at object
{
GetObjectPropertyText(obj, "description", do);
}
else if (cha>0) // look at character
{
GetCharacterPropertyText(cha, "description", do);
}
if (StrComp(do,"ns")==0)
{
DisplaySpeech(EGO, "You see nothing special.");
}
else if (StrComp(do,"process")==0)
{
ProcessClick(mouse.x, mouse.y, MODE_LOOK);
}
else
{
DisplaySpeech(EGO, do);
}
}
else
{
ProcessClick(mouse.x, mouse.y, GetCursorMode());
}
}
EDIT: hab gerade gesehen, dass Du inventory items gemeint hast
hier (auch in on_mouse_click):
Code: Alles auswählen
if (button==RIGHTINV) {
if (game.inv_activated>0) {
string desc;
GetInvPropertyText(game.inv_activated, "description", desc);
if (StrComp(desc, "process")==0) {
RunInventoryInteraction(game.inv_activated, MODE_LOOK);
}
else {
DisplaySpeech(EGO, desc);
}
}
}
diese ist process -> stattdessen wird Interaction event aufgerufen
Use gopher repellent on funny little man
- TheIncredibleLovis
- Hobby-Archäologe
- Beiträge: 208
- Registriert: 12.04.2005, 18:08
- Wohnort: Hamburg, Regen, Frisur hält!