Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Kanns nicht einfach sein, dass du ziemlich viel im Inventar hast und es deswegen einfach lange dauert? Wenn man zum Beispiel diese Kisten in der Testinghall öffnet, in denn alle Waffen oder so sind, dauert das auch einige Zeit, in der nichts passiert.
scn assassindagger
ref Self
Begin ScriptEffectStart
set Self to GetSelf
If ( Self.GetDetected Player == 0 ) && ( Self.IsEssential == 0 )
Self.Kill
EndIf
End
Es funktioniert einfach nicht. Der NPC wird einfach nicht getötet.
Wenn ich das " == 0 " bei GetDetected weg lasse, dann kann ich jeden NPC töten, egal ob er mich sieht oder nicht.
Was ist falsch?
Und noch eine Frage: Kann man mithilfe von OBSE, Waffen die das Wort "Dagger" in der ID enthalten, eine Enchantment zuordnen? Wenn ja, wie? Ich weiss das es sowas ähnliches gibt, denn Skycaptain benutzt das in seiner Mod "Deadly Reflex".
So wie ich das sehe, sollte der NPC immer sterben, wenn er den Player nicht(wegen Selg.GetDetected Player == 0) bemerkt hat.
Du solltest also zumindest 1 anstatt 0 schreiben. Sonst stirbt er, wenn er den Player nicht sieht und das kann verdammt blöd sein.
Ja, ist richtig. Wenn er den Spieler nicht bemerkt, soll der Spieler den NPC mit einem Schlag töten können. Wenn er ihn bemerkt, dann nicht. Wenn ich es auf 1 stelle, dann kann ich jeden NPC töten, egal ob er mich sieht oder nicht.
Ist es irgendwie möglich, den momentanen Wert von einem Balken einer Hauptfertigkeit auszulesen?
Den momentanen Level der Fertigkeit kann man ja über Player.GetAV Luck auslesen.
Mir geht es aber, wie gesagt, um den Fortschrittsbalken.
Auslesen und setzen wären nicht schlecht.
Wäre gut, wenn mir jemand die Codes sagen könnte.
Funktioniert der Befehl auch bei NPCs? Möchte nämlich versuchen, dass ein Begleider die Waffen genauso repariert (mit Verschleiß der Hammer und Skillaufstieg) wie der Spieler.
Weiß übrigens jemand, wie das Waffenschmieden beim Spieler berechnet wird?
so ich hab ein kleines problem mit einem script an dem ich gerade bastle.
ich will mir ein PI bauen dass die Trainingseinheiten dynamisch ans Spielerlevel anpasst.
Das PI beinhaltet eine neue Quest, zwei Globals und ein Questscript
Code:
scn tbtraininglessons
float fQuestDelayTime
float x
float tbskill
float tbsetting
long lessons
long level
long levelcheck
float training
short tbgamestart
short choice
begin GameMode
set tbgamestart to getgamerestarted
set level to player.getlevel
set lessons to getpcmiscstat 3
if (getstage tbtraining < 10)
set fQuestDelayTime to 0.001
set choice to -1
messagebox "Bitte wählen sie aus durch welchen Faktor der Spielerlevel geteilt werden soll!(für genauere Details bitte die Readme lesen !!!)" " Faktor 1 (1275/5050)" "Faktor 2 (637/2025)" "Faktor 3 (425/1683)" "Faktor 4 (318/1262)" "Faktor 5 (255/1010)" "Faktor 10 (127/505)" "Faktor 20 (63/252)"
set choice to getbuttonpressed
if choice == 0
set tbtrainingsetting to 1
elseif choice == 1
set tbtrainingsetting to 2
elseif choice == 2
set tbtrainingsetting to 3
elseif choice == 3
set tbtrainingsetting to 4
elseif choice == 4
set tbtrainingsetting to 5
elseif choice == 5
set tbtrainingsetting to 10
elseif choice == 6
set tbtrainingsetting to 20
endif
setstage tbtraining 10
endif
set tbsetting to tbtrainingsetting
set fQuestDelayTime to 30
if (getstage tbtraining == 10)
set x to level + 1
set x to x/2
set x to x*level
set x to x/tbsetting
set x to x - lessons
set training to x
setnumericgamesetting iTrainingSkills training
messagebox "Das Plugin wurde erfolgreich installiert"
set levelcheck to level
set tbtrainingskill to training
setstage tbtraining 20
set tbgamestart to 0
endif
set tbskill to tbtrainingskill
if (getstage tbtraining == 20)
if level != levelcheck
set x to level + 1
set x to x/2
set x to x*level
set x to x - lessons
set training to x
setnumericgamesetting iTrainingSkills training
messagebox "Ihre Trainingssettings wurden nach einem Level-Up angeglichen!"
set levelcheck to level
set tbtrainingskill to training
set tbgamestart to 0
endif
if tbgamestart == 1 && level == levelcheck
setnumericgamesetting iTrainingSkills tbskill
messagebox "Ihre Trainingssettings wurden nach einem Spielrestart erfolgreich wieder hergestellt!"
set tbgamestart to 0
endif
endif
end
das script an sich läuft und funktioniert abgesehen vom ersten block auch einwandfrei. ich wollte das PI halt so einrichten, dass am anfang eine messagebox kommt über die der spieler sich entscheiden kann in welchem verhältnis die Trainingseinheiten zum Spielerlevel stehen. Damit man das evtl später wieder ändern kann habe ich dem Quest halt 3 Stages gegeben (0,10,20). Das Problem jedoch ist, dass der messagebox block probleme macht. So wie er jetzt aufgebaut ist - also setstage quest 10 nach den if-abfragen für die messagebox - geht er sofort über zur 2ten Stage ohne die messagebox aufzurufen. Daraufhin habe ich versucht setstage in die if-abfragen der message box zu packen..
Code:
if choice == 0
set tbtrainingsetting to 1
setstage tbtraining 10
dann erscheint zwar die messagebox, dafür aber wird die queststage nicht hochgesetzt.
Weiß einer wieso da nix passiert? (ich hab jetzt nicht überprüft ob die Global für den Faktor auch nicht gesetzt wurde)
Das zweite, eher geringere Problem ist, dass ich trotz allow repeated Stages den quest in der console per setstage auf eine frühere Stage zurücksetzen kann. Ich wollte das ganz gerne einbauen, damit der spieler sich evtl auch nach längerem spielen umentscheiden kann ohne das PI deaktivieren und reaktivieren zu müssen.
Krüge und zerspringen, das ist so eine Sache, es geht ja leider Havok wegen nicht "normal" und unkompliziert. Jedoch geht es doch mit einem Trigger, welcher, wenn der Gegenstand den Boden berührt ein "Decal", also eine zerbrochene Mesh übriglässt. Vielleicht fällt das Objekt noch in einer Staubwolke auf den Boden und der Zauber ist perfekt! Geht das? Wenn ja, was für ein Skript brauche ich, um eine Mesh zu replacen, wenn sie den Boden erreicht? Kann ich den Trigger an die Mesh binden, damit der Trigger sich mitbewegt? Lässt sich das auf alle Gegenstände einer Art übertragen?
Kann mir jemand bitte kurz den Befehl für das Abspielen von Animationen geben?
Ich möchte, dass ein Tier unter bestimmten Umständen(Variablen!!) eine bestimmte Animation ausführt. Geht das überhaupt?
Bisher fand ich: PlayGroup. Kombiniert mit meiner Kreatur: PlayGroup MeinSchaf.Idle
Allerdings kommt nun die Fehlermeldung, dass eine Reference hier nicht möglich ist.
Da das Skritp über den Spieler läuft, ist das blöd. Natürlich könnte ich es über Globals oder QuestVariablen machen, dass währe aber etwas umständlicher als ein einfacher Befehl.
so ich hab mein script jetzt mittlerweile ein bisschen umgebastelt...
das mit den queststages geht nicht, da man diese irgendwie nicht zurücksetzen kann.
das neue script sieht jetzt so aus:
Code:
scn tbsettraining
float fQuestDelayTime
float x
float tbskill
float tbsetting
long lessons
long level
long tblevel
float training
short tbgamestart
short choosing
short choice
begin GameMode
set tbgamestart to getgamerestarted
set level to player.getlevel
set lessons to getpcmiscstat 3
if tbstage == 0
set choosing to -1
set fQuestDelayTime to 0.001
if choosing == -1
messagebox "Bitte wählen sie aus durch welchen Faktor der Spielerlevel geteilt werden soll!(für genauere Details bitte die Readme lesen !!!)" " Faktor 1 (1275/5050)" "Faktor 2 (637/2025)" "Faktor 3 (425/1683)" "Faktor 4 (318/1262)" "Faktor 5 (255/1010)" "Faktor 10 (127/505)" "Faktor 20 (63/252)"
set choosing to 1
set choice to getbuttonpressed
elseif choosing == 1
set choice to getbuttonpressed
if choice == 0
set tbsetting to 1
elseif choice == 1
set tbsetting to 2
elseif choice == 2
set tbsetting to 3
elseif choice == 3
set tbsetting to 4
elseif choice == 4
set tbsetting to 5
elseif choice == 5
set tbsetting to 10
elseif choice == 6
set tbsetting to 20
endif
set tbtrainingsetting to tbsetting
endif
set tbstage to 1
endif
if tbstage == 1
set fQuestDelayTime to 0.001
set x to level + 1
set x to x/2
set x to x*level
set x to x/tbsetting
set x to x - lessons
set training to x
setnumericgamesetting iTrainingSkills training
messagebox "Das Plugin wurde erfolgreich installiert"
set tbtrainingskill to training
set tblevelcheck to level
set tbstage to 2
set tbgamestart to 0
endif
if tbstage == 2
set tbsetting to tbtrainingsetting
set tbskill to tbtrainingskill
set tblevel to tblevelcheck
set fQuestDelayTime to 30
if tbgamestart == 1 && level == tblevel
setnumericgamesetting iTrainingSkills tbskill
messagebox "Ihre Trainingssettings wurden nach einem Spielrestart erfolgreich wieder hergestellt!"
set tbgamestart to 0
endif
if level != tblevel
set x to level + 1
set x to x/2
set x to x*level
set x to x - lessons
set training to x
setnumericgamesetting iTrainingSkills training
messagebox "Ihre Trainingssettings wurden nach einem Level-Up angeglichen!"
set tblevelcheck to level
set tbtrainingskill to training
set tbgamestart to 0
endif
endif
end
problem ist, die messagebox erscheint aber danach tut sich nichts mehr. einzig tbstage wird auf 1 gesetzt aber weiter passiert nix...auch durch setzen von tbstage auf einen anderen wert bringt nix (auf 0 sollte ja zb die messagebox noch einmal erscheinen aber tut sie nicht)
Code:
set choice to getbuttonpressed
if choice == 0
set tbsetting to 1
elseif choice == 1
set tbsetting to 2
elseif choice == 2
set tbsetting to 3
elseif choice == 3
set tbsetting to 4
elseif choice == 4
set tbsetting to 5
elseif choice == 5
set tbsetting to 10
elseif choice == 6
set tbsetting to 20
endif
set tbtrainingsetting to tbsetting
scheint gar nix zu bewirken... die von mir erstellte global ändert ihren wert nicht obwohl sie dies ja eigtl tun sollte :huh:
irgendwie hatte ich schon immer probleme mit diesen messageboxes aber ich weiß einfach nicht was falsch ist oO
hoffe irgendjemand sieht den fehler, den ich nicht finde
float fQuestDelayTime
float x
float tbskill float tbsetting
long lessons
long level
long tblevel
float training
short tbgamestart
short choosing
short choice
mhh sry ich hätte wahrscheinlich dazuschreiben sollen, wie die globals heißen:
tbtrainingsetting: speichert den Faktor (bzw soll)
tbtrainingskill: speichert die aktuelle anzahl an trainingseinheiten, da gamesettings ja nicht im savegame gespeichert werden.
tblevelcheck: überbleibsel aus eine vorherigen version wo ich mit zwei scripten gearbeitet habe...kann ich eigtl wieder rausnehmen
tbstage: speicher die "stage", in der sich das script befindet. ist dafür gedacht, dass man man zb den Faktor auch später noch ändern kann ohne das PI deaktivieren und reaktivieren müssen (also per consolenbefehl "set tbstage to 0")
di global die durch die messagebox geändert werden soll ist tbtrainingsetting.
die float tbsetting ist dafür da, damit man nicht jedesmal bei neustart des spiels nue festlegen muss. deswegen habe ich das in der global gespeichert (bzw will, dass es in der global gespeichert wird)^^
aber auch wenn ich set tbsetting to x in die if-abfrage der messagebox packe, bleibt der wert unverändert :huh:
ich hatte so ein ähnliches problem schonmal mit messageboxes und deswegen vermute ich, dass ich irgendwas grundlegenes falsch mache bei den messageboxes (irgendwas vergessn oder so).
falls es sonst noch irgendwelche verständnis-/funktionsfragen zum PI gibt werde ich die natürlich beantworten^^
Ist es irgendwie möglich, den momentanen Wert von einem Balken einer Hauptfertigkeit auszulesen?
Den momentanen Level der Fertigkeit kann man ja über Player.GetAV Luck auslesen.
Mir geht es aber, wie gesagt, um den Fortschrittsbalken.
Auslesen und setzen wären nicht schlecht.
Wäre gut, wenn mir jemand die Codes sagen könnte.
tabkir liegt mit "GetPlayerSkillUse" fürs erste mal gut.
Damit hat man aber erst mal nur eine Experience-Punktezahl, mit der man leider alleine noch nichts anfangen kann.
Da das ganze mit enorm viel Rechnerei zu tun hat hab ich gedacht Scriptschreiben ist Schneller als ein langwierige Erklärung die sowieso falsch interpretiert wird.
Der Übersichtlichkeit halber hab ich das Script ein bischen aufgeschlüsselt
Scriptname BalkenArmorer
float Exp
float Mult
float BonusMult
short IsMajSkill
short IsSpecSkill
float ExpNextLvl
float f
float BalkenProzent
begin GameMode
set Exp to GetGameSetting fSkillUseExp
set Mult to GetGameSetting fSkilluseFactor
set IsMajSkill to player.IsClassSkill Armorer
set IsSpecSkill to (player.GetClassSpecialization == 0) ; 0 = Combat / 1 = Magic / 2 = Stealth
if IsMajSkill
set BonusMult to GetGameSetting FSkillUseMajorMult
else
set BonusMult to GetGameSetting FSkillUseMinorMult
endif
if IsSpecSkill
set BonusMult to BonusMult * GetGameSetting FSkillUseSpecMult
endif
set f to player.GetBaseAV Armorer * Mult
set f to pow f Exp
set ExpNextLvl to f * BonusMult
set BalkenProzent to (GetPlayerSkillUse Armorer / ExpNextLvl) * 100
end
Das ganze könnte man noch wie folgt abkürzen:
- Vanilla-Konstanten direkt programmieren (wenn mit original Level-System gespielt wird)
- Die Berechnungen mit "f" können auf eine einzelne Zeile zusammengefaßt werden
- Anstatt der Hilfsvariablen können die GameSetting-Abfragen direkt in die Rechenformeln integriert werden.
Fragen zu Skriptdetails beantwortet das Wiki umfassend.
Da sieht mans mal wieder : GANZ EINFACH 8)
Es grüßt die Yolanda
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
EDIT : Es geht noch einfacher ...... Habe das Skript durch ein neues ersetzt, welches kürzer und leichter Verständlich sein soll
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Erst mal Danke, für die Hilfe bei beiden Problemen.
Aber eine frage hätte ich noch: FUnktioniert das Skript von Yolanda ohne OBSE? Ich kenn mich muit OBSE-Befehlen net so aus. Außerdem ist das Skritp für ein Projekt gedacht, dass kein OBSE nutzen soll.
Deshalb frage ich.
mhh also alleine getplayerskilluse ist eine obse funktion.
von daher wird zumindest schonmal für yolanda's lösung OBSE benötigt.
soweit ich das erkennen kann gibt es auch keine alternative funktion die ohne OBSE auskommt... zumindest steht sowas normalerweise bei der CS-Wiki in der "See Also" Rubrik.
ups zu langsam xD hier sind alle funktionen aufgelistet...aber ich bezweifle stark, dass es noch eine andere gibt