Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: busfahrer am 25. September 2012, 16:17:40
-
hallo zusammen
ich hätt da ein problem mit dem Schulstarterpack in ags 3.2.1. und zwar folgendes. wenn ich jemandem was gebe (mit gib) läuft der Player-charakter im Kreis herum und verschenkt sein item sinnloserweise. mit benutze klappts. Ich habe hier im forum das gefunden: http://www.maniac-mansion-mania.de/forum/index.php?topic=19.msg147#msg147
Ich hab den betreffenden Teil im global script gefunden: 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);
}
1. Man kann nur den Charakteren 1-6 etwas geben (klar), muss man also ändern (1. if-Abfrage)
2. Man muss die Character-Interaction Use inventory on character benutzen, nicht AnyClick.
3. Durch Abfrage einer GlobalInt muss man gegebenenfalls verhindern, dass das Item den Besitzer wechselt.
Man könnte das script auch pauschal so ändern: if (IsInteractionAvailable (mrx - GetViewportX (), mry - GetViewportY (), MODE_USEINV) == 1)
{
RunCharacterInteraction (GSlocid, MODE_USEINV);
}
else
{
GiveInv (ItemGiven, GSlocid);
character [GetPlayerCharacter ()].activeinv = -1;
}
}
Wenn der NPC das Item tatsächlich erhalten soll, entweder keine Interaction einbauen, oder es ihm in dieser übergeben.
Das sind aber alte codes.^^ Habe versucht das auf neue Skriptsprache zu übertragen, ist das richtig so?:
charAt.RunInteraction(GSagsusedmode);
SetAction (eActDefault);
}
if (IsInteractionAvailable (mrx - GetViewportX (), mry - GetViewportY (), eModeUseinv) == 1)
{
charAt.RunInteraction(eModeUseinv);
}
else
{
GiveInv (ItemGiven, charAt);
player.ActiveInventory(-1);
}
}
else
{
Das blöde ist, ich bekomme beim Speichern nen parse-error. Kann mich jemand korrigieren?
-
Bitte nochmals um hilfe. Habe das eingangsposting verändert. ^^
-
Wenn Du einen Fehler bekommst, IMMER den Wortlaut und die Zeile posten.
Ich schätze mal, der Fehler kommt hier:
[ags] player.ActiveInventory(-1);[/ags]
Es muss heißen:
[ags] player.ActiveInventory = null;[/ags]