inventar problem...
-
- Verpackungs-Wegwerfer
- Beiträge: 76
- Registriert: 09.04.2006, 17:51
- Kontaktdaten:
inventar problem...
ich hab ein problem und zwar habe ich ein aktions-menü wie in monkey-island 3 gemacht (das funktioniert auch problemlos)
aber es funktioniert eben nur in der "umgebung", also nur in der spielwelt und nicht im inventar...
ich habe ein gui erstellt das ständig unten angezeigt wird
es enthält ein Inventarfenster, Pfeile um im Inventar weiterzuschalten und 3 Knöpfe zum Speichern, Laden und Beenden
Das funktioniert auch alles so wie ich es will, bis auf das inventarfenster...
wenn man ein item einsammelt wird es ganz normal darin angezeigt, und auch der name des items wird angezeigt wenn man mit der maus darüber fährt, aber wenn man mit rechts darauf klickt (rechtsklick ist der auslöser für das aktionsmenü) wird das menü nicht aufgerufen
(die Z-Position stimmt aber, das Aktionsmenü ist vor den anderen menüs)
Wie mache ich, dass mein aktionsmenü (man kann wählen zwischen anschauen, sprechen und interaktion) auch im inventar funktioniert?
noch ne andere frage:
wie mache ich, dass man ein item im inventar mit linksklick auswählen kann um es dann mit anderen dingen zu benutzen?
und wie mache ich es, dass der mauszeiger dabei zum item wird?
ich hoffe ihr könnt mir helfen.
aber es funktioniert eben nur in der "umgebung", also nur in der spielwelt und nicht im inventar...
ich habe ein gui erstellt das ständig unten angezeigt wird
es enthält ein Inventarfenster, Pfeile um im Inventar weiterzuschalten und 3 Knöpfe zum Speichern, Laden und Beenden
Das funktioniert auch alles so wie ich es will, bis auf das inventarfenster...
wenn man ein item einsammelt wird es ganz normal darin angezeigt, und auch der name des items wird angezeigt wenn man mit der maus darüber fährt, aber wenn man mit rechts darauf klickt (rechtsklick ist der auslöser für das aktionsmenü) wird das menü nicht aufgerufen
(die Z-Position stimmt aber, das Aktionsmenü ist vor den anderen menüs)
Wie mache ich, dass mein aktionsmenü (man kann wählen zwischen anschauen, sprechen und interaktion) auch im inventar funktioniert?
noch ne andere frage:
wie mache ich, dass man ein item im inventar mit linksklick auswählen kann um es dann mit anderen dingen zu benutzen?
und wie mache ich es, dass der mauszeiger dabei zum item wird?
ich hoffe ihr könnt mir helfen.
- Campusanis
- Hobby-Archäologe
- Beiträge: 108
- Registriert: 06.01.2003, 13:22
- Kontaktdaten:
Kennst du dich ein bisschen mit dem Script aus? Das mit dem Inventar als Mauszeiger etc. ist ganz einfach. Einfach in on_mouse_click das hier:
if (button == LEFTINV) {
SetActiveInventory(game.inv_activated);
}
"Handle inventory clicks in script" muss dazu aktiviert sein. Ist es das nicht, geht das eigentlich automatisch.
Das Aktionsmenü ist wohl die MI 3 Münze? Den Effekt im Inventar hinzukriegen, ist eine Mordsplackerei. Wenn du irgendeinen guten Weg drumherum findest, nutze ihn! Ich hab ungefähr zwei Wochen versucht, die Münze ins Inventar zu kriegen, um dann am Ende von vorn anzufangen und eine andere Lösung zu benutzen. Wenn du willst, geb ich dir gerne meinen verkorksten Versuch.
if (button == LEFTINV) {
SetActiveInventory(game.inv_activated);
}
"Handle inventory clicks in script" muss dazu aktiviert sein. Ist es das nicht, geht das eigentlich automatisch.
Das Aktionsmenü ist wohl die MI 3 Münze? Den Effekt im Inventar hinzukriegen, ist eine Mordsplackerei. Wenn du irgendeinen guten Weg drumherum findest, nutze ihn! Ich hab ungefähr zwei Wochen versucht, die Münze ins Inventar zu kriegen, um dann am Ende von vorn anzufangen und eine andere Lösung zu benutzen. Wenn du willst, geb ich dir gerne meinen verkorksten Versuch.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
SetActiveInventory ist alter Code, der neue Befehl lautet player.ActiveInventory = iItem;
damit der Rechtsklick auch im Inventar funktioniert, musst Du nur aus if (button == eMouseRight) ein if (button == eMouseRight || button == eMouseRightInv) machen.
Das angeklickte Item erhältst Du mit InventoryItem.GetAtScreenXY(mouse.x, mouse.y).
damit der Rechtsklick auch im Inventar funktioniert, musst Du nur aus if (button == eMouseRight) ein if (button == eMouseRight || button == eMouseRightInv) machen.
Das angeklickte Item erhältst Du mit InventoryItem.GetAtScreenXY(mouse.x, mouse.y).
Use gopher repellent on funny little man
-
- Verpackungs-Wegwerfer
- Beiträge: 76
- Registriert: 09.04.2006, 17:51
- Kontaktdaten:
irgendwie bekomme ich das nicht hin...
alles funzt wie ich es haben will, außer eben der rechtsklick im menü...
wenn ich rechts klicke funktioniert folgendes:
das menü an sich das hervorgerufen wird funktioniert ABER es wir nicht angezeigt o.O"
d.h. die Funktionen des menüs funktionieren aber das gui wird nicht angezeigt (die Z-Position stimmt, wenn ich einen pixel über dem Inventar klicke wird das gui angezeigt und überlappt das inventar)
der code im global script (oder zumindest der relevante teil):
wie man sieht wird das menü im teil on_mouse_klick aufgerufen und in repeatedly_execute wieder weggemacht...
die variable menü (entweder 0 oder 1) sagt ob sich das menü auf der map (0) oder im inventar (1) befindet...
die variablen sind alle richtig eingestellt, es kommt kein fehlermeldung, funktionieren tut es trotzdem nich -.-
wie gesagt ist das einzige problem, dass das Gui2 im inventar nicht angezeigt wird (trotz gGui2.Visible = true; )
könnt ihr mir sagen was ich falsch mache?
alles funzt wie ich es haben will, außer eben der rechtsklick im menü...
wenn ich rechts klicke funktioniert folgendes:
das menü an sich das hervorgerufen wird funktioniert ABER es wir nicht angezeigt o.O"
d.h. die Funktionen des menüs funktionieren aber das gui wird nicht angezeigt (die Z-Position stimmt, wenn ich einen pixel über dem Inventar klicke wird das gui angezeigt und überlappt das inventar)
der code im global script (oder zumindest der relevante teil):
Code: Alles auswählen
#sectionstart repeatedly_execute // DO NOT EDIT OR REMOVE THIS LINE
function repeatedly_execute() {
if (mouse.IsButtonDown(eMouseRight) == 0) { // maus loslassen
GUIControl *theControl = GUIControl.GetAtScreenXY(mouse.x, mouse.y);
if (theControl == look) {
gGui2.Visible = false;
if (menu == 0) { ProcessClick(varx,vary,eModeLookat); }
else if (menu == 1) { inventory[game.inv_activated].RunInteraction(eModeLookat); }
}
else if (theControl == talk) {
gGui2.Visible = false;
if (menu == 0) { ProcessClick(varx,vary,eModeTalkto); }
else if (menu == 1) { inventory[game.inv_activated].RunInteraction(eModeTalkto); }
}
else if (theControl == grab) {
gGui2.Visible = false;
if (menu == 0) { ProcessClick(varx,vary,eModeInteract); }
else if (menu == 1) { inventory[game.inv_activated].RunInteraction(eModeInteract); }
}
else { gGui2.Visible = false; }
}
}
#sectionend repeatedly_execute // DO NOT EDIT OR REMOVE THIS LINE
#sectionstart on_mouse_click // DO NOT EDIT OR REMOVE THIS LINE
function on_mouse_click(MouseButton button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if (IsGamePaused() == 1) {
// Game is paused, so do nothing (ie. don't allow mouse click)
}
else if (button == eMouseLeft) {
ProcessClick(mouse.x, mouse.y, mouse.Mode );
mouse.Mode = eModeWalkto ;
}
else if (button == eMouseLeftInv) {
if (mouse.Mode == eModeWalkto) {
character[EGO].ActiveInventory = InventoryItem.GetAtScreenXY(mouse.x, mouse.y);
mouse.Mode = eModeUseinv ;
}
else {
inventory[game.inv_activated].RunInteraction(mouse.Mode);
}
}
else if (button == eMouseRight) { // right-click, call menu
menu = 0;
gGui2.Visible = true;
varx = mouse.x ;
vary = mouse.y ;
showx = varx ;
showy = vary ;
if (varx > 298) {
showx = 298 ; }
if (vary > 206) {
showy = 206 ; }
gGui2.SetPosition(showx,showy);
}
else if (button == eMouseRightInv) { // inventory-right-click, call menu
menu = 1;
varx = mouse.x ;
vary = mouse.y ;
showx = varx ;
showy = vary ;
if (varx > 298) {
showx = 298 ; }
if (vary > 206) {
showy = 206 ; }
gGui2.SetPosition(showx,showy);
gGui2.Visible = true;
}
}
#sectionend on_mouse_click
die variable menü (entweder 0 oder 1) sagt ob sich das menü auf der map (0) oder im inventar (1) befindet...
die variablen sind alle richtig eingestellt, es kommt kein fehlermeldung, funktionieren tut es trotzdem nich -.-
wie gesagt ist das einzige problem, dass das Gui2 im inventar nicht angezeigt wird (trotz gGui2.Visible = true; )
könnt ihr mir sagen was ich falsch mache?
-
- Verpackungs-Wegwerfer
- Beiträge: 76
- Registriert: 09.04.2006, 17:51
- Kontaktdaten:
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Es hat bisschen gedauert, aber jetzt hat's Klick gemacht
Ohne die Message wird das GUI von der repeatedly_execute sofort wieder ausgeschaltet. Das geht so schnell, dass man es nicht mal aufblinken sieht.
D.h. die Abfrage der GUIControl funktioniert nicht richtig, wenn das GUI über dem Inventar aufgeht.
Mach in das else-Statement ein Display("%d", theControl.ID); rein, bevor das GUI ausgeschaltet wird. Das sollte helfen.
Ohne die Message wird das GUI von der repeatedly_execute sofort wieder ausgeschaltet. Das geht so schnell, dass man es nicht mal aufblinken sieht.
D.h. die Abfrage der GUIControl funktioniert nicht richtig, wenn das GUI über dem Inventar aufgeht.
Mach in das else-Statement ein Display("%d", theControl.ID); rein, bevor das GUI ausgeschaltet wird. Das sollte helfen.
Use gopher repellent on funny little man
-
- Verpackungs-Wegwerfer
- Beiträge: 76
- Registriert: 09.04.2006, 17:51
- Kontaktdaten:
jetzt passiert folgendes:
wenn man den display befehl nach dem gui.visible = true setzt wird das Gui angezeigt, zudem wird eine 2 (die gui.ID) als text angezeigt (das ist mir relativ egal), außerdem ist es klar, weil es sich ja um die display-funktion handelt
aber:
das gui besteht aus 3 buttons die sich, wenn man mit der maus drüber geht ändern, das funzt hier nicht, weil man sich dann kurz im wait-modus befindet und die buttons einfach so bleiben wie sie am anfang sind....
wenn ich den befehl (display...) in den else-teil ganz am ende des repeatedly execute mache wird ständig 2 als nachricht angezeigt und nichts mehr funzt ^^ (ist ja irgendwie auch logisch)
wenn man den display befehl nach dem gui.visible = true setzt wird das Gui angezeigt, zudem wird eine 2 (die gui.ID) als text angezeigt (das ist mir relativ egal), außerdem ist es klar, weil es sich ja um die display-funktion handelt
aber:
das gui besteht aus 3 buttons die sich, wenn man mit der maus drüber geht ändern, das funzt hier nicht, weil man sich dann kurz im wait-modus befindet und die buttons einfach so bleiben wie sie am anfang sind....
wenn ich den befehl (display...) in den else-teil ganz am ende des repeatedly execute mache wird ständig 2 als nachricht angezeigt und nichts mehr funzt ^^ (ist ja irgendwie auch logisch)
Zuletzt geändert von pikubik am 14.04.2006, 19:56, insgesamt 1-mal geändert.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Solange die 2 angezeigt wird, ist das Script geblockt, deswegen ändern sich die Buttons auch nicht.
Welcher Button ist Nummer 2 in der Verbcoin?
Außerdem scheint die mouse.IsButtonDown-Abfrage nicht zu funktioneren. Vielleicht ein bug?
Ist mir aber ehrlich gesagt jetzt zu mühsam, so ein Problem über ein Forum zu lösen, wenn ich einen Blick auf das Spiel werfen könnte, würds schneller gehen.
Ich klau auch nix und lösch es danach wieder, versprochen.
Welcher Button ist Nummer 2 in der Verbcoin?
Außerdem scheint die mouse.IsButtonDown-Abfrage nicht zu funktioneren. Vielleicht ein bug?
Ist mir aber ehrlich gesagt jetzt zu mühsam, so ein Problem über ein Forum zu lösen, wenn ich einen Blick auf das Spiel werfen könnte, würds schneller gehen.
Ich klau auch nix und lösch es danach wieder, versprochen.
Use gopher repellent on funny little man
-
- Verpackungs-Wegwerfer
- Beiträge: 76
- Registriert: 09.04.2006, 17:51
- Kontaktdaten: