@Killerkid: Eher nicht. Dann würde das Spiel zwei Objekte der selben ID finden, womit es sicherlich ein Problem haben wird. Im besten Falle würde die neue ID die alte überschreiben, dann würden die REFs imho auch funktionieren wie gewollt. Aber im schlechtesten Fall stürzt das Spiel schon beim Einlesen des PlugIns ab.
Ich würd eher sagen ... lokale Scripte, kombiniert mit einem globalen wären sicherlich nett.
Begin _Bergbau_\"Mineralname\"
short flag
if ( OnActivate )
set flag to 1
StartScript \"_Bergbau_main\"
endif
if ( flag < 1 )
; spart evtl. Ressourcen
elseif ( flag == 1 )
set \"total\".\"_Bergbau_main\" to ( GetItemCount, \"Mineral_ID\" )
set flag to \"flag\".\"_Bergbau_main\"
elseif ( flag == 2 )
RemoveItem \"Mineral_ID\" 1
set flag to 1
set \"flag\".\"_Bergbau_main\" to 1
endif
End
So müsste das Main Script nur das Input dieses Scriptes nutzen, um seine Berechnungen durchzuführen. Durch das Setzen der lokalen Variable (auf 2) kann es das lokale Script zum Verringern der Menge auffordern und mit dem Setzen auf 0 ist die Geschichte vorbei (das Flipback von flag im Main Script kann wahlweise auch mit dem Flipback von total ersetzen, je nach dem, wie man das Script anlegt.
So würde das Spiel den Container behandeln wie jeden anderen auch, wer ihn ohne Erlaubnis aktiviert kriegt Ärger, wer nicht, der nicht ... weiß leider nicht genau, wie dein Script funktioniert ... aber man kann es auch so machen, dass der Spieler für jeden Versuch einmal das Objekt anklicken muss, wobei jedes Mal getestet wird, ob der Spieler erwischt wird oder nicht.
Ist aber alles möglich ;)
Edit: Hier vielleicht ein Versuch für die Version mit \"jedes-mal-anklicken\", wobei \"flag.glob == 2\" für das \"Hack\"-Event steht, \"flag.glob == 3\" für das \"Abbau\"-Event.
Das mit den leeren while-Schleifen ist neu, würde normalerweise das Script lahmlegen, heißt hier allerdings nur: \"Warte, bis globscript einen Schritt weiter ist\" (und das obwohl OnActivate nur einen Frame lang true ist ^^). Natürlich experimentell und nicht gestestet, kam mir aber grade so in den Sinn ;)
Begin _Bergbau_\"Mineralname\"
if ( OnActivate == 0 )
return
endif
short flag
if ( GetScriptRunning \"_Bergbau_main\" == 1 )
if ( flag == 1 )
set \"flag\".\"_Bergbau_main\" to 2
while ( \"flag\".\"_Bergbau_main\" == 2 )
endwhile
if ( \"flag\".\"_Bergbau_main\" == 3 )
RemoveItem \"Mineral_ID\" 1
endif
set \"total\".\"_Bergbau_main\" to ( GetItemCount, \"Mineral_ID\" )
while ( \"flag\".\"_Bergbau_main\" == 3 )
endwhile
set flag to \"flag\".\"_Bergbau_main\"
else
return ; vorerst
endif
else
StartScript \"_Bergbau_main\"
while ( \"flag\".\"_Bergbau_main\" == 0 )
endwhile
set \"total\".\"_Bergbau_main\" to ( GetItemCount, \"Mineral_ID\" )
set flag to \"flag\".\"_Bergbau_main\"
endif
End
Edit²: Ok ... mir ist eingefallen, man muss etwas aus dem Container nehmen, damit es \"illegal\" wird. Ließe sich wohl machen, wenn man die Zahl der Items speichert, sie alle per Script rausräumt und beim \"Abbau\"-Event den Container öffnet (vorher natürlich noch etwas Erz hineingetan).