Allgemein
News
News-Archiv
Partner
Netzwerk
Banner
Header
Media
Downloads
Impressum

The Elder Scrolls
Arena
Daggerfall
Spin-offs
Romane
Jubiläum
Reviews
Welt von TES
Lore-Bibliothek
Namens-
generator

FRPGs

Elder Scrolls Online
Allgemein
Fraktionen
Charakter
Kargstein
Technik
Tamriel-
Manuskript

Media

Skyrim
Allgemein
Lösungen
Tipps & Tricks
Steam-Kniffe
Review
Media
Plugins & Mods

Oblivion
Allgemein
Lösungen
Tipps & Tricks
Technik
Charakter
Media
Plugins & Mods
Kompendium

Morrowind
Allgemein
Lösungen
Tipps & Tricks
Media
Plugins & Mods

Foren
The Elder Scrolls Online
Hilfe & Diskussion

Skyrim
Hilfe & Diskussion
Plugins & Mods

Ältere TES-Spiele
TES-Diskussion
Oblivion-Plugins
Morrowind-Plugins

Community
Taverne zum Shalk
Adventures of Vvardenfell
Tales of Tamriel
Ergebnis 1 bis 15 von 15

Thema: Maximale Scriptlänge

  1. #1

    Maximale Scriptlänge

    Gibt's eine Möglichkeit diese zu umgehen?

  2. #2
    Abgesehen von OBSE hast du mehrere Möglichkeiten.

    * Du kannst du Scripte auslagern. Bedeutet geregelt über Globals das nächst in Gang setzen.
    * Du kannst die Leerzeichen (Tabs) entfernen. Eine irrige Meinung ist die Zeilenbeschränkung. Die Scripte sind aber auf Zeichen Beschränkt. (ca. 32.000 pro Script) Dazu zählen auch die Tabs. Also näher zusammenrücken, bringt eine Menge.

  3. #3
    Zitat Zitat von Eddy Kaschinski Beitrag anzeigen
    Abgesehen von OBSE hast du mehrere Möglichkeiten.

    * Du kannst du Scripte auslagern. Bedeutet geregelt über Globals das nächst in Gang setzen.
    * Du kannst die Leerzeichen (Tabs) entfernen. Eine irrige Meinung ist die Zeilenbeschränkung. Die Scripte sind aber auf Zeichen Beschränkt. (ca. 32.000 pro Script) Dazu zählen auch die Tabs. Also näher zusammenrücken, bringt eine Menge.
    Das mit den Tabs würde nichts bringen, dazu sind zu viele Zeichen im Script.

    Über Globals hat's bei mir bis jetzt noch nicht funktioniert. Gibt's da wieder irgendetwas besonderes, was man bei Message Boxes beachten muss?

  4. #4
    Die Abfrage nach GetButtonPressed muss im gleichen Script wie der MessageBox-Befehl stehen.

    Für das Auslagern würde ich aber eher Activators empfehlen, da der OnActivate-Block nach einem Activate [Ref], 1 sofort ausgeführt wird und man nicht einen Frame auf das Ergebnis warten muss.
    Nachteil ist, dass mit der normalen Activate-Funktion nur 5-6 pro Frame möglich sind.
    Gleiches gilt für QuestStages & den SetStage-Befehl.

    Zeig mal dein Script her, dann lässt sich da eher was machen.

  5. #5
    Zitat Zitat von Low Post Beitrag anzeigen
    Die Abfrage nach GetButtonPressed muss im gleichen Script wie der MessageBox-Befehl stehen.

    Für das Auslagern würde ich aber eher Activators empfehlen, da der OnActivate-Block nach einem Activate [Ref], 1 sofort ausgeführt wird und man nicht einen Frame auf das Ergebnis warten muss.
    Nachteil ist, dass mit der normalen Activate-Funktion nur 5-6 pro Frame möglich sind.
    Gleiches gilt für QuestStages & den SetStage-Befehl.

    Zeig mal dein Script her, dann lässt sich da eher was machen.
    Das, das zu viel Zeichen hat? Ich kürz das mal auf das wichtigste:

    Code:
    scn 00AttributeScript
    
    short Button
    
    Begin OnEquip
    
    Messagebox "asdf", "1", "2", "3", "4", "5", "6", "7", "8", "9"
    
    end
    
    Begin MenuMode 1002
    
    set Button to GetButtonPressed
    	if Button == -1
    		return
    	elseif Button == 0
    		if player.GetBaseAV Strength <= 25
    			player.removeitem 01032ABC 1
    				player.ModPCAttribute Strength 5
    					player.ModPCSkill Blade 1
    						player.ModPCSkill Blunt 1
    							player.ModPCSkill HandToHand 1
    		elseif player.GetBaseAV Strength <= 50 && player.GetBaseAV Strength > 25 && player.GetItemCount 01032ABC >= 2
    			player.removeitem 01032ABC 2
    				player.ModPCAttribute Strength 5
    					player.ModPCSkill Blade 1
    						player.ModPCSkill Blunt 1
    							player.ModPCSkill HandToHand 1
    		elseif player.GetBaseAV Strength <= 75 && player.GetBaseAV Strength > 50 && player.GetItemCount 01032ABC >= 3
    			player.removeitem 01032ABC 3
    				player.ModPCAttribute Strength 5
    					player.ModPCSkill Blade 1
    						player.ModPCSkill Blunt 1
    							player.ModPCSkill HandToHand 1
    		elseif player.GetBaseAV Strength < 100 && player.GetBaseAV Strength > 75 && player.GetItemCount 01032ABC >= 4
    			player.removeitem 01032ABC 4
    				player.ModPCAttribute Strength 5
    					player.ModPCSkill Blade 1
    						player.ModPCSkill Blunt 1
    							player.ModPCSkill HandToHand 1
    		elseif player.GetBaseAV Strength < 100 && player.GetBaseAV  Strength > 94 && player.GetItemCount 01032ABC >= 4
    			player.removeitem 01032ABC 4
    				player.SetAV Strength 100
    					player.ModPCSkill Blade 1
    						player.ModPCSkill Blunt 1
    							player.ModPCSkill HandToHand 1
    		elseif player.GetBaseAV Strength == 100
    			Message "Ihr könnt eure Fertigkeiten nicht über 100 steigern"
    		endif
    Ab hier passiert eigentlich immer genau das gleiche, nur die einzelnen Level der Fähigkeiten werden abgefragt und die Befehle dementsprechend geändert. Danach geht es mit den weiteren Attributen weiter.
    	endif
    
    end
    Das Script an sich funktioniert.

  6. #6
    Lässt sich leicht auslagern:

    Code:
    scn 00AttributeScript
    
    short Button
    
    Begin OnEquip
    
    Messagebox "asdf", "1", "2", "3", "4", "5", "6", "7", "8", "9"
    
    end
    
    Begin MenuMode 1002
    
    set Button to GetButtonPressed
    	if Button == -1
    		return
    	elseif Button == 0
    		[Activator].Activate Player, 1
    	endif
    End
    Den Activator stellst du in irgendeine Dummy-Zelle, machst ihn zu einer Persistent Reference und gibst dem ein Script wie dieses:
    Code:
    scn [ActivatorScript]
    
    Begin OnActivate
    	if player.GetBaseAV Strength <= 25
    		player.removeitem 01032ABC 1
    		player.ModPCAttribute Strength 5		;player als Calling Reference anzugeben ist hier sinnlos. Bei ModActorValue währe es nötig, ModPCAttribute beeinflusst aber immer den Spieler
    		player.ModPCSkill Blade 1	;gleiches hier
    		player.ModPCSkill Blunt 1
    		player.ModPCSkill HandToHand 1
    	elseif player.GetBaseAV Strength <= 50 && player.GetBaseAV Strength > 25 && player.GetItemCount 01032ABC >= 2
    		player.removeitem 01032ABC 2
    		player.ModPCAttribute Strength 5
    		player.ModPCSkill Blade 1
    		player.ModPCSkill Blunt 1
    		player.ModPCSkill HandToHand 1
    	elseif player.GetBaseAV Strength <= 75 && player.GetBaseAV Strength > 50 && player.GetItemCount 01032ABC >= 3
    		player.removeitem 01032ABC 3
    		player.ModPCAttribute Strength 5
    		player.ModPCSkill Blade 1
    		player.ModPCSkill Blunt 1
    		player.ModPCSkill HandToHand 1
    	elseif player.GetBaseAV Strength < 100 && player.GetBaseAV Strength > 75 && player.GetItemCount 01032ABC >= 4
    		player.removeitem 01032ABC 4
    		player.ModPCAttribute Strength 5
    		player.ModPCSkill Blade 1
    		player.ModPCSkill Blunt 1
    		player.ModPCSkill HandToHand 1
    	elseif player.GetBaseAV Strength < 100 && player.GetBaseAV  Strength > 94 && player.GetItemCount 01032ABC >= 4
    		player.removeitem 01032ABC 4
    		player.SetAV Strength 100
    		player.ModPCSkill Blade 1
    		player.ModPCSkill Blunt 1
    		player.ModPCSkill HandToHand 1
    	elseif player.GetBaseAV Strength == 100
    		Message "Ihr könnt eure Fertigkeiten nicht über 100 steigern"
    	endif
    Ab hier passiert eigentlich immer genau das gleiche, nur die einzelnen Level der Fähigkeiten werden abgefragt und die Befehle dementsprechend geändert. Danach geht es mit den weiteren Attributen weiter.
    End
    Ich würde btw. nicht die FormID, sondern die EditorID des Objekts verwenden. Macht zwar keinen Unterschied, liest sich aber deutlich besser.

  7. #7
    Hm, wenn ich das Script umsetze und den Activator in das Script einsetze sagt der mir:

    Script Command "Name.Activate" not found.

  8. #8
    - REFID.activate (oder "Name".activate) benötigt die richtige RefID, nicht einfach "Name" übernehmen .
    - OBSE entfernt die Begrenzung in Sachen nichtkompiliertes Script. Bei kompilierten Scripts fallen Sachen wie Tabs raus, auch sind diverse Sachen verkürzt. Das könnte also schon helfen.

  9. #9
    Zitat Zitat von bg2408 Beitrag anzeigen
    - REFID.activate (oder "Name".activate) benötigt die richtige RefID, nicht einfach "Name" übernehmen .
    - OBSE entfernt die Begrenzung in Sachen nichtkompiliertes Script. Bei kompilierten Scripts fallen Sachen wie Tabs raus, auch sind diverse Sachen verkürzt. Das könnte also schon helfen.
    Ich hab's mit allen Angaben, die ich hätte einsetzen können versucht. Oder gibt's noch irgendeine Angabe, die man im Reference Window nicht sieht?

    Ab 32.245 Zeichen blockiert's bei mir, egal was ich mache. Und OBSE werde ich nicht benutzen.

  10. #10
    Das einzige was OBSE entfernt ist die maximale Zeilenanzahl (1000), das Problem mit der MaxScriptSize bleibt leider bestehen.

    Da dafür die kompilierte Größe entscheidend ist sind vor allem Strings problematisch, da die einfach als bloße Daten (keine Ahnung wie genau das gemeint ist. IIRC hab ich da was von wegen Raw Data gelesen) gespeichert werden.

    Die RefID erhälst du, wenn du z.B. im RenderWindow auf die Referenz einen Doppelklick machst (bzw. in der Liste Rechtsklick->Edit) und sie in das oberste Feld des sich öffnenden Fensters eingibst. Außerdem musst du noch einen Haken bei Persistent Reference machen (gleiches Fenster).

  11. #11
    Zitat Zitat von Low Post Beitrag anzeigen
    Das einzige was OBSE entfernt ist die maximale Zeilenanzahl (1000), das Problem mit der MaxScriptSize bleibt leider bestehen.

    Da dafür die kompilierte Größe entscheidend ist sind vor allem Strings problematisch, da die einfach als bloße Daten (keine Ahnung wie genau das gemeint ist. IIRC hab ich da was von wegen Raw Data gelesen) gespeichert werden.

    Die RefID erhälst du, wenn du z.B. im RenderWindow auf die Referenz einen Doppelklick machst (bzw. in der Liste Rechtsklick->Edit) und sie in das oberste Feld des sich öffnenden Fensters eingibst. Außerdem musst du noch einen Haken bei Persistent Reference machen (gleiches Fenster).
    Ja, habe ich ja gemacht, aber es funktioniert nicht.
    (Wieso gibt's hier eigentlich keinen Schulterzucken Smiley? )

    Liegt das vielleicht einfach am Activator?

  12. #12
    Im Script werde die Variablen mit "short" deklariert, das weißt du sicher. Wenn du über "Globals" arbeiten möchtest, musst du erst eine "Global" anlegen. Das ist genauso zu sehen wie eine Deklaration mit "short".

    CS ---> Gameplay --> Globals --> Rechtsklick --> New.

    Die Global ist dann wie ein short auf "0" gesetzt. Es sei denn, du trägst es dort anders ein.

  13. #13
    Zitat Zitat von Eddy Kaschinski Beitrag anzeigen
    Im Script werde die Variablen mit "short" deklariert, das weißt du sicher. Wenn du über "Globals" arbeiten möchtest, musst du erst eine "Global" anlegen. Das ist genauso zu sehen wie eine Deklaration mit "short".

    CS ---> Gameplay --> Globals --> Rechtsklick --> New.

    Die Global ist dann wie ein short auf "0" gesetzt. Es sei denn, du trägst es dort anders ein.
    Weiß ich ja, aber wenn ich dem CS sage, dass es bei Button 0 die Global auf 1 setzen soll und wenn ich es dann abfragen lasse, ob die Global auf 1 steht, erscheint der Effekt nicht.
    Kopier ich den Smiley halt rein.

  14. #14
    Zitat Zitat von Zetter Beitrag anzeigen
    Ja, habe ich ja gemacht, aber es funktioniert nicht.
    (Wieso gibt's hier eigentlich keinen Schulterzucken Smiley? )

    Liegt das vielleicht einfach am Activator?
    Gibt es doch: $zuck


    Wegen der Fehlermeldung:
    Zitat Zitat
    Script Command "Name.Activate" not found.
    Du hast das nicht zufällig in "" gesetzt?
    Poste am besten das Script bei dem der meckert, so ergibt das nämlich recht wenig Sinn.


    Zu Zetters Lösung:
    Eine Global ist hier absolut nicht nötig, da man auch über [Quest/Reference].[Variable] auf die Variablen über ein anderes Script zugreifen kann.

  15. #15
    Jetzt funktioniert's auf einmal.
    Musste nur einen neuen Activator erstellen.

    Trotzdem danke.
    Ich bleib dann doch lieber bei dem anderen Smiley

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •