1.) bin mir nicht sicher ob ich das richtig verstanden habe, aber ich versuch's trotzdem.

Du hättest einerseitzt die Möglichkeit einen OnAdd-Block zu verwenden, der wird immer gestartet, wenn das Item einem Inventar (welches kann durch eine Parameterangabe genauer bestimmt werden) hinzugefügt wird.
Das Skript muss dafür auf das Objekt um das es geht.

Evtl. musst du das ganze noch in einen OnSell- und OnActivate-Block kopieren.

Code:
scn CheckObjectScript

Begin OnAdd player
 ;Skript für's hinzufügen
End

Begin OnActivate
 if ( IsActionRef Player )
  ;Skript für's hinzufügen
 endif
 Activate
End


Alternativ kannst du auch mit einem Gamemode/Menumode-Block arbeiten, in dem du die Anzahl per GetItemCount abfragst.

Nachteil:
Das Skript läuft ständig

Vorteil:
Man kann mehrere Objekte in ein Skript packen --> imho einfacher zu handeln
Ich bin mir nicht sicher, ob ich oben alle möglichkeiten des hinzufügens erwischt habe

Code:
scn CheckObjectScript

short DoOnce
floate fQuestDelayTime
short Count1
ref Object1
short Count2
ref Object2

Begin Gamemode
 if ( DoOnce )
  if ( Count1 != Player.GetItemCount Object1 )
   if ( Count1 < Player.GetItemCount Object1 )
    ;Skript, falls der Spieler eines/mehrere Exemplare von Object1 hinzubekommen hat
   else
    ;Skript, falls der Spieler eines/mehrere Exemplare von Object1 abgelegt/verkauft/etc. hat
   endif
   set Count1 to Player.GetItemCount Object1
  endif
  if ( Count2 != Player.GetItemCount Object2 )
   if ( Count2 < Player.GetItemCount Object2 )
    ;Skript, falls der Spieler eines/mehrere Exemplare von Object2 hinzubekommen hat
   else
    ;Skript, falls der Spieler eines/mehrere Exemplare von Object2 abgelegt/verkauft/etc. hat
   endif
   set Count2 to Player.GetItemCount Object2
  endif
 else
  set fQuestDelayTime to 2.5                  ;kann auch ein geringerer/größerer Wert sein. Bestimmt das Zeitintervall in der das Skript abläuft.
  set Object1 to [Object-ID des 1. Objekts]
  set Object2 to [Object-ID des 2. Objekts]
  set DoOnce to 1
 endif
End

Begin Menumode
 if ( DoOnce )
  if ( Count1 != Player.GetItemCount Object1 )
   if ( Count1 < Player.GetItemCount Object1 )
    ;Skript, falls der Spieler eines/mehrere Exemplare von Object1 hinzubekommen hat
   else
    ;Skript, falls der Spieler eines/mehrere Exemplare von Object1 abgelegt/verkauft/etc. hat
   endif
   set Count1 to Player.GetItemCount Object1
  endif
  if ( Count2 != Player.GetItemCount Object2 )
   if ( Count2 < Player.GetItemCount Object2 )
    ;Skript, falls der Spieler eines/mehrere Exemplare von Object2 hinzubekommen hat
   else
    ;Skript, falls der Spieler eines/mehrere Exemplare von Object2 abgelegt/verkauft/etc. hat
   endif
   set Count2 to Player.GetItemCount Object2
  endif
 else
  set fQuestDelayTime to 2.5                  ;kann auch ein geringerer/größerer Wert sein. Bestimmt das Zeitintervall in der das Skript abläuft.
  set Object1 to [Object-ID des 1. Objekts]
  set Object2 to [Object-ID des 2. Objekts]
  set DoOnce to 1
 endif
End