Sehr geehrte Scharesoft-Community,
ich bin auch mal wieder hier und habe direkt eine Frage und zwar an Leute, die sich mit modden/scripten auskennen.
Ich nutze eine Mod, die das abbauen von Ores nach Stunden berechnet + die Veins sind unbegrenzt. (letzteres ist leider ein kleiner Wermutstropfen)
Egal ob sinnig oder ob man das toll findet, habe ich eine Frage.
Die Mod verändert 3 Scripts von Vanilla und zwar: MineOreFurnitureScript.pex, MineOreScript.pex und RescourceFurnitureScript.pex.
In der "MineOreScript.pex" ist hauptsächlich die Berechnung enthalten, wieviele Ores man von welchem Material pro Stunde erhalten kann.
Jetzt sind mit Hearhtifre aber zwei weitere "abbaubare" Resourcen hinzu gekommen, Lehm und ich glaub brüchiger Stein, bin mir nicht ganz Sicher.
Ich habe es jetzt nur am Lehm getestet und das funktioniert entsprechend leider nicht mehr. (Der Modder scheint das Projekt auch aufgegeben zu haben, deswegen versuche ich mich darin.)
In den anderen Scripten ist hauptsächlich geregelt, dass die Veins nicht "unbrauchbar" werden. Die genauen Änderungen waren aber für mein Auge keine, die die Erkennung der Veins bzw Berechnung der Ores pro Stunde beinhalten. Allerdings vllt liegt auch hier mein Problem? ^^
Ich stelle euch mal das MineOreScript.psc hier rein:
So, am Anfang wird eine Property hinzugefüt:OrePerHour wird per default auf 1.0 gesetzt. Das ist genau der Wert, den ich bekomme, wenn ich Lehm abbaue. Pro Stunde / 1 Lehm. Von daher gehe ich von aus, dass die Function "ConfigureForOre" nicht wirklich ihren Dienst erfüllt, denn die sollte den default-Wert ändern. Die letzten beiden "ElseIf", also Clay und Quarried Stone habe ich hinzugefügt, die FormID habe ich dem CK entnommen und den Wert PerHour selbst erdacht. Für mein Verständnis hat dies gereicht, aber dem Spiel natürlich nicht
Nunja, das Spiel nimmt wie schon vermutet den Default-Wert 1.0 und nicht den für das entsprechende Vein.
Nun meine Frage: Muss ich noch irgendwas anderes bedenken (in MineOreScript), damit das Spiel erkennt, dass ich gerade Lehm abbaue?
Oder ist die MineOreScript.psc nach eurem Glauben so wie ich sie hier gepostet habe korrekt? Dann müsste ich den Fehler woanders suchen.
Ich danke für eure Mühen,
lg IzUaL36
ich bin auch mal wieder hier und habe direkt eine Frage und zwar an Leute, die sich mit modden/scripten auskennen.
Ich nutze eine Mod, die das abbauen von Ores nach Stunden berechnet + die Veins sind unbegrenzt. (letzteres ist leider ein kleiner Wermutstropfen)
Egal ob sinnig oder ob man das toll findet, habe ich eine Frage.
Die Mod verändert 3 Scripts von Vanilla und zwar: MineOreFurnitureScript.pex, MineOreScript.pex und RescourceFurnitureScript.pex.
In der "MineOreScript.pex" ist hauptsächlich die Berechnung enthalten, wieviele Ores man von welchem Material pro Stunde erhalten kann.
Jetzt sind mit Hearhtifre aber zwei weitere "abbaubare" Resourcen hinzu gekommen, Lehm und ich glaub brüchiger Stein, bin mir nicht ganz Sicher.
Ich habe es jetzt nur am Lehm getestet und das funktioniert entsprechend leider nicht mehr. (Der Modder scheint das Projekt auch aufgegeben zu haben, deswegen versuche ich mich darin.)
In den anderen Scripten ist hauptsächlich geregelt, dass die Veins nicht "unbrauchbar" werden. Die genauen Änderungen waren aber für mein Auge keine, die die Erkennung der Veins bzw Berechnung der Ores pro Stunde beinhalten. Allerdings vllt liegt auch hier mein Problem? ^^
Ich stelle euch mal das MineOreScript.psc hier rein:
Code:
scriptName MineOreScript extends objectReference
;
;This script handles the Ore Veins and handshakes with the mining furniture
;===================================================================
sound property DrScOreOpen auto
{sound played when Ore is acquired}
formlist property mineOreToolsList auto
{Optional: Player must have at least one item from this formlist to interact}
Message Property FailureMessage Auto
{Message to say why you can't use this without RequiredWeapon}
Message Property DepletedMessage Auto
{Message to say that this vein is depleted}
MiscObject Property Ore Auto
{what you get from this Ore Vein}
LeveledItem property lItemGems10 auto
{Optional: Gems that may be mined along with ore}
int Property ResourceCount = 1 Auto
{how many resources you get per drop}
float property OrePerHour = 1.0 Auto
{how many ore one hour of digging will earn the player}
float property CurrentMiningStartTime = 0.0 auto hidden
{time of start of current mining session.}
mineOreFurnitureScript property myFurniture auto hidden
{the furniture for this piece of ore, set in script}
objectReference property objSelf auto hidden
{objectReference to self}
AchievementsScript property AchievementsQuest auto
Location Property CidhnaMineLocation Auto
Quest Property MS02 Auto
Quest Property DialogueCidhnaMine Auto
ObjectReference Property CidhnaMinePlayerBedREF Auto
;===================================================================
;;EVENT BLOCK
;===================================================================
event onCellAttach()
; debug.Trace(self + ": is running onCellAttach")
blockActivation()
SetNoFavorAllowed()
objSelf = self as objectReference
if !getLinkedRef()
; debug.Trace(self + ": does not have a linked ref, going to depleted state")
depleteOreDueToFailure()
endif
endEvent
event onActivate(objectReference akActivator)
; debug.Trace(self + " has been activated by " + akActivator)
configureForOre()
;Actor is attempting to mine
if akActivator as actor
;if the actor is the player
if akActivator == game.getPlayer()
;if the player has the right item
If playerHasTools() == false
FailureMessage.Show()
;enter the furniture
else
If Game.GetPlayer().GetCurrentLocation() == CidhnaMineLocation && MS02.ISRunning() == False
; debug.Trace(self + "Player is in Cidhna Mine, activate the bed to serve time")
CidhnaMinePlayerBedREF.Activate(Game.GetPlayer())
DialogueCidhnaMine.SetStage(45)
Return
EndIf
; debug.Trace(self + " should cause " + akActivator + " to activate " + getLinkedRef())
if getLinkedRef()
myFurniture = getLinkedRef() as mineOreFurnitureScript
myFurniture.lastActivateRef = objSelf
getLinkedRef().activate(akActivator)
AchievementsQuest.incHardworker(2)
CurrentMiningStartTime = Utility.GetCurrentGameTime()
Else
; debug.Trace(self + ": error this ore does not have a linkedRef")
endif
endif
Else
if getLinkedRef()
getLinkedRef().activate(akActivator)
Else
; debug.Trace(self + ": error this ore does not have a linkedRef")
endif
EndIf
;Furniture is telling ore it has been struck
ElseIf akActivator == GetLinkedRef()
; debug.Trace(self + ": has been activated by" + akActivator)
ProccessStrikes()
;Something unexpected has activated the ore
Else
; debug.Trace(self + "has been activated by: " + akActivator + " why?")
endif
endEvent
event onReset()
; debug.Trace(self + ": is running onReset")
;THIS WASN'T WORKING RIGHT
self.Reset()
self.clearDestruction()
self.setDestroyed(False)
endEvent
;===================================================================
;;FUNCTION BLOCK
;===================================================================
bool function playerHasTools()
if Game.GetPlayer().GetItemCount(mineOreToolsList) > 0
; debug.Trace(self + ": playerHasTools is returning true")
return true
Else
; debug.Trace(self + ": playerHasTools is returning false")
return false
endIf
endFunction
function configureForOre()
if ore.GetFormId() == 0x00071cf3
; Iron Ore
OrePerHour = 4.0
elseIf ore.GetFormId() == 0x0005acdd
; Orichalcum Ore
OrePerHour = 2.0
elseIf ore.GetFormId() == 0x0005acdb
; Corundum Ore
OrePerHour = 1.8
elseIf ore.GetFormId() == 0x0005ace2
; Quicksilver Ore
OrePerHour = 1.6
elseIf ore.GetFormId() == 0x0005acdf
; Silver Ore
OrePerHour = 1.6
elseIf ore.GetFormId() == 0x0005ace0
; Moonstone Ore
OrePerHour = 1.5
elseIf ore.GetFormId() == 0x0005ace1
; Malachite Ore
OrePerHour = 1.5
elseIf ore.GetFormId() == 0x0005acde
; Gold Ore
OrePerHour = 1.25
elseIf ore.GetFormId() == 0x0005acdc
; Ebony Ore
OrePerHour = 1.0
elseIF ore.GetFormId() == 0x01003043
; Clay Ore
OrePerHour = 6.0
elseIF ore.GetFormId() == 0x0100306c
; Quarried Stone Ore
OrePerHour = 5.0
endIf
endFunction
function proccessStrikes()
; if enough time passed, give Ore
float current_time = Utility.GetCurrentGameTime()
float timeBetweenOres = ((1.0 / 24.0) / OrePerHour)
If current_time > CurrentMiningStartTime + ((1.0 / 24.0) / OrePerHour)
; Debug.MessageBox("Time elapsed: " + (current_time - CurrentMiningStartTime) + " / " + timeBetweenOres + " = " + ((current_time - CurrentMiningStartTime) / timeBetweenOres))
int ore_reward = ((current_time - CurrentMiningStartTime) / timeBetweenOres) as int
; debug.Trace(self + ": rewarding player with " + ore_reward + " ore.")
CurrentMiningStartTime = current_time
giveOre(ore_reward)
EndIf
endFunction
function giveOre(int count)
DrScOreOpen.play(self)
; if this vein has ore and/or gems defined, give them.
if ore
(game.getPlayer()).addItem(Ore, count)
endif
if lItemGems10
(game.getPlayer()).addItem(lItemGems10)
endif
EndFunction
function depleteOreDueToFailure()
self.damageObject(50)
;THIS WASN'T WORKING RIGHT
self.setDestroyed(true)
endFunction
So, am Anfang wird eine Property hinzugefüt:OrePerHour wird per default auf 1.0 gesetzt. Das ist genau der Wert, den ich bekomme, wenn ich Lehm abbaue. Pro Stunde / 1 Lehm. Von daher gehe ich von aus, dass die Function "ConfigureForOre" nicht wirklich ihren Dienst erfüllt, denn die sollte den default-Wert ändern. Die letzten beiden "ElseIf", also Clay und Quarried Stone habe ich hinzugefügt, die FormID habe ich dem CK entnommen und den Wert PerHour selbst erdacht. Für mein Verständnis hat dies gereicht, aber dem Spiel natürlich nicht
Nunja, das Spiel nimmt wie schon vermutet den Default-Wert 1.0 und nicht den für das entsprechende Vein.
Nun meine Frage: Muss ich noch irgendwas anderes bedenken (in MineOreScript), damit das Spiel erkennt, dass ich gerade Lehm abbaue?
Oder ist die MineOreScript.psc nach eurem Glauben so wie ich sie hier gepostet habe korrekt? Dann müsste ich den Fehler woanders suchen.
Ich danke für eure Mühen,
lg IzUaL36