Ich hab wahrscheinlich n Kollateralschaden. Ich habe den oben genannten Block ausgeschaltet und kriege jetzt in unregelmäßigen Abständen einen nicht reproduzierbaren crash im Script
[ags]
else if (button == LEFTINV)
{
...
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 SetActiveInventory (GSlocid); //// <----In dieser Zeile meldet AGS den Fehler
}
else
{
GSagsusedmode = GetCursorMode ();
SetLabelColor (ACTION, 0, ActionLabelColorHighlighted);
RunInventoryInteraction (GSlocid, GetCursorMode ());
SetAction (A_DEFAULT);
}
}
...
}
[/ags]
Siehe Script für die Zeile, in der AGS den Fehler meldet. Passieren tut es anscheinend zufällig, beim Anschauen von Objekten sowie beim Benutzen von Inventargegenständen.
An error has occurred. Please contact the game author for support, as this is likely to be a scripting error and not a bug in AGS.
(ACI version 3.12.1074)
in "GlobalScript.asc", line 1470
Error: SetActiveInventory: character doesn't have any of that inventory
Der zitierte Block steht im selben Abschnitt wie der von endres genannte in der
[ags]function on_mouse_click (int button)[/ags]
Hier nochmal was ich per /*...*/ abgeschaltet habe:
[ags]else if ((GSagsusedmode == 4) && (GetLocationType (mouse.x, mouse.y) == 2) && isAction (A_GIVE_TO) && (GetCharacterAt (mouse.x, mouse.y) < 7))
{
SetLabelColor (ACTION, 0, ActionLabelColorHighlighted);
if (GoToCharacter (GSlocid, 0, 1, 2))
{
ItemGiven = character [GetPlayerCharacter ()].activeinv;
if (IsInteractionAvailable (mrx - GetViewportX (), mry - GetViewportY (), MODE_USEINV) == 1)
{
RunCharacterInteraction (GSlocid, MODE_USEINV);
}
GiveInv (ItemGiven, GSlocid);
character [GetPlayerCharacter ()].activeinv = -1;
}
SetAction (A_DEFAULT);
}
[/ags]
...daher geh ich ma davon aus, dass das irgendwie zusammen hängt, aber wie?
Bitte um Hilfe!
Edit: Wenn ich das richtig verstehe kommt der Fehler, weil das Script versucht, ein Objekt/Hotspot/Charakter, wasauchimmer, als Inventargegenstand zu benutzen....kann das sein?
Also könnte ich das ganze stoppen, wenn ich die besagte Zeile so bedinge:
else if (GetInvAt (mouse.x, mouse.y) >= 0) SetActiveInventory (GSlocid);
Problem is halt, der Crash ist nicht reproduzierbar...d.h. ich brauche hier nen Fachman der mir sagt ob das wirklich klappt