Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Thema gestartet von: busfahrer am 25. September 2012, 16:17:40

Titel: fehler beim geben von sachen
Beitrag 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

Zitat von: khrismuc
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?
Titel: Re: fehler beim geben von sachen
Beitrag von: busfahrer am 01. Oktober 2012, 14:29:53
Bitte nochmals um hilfe. Habe das eingangsposting verändert. ^^
Titel: Re: fehler beim geben von sachen
Beitrag von: KhrisMUC am 05. Oktober 2012, 14:53:37
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]