Autor Thema: Das altbekannte Gib-Problem  (Gelesen 2970 mal)

Endres

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1264
  • Geschlecht: Männlich
  • En|dres, der
    • ICQ Messenger - 230191486
    • MSN Messenger - enni_puschner@hotmail.de
    • Profil anzeigen
    • e7p.de
    • E-Mail
Das altbekannte Gib-Problem
« am: 06. Januar 2011, 18:04:53 »
Frage besonders an die Skriptkünstler (rulaman, Kruttan,...) der Community:

Ist es nicht Sinnvoll, den Programmierer entscheiden zu lassen, ob der Inventargegenstand bei Geben ins Inventar von dem jeweiligen anderen Spieler übertragen werden soll oder nicht?

Ich glaube wir hatten da schonmal so ein Problem. Und zwar scheinen mir die damit verbundenen Zeilen 1753-1771 nutzlos, da man die ja eh nicht gebrauchen kann, sobald man einen Charakter einbaut, dem nicht alles gegeben werden darf.

Die Zeilen im Überblick: (Mist, immernoch kein AGS-Sourcecode-Highlighting)
[ags]    else if ((GSagsusedmode == 4) && (GetLocationType (mouse.x, mouse.y) == 2) && isAction (eActGiveTo) )
    {
      gAktionText.TextColor = ActionLabelColorHighlighted;
         InventoryItem *invItem = player.ActiveInventory;
         
      if (GoToCharacter (charAt, 0, 1, 2))
      {
            if ( null != invItem )
               ItemGiven = invItem.ID;

        if (IsInteractionAvailable (mrx - GetViewportX (), mry - GetViewportY (), eModeUseinv) == 1)
        {
               charAt.RunInteraction(eModeUseinv);
        }
        GiveInv (ItemGiven, charAt);
        invItem = null;
      }
      SetAction (eActDefault);
    }[/ags]

Das Skript überprüft zwar, ob eine UseInv-Interaktion verfügbar ist und lässt diese auch laufen - Nichtsdestotrotz wird der Inventargegenstand zum Schluss trotzdem abgegeben. Wenn man das abgeben weglässt, könnte man gleich den ganzen else-if Block weglassen, da der folgende else-Block sowieso auf die Naheligende Aktion "UseInv" des Charakters verweist.

Deshalb plädiere ich dafür, dass diese Zeilen endgültig aus allen neuen Starterpacks verbannt werden, da sonst massiger Inventarschwund auftreten könnte.

Was meint ihr dazu?
« Letzte Änderung: 09. Januar 2011, 11:44:39 von Endres »


Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

Der Kompaniechef

  • volljähriger Tentakel
  • *****
  • Beiträge: 689
    • Profil anzeigen
Re: Das altbekannte Gib-Problem
« Antwort #1 am: 06. Januar 2011, 18:07:01 »
nunja das problem ist wirklich bekannt und nervt.(hatte es ja selber)
neuanfänger stehen völlig auf dem schlauch und wissen nicht wie das problem beheben werden kann.

Endres

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1264
  • Geschlecht: Männlich
  • En|dres, der
    • ICQ Messenger - 230191486
    • MSN Messenger - enni_puschner@hotmail.de
    • Profil anzeigen
    • e7p.de
    • E-Mail
Re: Das altbekannte Gib-Problem
« Antwort #2 am: 06. Januar 2011, 18:24:17 »
Mich wundert auch nur, dass es früher noch nicht passiert ist, obwohl es scheinbar ja auch im alten Starterpack drin ist.


Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

Bissiger Witzbold

  • volljähriger Tentakel
  • *****
  • Beiträge: 554
    • Profil anzeigen
Re: Das altbekannte Gib-Problem
« Antwort #3 am: 06. Januar 2011, 18:39:42 »
Der Bug tauchte früher nicht so häufig auf, weil er in den alten Starterpacks (2.62) beizeiten behoben wurde.
In den 2.72er Starterpacks war der Bug dann wieder weit verbreitet, vermutlich wurde da ein veraltetes Starterpack als Grundlage genommen.

Endres

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1264
  • Geschlecht: Männlich
  • En|dres, der
    • ICQ Messenger - 230191486
    • MSN Messenger - enni_puschner@hotmail.de
    • Profil anzeigen
    • e7p.de
    • E-Mail
Re: Das altbekannte Gib-Problem
« Antwort #4 am: 06. Januar 2011, 18:41:50 »
Dann ist es doch wohl mal an der Zeit ihn endlich zu beheben?  :cl


Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

rulaman

  • Moderator
  • Teenie Tentakel
  • *****
  • Beiträge: 354
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Das altbekannte Gib-Problem
« Antwort #5 am: 06. Januar 2011, 22:55:38 »
Dann warte ich mit der Umarbeitung bis die Sache feststeht.
Baden ist die einzige Möglichkeit, den Dreck der Füße an den Hals zu bekommen.

Endres

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1264
  • Geschlecht: Männlich
  • En|dres, der
    • ICQ Messenger - 230191486
    • MSN Messenger - enni_puschner@hotmail.de
    • Profil anzeigen
    • e7p.de
    • E-Mail
Re: Das altbekannte Gib-Problem
« Antwort #6 am: 06. Januar 2011, 23:09:52 »
Lass dir Zeit, ich werde dein Vorhaben im Tutorial erwähnen (und wenn es vollbracht ist natürlich auch wieder entfernen :P )


Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

mukk

  • kleiner Tentakel
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Das altbekannte Gib-Problem
« Antwort #7 am: 24. Mai 2011, 15:04:50 »
« Letzte Änderung: 24. Mai 2011, 23:06:47 von mukk »
Each year, vegetarians bully animals,
cheat in relationships, watch porno and cause pollution.
So join the fight now and stop the vegetarians.

rulaman

  • Moderator
  • Teenie Tentakel
  • *****
  • Beiträge: 354
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Das altbekannte Gib-Problem
« Antwort #8 am: 24. Mai 2011, 22:14:54 »
Habe mich gerade nochmal mit dem Gib-Problem auseinandergesetzt
und ein bischen damit rumgespielt.

Bin mittlerweile Endres' Auffassung, den Block zu entfernen.
Ich hatte ihn Testweise mal drinnengelassen und den Charakter hingehen lassen, aber das passt irgendwie nicht.
Das sollte im entsprechenden Charakter-Event haben.

Die anderen gemeldeten Fehler habe ich nachgebessert und bereits hochgeladen (Ebenso Police Molest; wird noch veröffentlicht, wenn das Gib-Problem übernommen wurde).

Grüße
Rulaman
Baden ist die einzige Möglichkeit, den Dreck der Füße an den Hals zu bekommen.

mukk

  • kleiner Tentakel
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Das altbekannte Gib-Problem
« Antwort #9 am: 29. Mai 2011, 15:46:06 »
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.

Zitat
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 :)
« Letzte Änderung: 29. Mai 2011, 16:26:08 von mukk »
Each year, vegetarians bully animals,
cheat in relationships, watch porno and cause pollution.
So join the fight now and stop the vegetarians.