Bòógieman hat geschrieben:kann es sein, dass in den starterpacks kleine fiese bugs versteckt sind, die zum absturz des spiels führen können?
[...] ich hatte gerade einen inventargegenstand angeklickt und dabei aber den mauscursor weiter bewegt
der klick hat die entsprechende funktion für die inventarklicks ausgelöst, aber als dann auf das inventarobjekt unter dem cursor zugegriffen werden sollte, war der cursor anscheinend schon wieder ausserhalb dieses objektes --> scriptfehler wegen ungültiger inventar-ID
anders kann ich mir diesen fehler nicht erklären, denn bisher hat dieses inventarobjekt schon ca. 1000mal problemlos funktionier
ist das vielleicht schon bekannt und kann man das irgendwie verhindern

Das Problem hatten wir auch schon (in allen Starterpacks). Das Script des MMM-GUIs schaut offenbar nach, welcher Inventargegenstand sich unter dem Mousecursor befindet, und wenn man die Maus beim klicken zu schnell bewegt, ist dort kein Gegenstand mehr, wenn das Script nachschaut und das Spiel stürzt ab.
Einen schmutzigen Fix haben wir für unsere neuste Folge bereits geschrieben (siehe die markierten Ergänzungen im folgenden Ausschnitt aus dem GlobalScript), hier wird abgefragt ob sich wirklich ein Gegenstand unter der Maus befindet und wenn nicht wird einfach gar nichts gemacht statt das Spiel abstürzen zu lassen.
Ganz fehlerfrei ist allerdings auch das nicht: Wenn man die Maus in der Zwischenzeit auf einen anderen Gegenstand bewegt hat, so wird dieser genommen statt dem ursprünglich ausgewählten (aber das ist ohne den Fix auch so).
--------
// if the mode is useinv and the mouse is over the active inv (like "use knife on knife")
}
else
{
used_action = global_action;
if (GetCursorMode () == 2)
{
if (isAction (A_USE) && IsInventoryInteractionAvailable (GSlocid, MODE_USE) == 1)
{
SetLabelColor (ACTION, 0, ActionLabelColorHighlighted);
RunInventoryInteraction (GSlocid, MODE_USE);
SetAction (A_DEFAULT);
}
else
if (GetInvAt (mouse.x, mouse.y) >= 0) SetActiveInventory (GSlocid);
}
else
{
GSagsusedmode = GetCursorMode ();
SetLabelColor (ACTION, 0, ActionLabelColorHighlighted);
if (GetInvAt (mouse.x, mouse.y) >= 0) RunInventoryInteraction (GSlocid, GetCursorMode ());
SetAction (A_DEFAULT);
}
}
}
else if (button == RIGHTINV)
--------
Keine Garantie auf Funktionstüchtigkeit, aber bisher scheint es bei uns zu funktionieren.