Ergebnis 1 bis 1 von 1
  1. #1
    Gorin
    Gast

    Standard Real Hunger with Animation for Nehrim DV

    Da man in Nehrim ja auch schön Fleisch braten oder kochen kann sowie irgendwelche Leckereien backen fand ich es schade, dass nicht auch ein Hungereffekt dabei ist.
    Die Mod wurde mir dann übersetzt, aber ganz zufrieden war ich dennoch nicht.

    Denn im Inventar haben immer die Animationen dazwischen gefunkt, wenn man etwas essen wollte.
    Sogar beim Vergiften einer Waffe sah es so aus als würde der Charakter das Gift trinken, obwohl es richtigerweise an der Waffe angebracht wurde

    Also hab ich wieder gekonnt angefangen zu flennen und die letzten Paar Tage haben wir uns zusammengesetzt und an einer Lösung geschraubt.

    Im CS konnte ich nicht viel ausrichten, aber als ich mir dann die paar Skripts ansehen durfte die für das Ganze zuständig waren ist mir klar geworden, dass der MenuMode ebenfalls mit Animationen zugepflastert ist :rolleyes

    Jedenfalls gibts im Menü jetzt keinerlei Animationen mehr, aber die Sättigungswerte werden pro Essen im Inventar richtig abgezogen

    Außerdem hab ich einen ungenutzten Part im Skript gefunden, der ein animiertes Trinken von Heil- und Manatränken ermöglicht.
    Da hab ich dann auch gleich noch einen Funktion für Ausdauertränke hinzugefügt.

    Mit der M-Taste kann man Manatränke, mit der (,)Komma-Taste Ausdauertränke und mit der (.)Punkt-Taste Heiltränke trinken.
    Mit der rechten Steuerungs-Taste kann man animiert essen.
    Mit der rechten Shift- + Steuerungs-Taste kann man animiert trinken (Bier, Apfelsaft, etc.)

    Die LINKE Alt-Taste sorgt für das animierte Trinken / Essen von Gegenständen die rumstehen.
    Dabei kann es aber häufig passieren, dass einem der Wert des Gegenstand abgezogen wird, wenn dieser einem nicht gehört.
    Wobei diese Funktion mit Vorsicht zu genießen ist, da auch besitzlose Gegenstände (die also nicht als Klauen gelten) bezahlt werden können.
    Das liegt daran, dass der Parent solcher Gegenstände nicht immer der Player ist hab ich mir zumindestens sagen lassen.

    Die Skripte funktioneren jedenfalls gut. Sogar so gut, dass mir vorgehalten wurde ich hätte das gefälligst alleine machen sollen :rolleyes

    So... Jetzt werd ich mal ein paar Eber erlegen und die ordentlich mampfen

    Update:
    Nun ist doch das eingetreten was ich befürchtet hatte :/
    Da diese MenuMode-Überarbeitung im QuestScript des HungerMods eingebunden ist wird ab und an ein Tastendruck als das Essen einer Zutate nicht gewertet.
    Genau das war auch ein Problem der Ursprungsversion, weil das QuestScript einfach zu langsam ist.

    Also hab ich die MenuMode-Spate komplett aus den Script gelöscht und in dem GlobalPlayerScript eingebunden.
    Dies ist ein ObjectScript und feuert solange wie es einen Spieler gibt und das auch noch jede 100stel Sekunde (also sagen wir es ist IMMER aktiv )

    Dadurch wird kein einziger Tastendruck übersehen.

    Für Skriptinteressierte werd ich mal das Coding posten

    Zitat Zitat von GlobalPlayerScript
    Code:
    ;///////////////////////////////////////////////////////////////////////[ Essen & Trinken ]//////////////////////////////////////////////////////////////////////
    
    long			CheckObjectItemCount
    short			price
    ref		        objMenuMode
    ref		        CheckIfObjectEaten
    string_var	        objIconPath
    
    short 		KeyDown
    
    Begin MenuMode 1002 ;Der MenuMode-Block wird nur ausgeführt, wenn sich der Spieler in seinem Inventar befindet
    	if objMenuMode != 0 ;Ohne diese Abfrage stoppt das Skript weil die Oblivion Engine zu dämlich ist zu wissen was sie tun soll, wenn eine Object Reference 0 ist
    		if objMenuMode == Apfelsaft || objMenuMode == DrinkBier01 || objMenuMode == DrinkWeinBillig01 || objMenuMode == NQBranntwein || objMenuMode == DrinkDunkelbier || objMenuMode == DrinkEbruCahbaet || objMenuMode == EbruCahbaet || objMenuMode == DrinkMet01 || objMenuMode == DrinkSchnaps01 || objMenuMode == DrinkWeinTeuer01 || objMenuMode == DrinkSchnaps01Teuer || objMenuMode == DrinkWeinBillig02
                            ;Da Getränke nicht abgefragt werden können, musste ich sie händisch angeben, wobei mir mein Kollege die ganzen Namen aus diesem grottigen CS-Tool rausgesucht hat
    			set RHFoodEaten to RHFoodEaten + 1 ;Diese Variable sorgt für die Sättigung. Getränke geben immer eine Sättigung von 1
    
    			set objIconPath to geticonpath objMenuMode
    			sv_insert "icons\" objIconPath
    			setMessageIcon $objIconPath
                            ;Dieser Block holt sich das passende Icon für das Getränk, welches der Spieler getrunken hat
    
    			messageEX "%n getrunken. Plus 1 Stunde(n) Sättigung.", objMenuMode
                            ;Wirft eine erweiterte Nachricht mit Icon und Namen des Getränks aus. Der Code %n wird durch den Namen der Referenz 'objMenuMode' ersetzt
    
    			if CheckIfObjectEaten != 0 ;Ohne diese Abfrage steikt das Skript wie erwähnt
    				if Player.GetItemcount CheckIfObjectEaten == CheckObjectItemCount
    					Player.EquipItemNS CheckIfObjectEaten
    				endif
                                    ;Diese Abfrage sorgt dafür, dass man nicht cheaten kann. Wenn man auf ein Nahrungsmittel klickt, aber die Maus wegbewegt und loslässt würde man es normalerweise nicht essen,
                                    ;dennoch bekommt man Sättigung. Wenn die Anzahl also gleich ist wie beim Auswählen des Objekts, wird es dennoch verspeißt.
    			endif
    			set objIconPath to sv_Destruct
    			set objMenuMode to 0
                            ;Die Object Reference und der Pfad werden gelöscht
    		elseif GetObjectType objMenuMode == 25 ;Wenn es sich bei dem Ausgewählten um etwas Essbares handelt wird dieser Block ausgeführt
    			set price to getGoldValue objMenuMode
    			set price to price/2
    			if price < 1
    				set price to 1
    			endif
    
    			set RHFoodEaten to RHFoodEaten + price
                            ;Diese Kalkulation hab ich aus dem QuestScript übernommen. Ist zwar recht einfältig die Sättigung nach dem Wert des Gegenstandes zu bestimmen, aber
                            ;es spart Platz und ist einfach umzusetzen :P
    
    			set objIconPath to geticonpath objMenuMode
    			sv_insert "icons\" objIconPath
    			setMessageIcon $objIconPath
    			messageEX "%n gegessen. Plus %g Stunde(n) Sättigung.", objMenuMode, price
    
    			if CheckIfObjectEaten != 0
    				if Player.GetItemcount CheckIfObjectEaten == CheckObjectItemCount
    					Player.EquipItemNS CheckIfObjectEaten
    				endif
    			endif
    			set objIconPath to sv_Destruct
    			set objMenuMode to 0
                            ;Die selben Vorgehensweisen wie bei den Getränken nur eben für das Essen
    		else
    			set objIconPath to sv_Destruct
    			set objMenuMode to 0
                            ;Wenn das Ausgewählte weder Getränke noch Essen ist, werden nur die Variablen wieder gelöscht, um eine neue Auswahl zu ermöglichen
    		endif
    	else
    		if GetContainerMenuView ;Der Spieler darf sich NUR in seinem eigenen Inventar befinden. Wäre ja noch schöner, wenn man beim Verkaufen oder durch das Ablegen in Container satt wird!
    			if (IsKeyPressed3 256) && (Keydown == 0) && (IsKeyPressed3 42 == 0) && (IsKeyPressed3 54 == 0) ;Wenn die linke Maustaste gedrückt wird und dabei die linke und rechte Shift-Taste NICHT gedrückt sind
    				set Keydown to 1 ;Das Loslassen der Maustaste wird initialisiert
    				set CheckIfObjectEaten to GetActiveMenuSelection ;Das geklickte Objekt wird in die Überprüfungsreferenz gespeichert
    				if CheckIfObjectEaten != 0 ;Wie immer weiß das dumme Skript nicht was es machen soll, wenn man nicht explizit sagt, dass es nur etwas machen soll, sofern die Referenz gesetzt wurde
    					set CheckObjectItemCount to Player.GetItemcount CheckIfObjectEaten ;Die Anzahl der Objekte von der Überprüfungsreferenz werden in eine Variable gespeichert
    				endif
    			elseif (IsKeyPressed3 256 == 0) && Keydown ;Wird ausgeführt, sobald die Maustaste losgelassen wird
    				set Keydown to 0 ;Um nicht in eine Endlosschleife zu geraten, wird die Variable mit welcher der Tastendruck überprüft wird wieder auf 0 gesetzt
    				set objMenuMode to GetActiveMenuSelection ;Diese Variable ist nur ein Überbleibsel des Skripts, bevor ich den Anti-Cheat-Modus eingebaut habe,
    			endif                                             ;da sie aber auch gleichzeitig als Schalter (ist NICHT 0 oder ist 0) dient, ist sie als zusätzliche Referenz notwendig
    		endif                                                     ;anstatt einfach nur mit der CheckIfObjectEaten Referenz zu arbeiten
    	endif
    End
    EDIT:
    Noch ein kleines Vorführvideo der Hunger-Funktion, dem animierten Essen und dem Essen aus dem Inventar, sowie dem animiertem Tranktrinken.


    Update:
    Das QuestScript wurde überarbeitet.
    Man trank zuvor Tränke im Akkord, wenn man die Taste gedrückt hielt, außerdem konnte man mit gezogener Waffe trinken (was absolut dämlich aussah :rolleyes)
    Das ist nun behoben

    UPDATE:

    Inzwischen ist die Mod nur noch hier zu finden.
    Geändert von Gorin (11.10.2013 um 18:44 Uhr)

Berechtigungen

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