Hey!
Ich habe es geschafft, Holzkiepen einzulagern! Die Angelegenheit war sehr fummelig. Es lag daran, dass das Lager ein Inventar wie ein Wiggle besitzt. Wenn nun eine Holzkiepe eingelagert wurde also dem Inventar des Lagers hinzugefügt wurde, wurde versucht, das Inventar des Lagers zu vergrößern. Das ist wahrscheinlich schief gegangen und somit wurde die Holzkiepe auf mysteriöse Art und Weise weggebeamt.
Ich habe das bereits in meine
Lagerverbesserung-Mod vom Mod Manager integriert, jedoch möchte ich trotzdem nochmal schildern, wie man das auch händisch machen kann.
Zuerst muss man zwei neue Itemklassen erstellen, die nicht vom Typ "transport" sind. Am besten geht man in die Datei
Scripts/classes/items/transport.tcl und fügt
vor dieser Zeile
folgende Zeilen ein:
Code: Alles auswählen
def_class Holzkiepe_ wood tool 1 {} {
call scripts/misc/autodef.tcl
class_defaultanim holzkiepe.standard
obj_init {
call scripts/misc/autodef.tcl
set_anim this holzkiepe.standard 0 $ANIM_STILL
set_attrib this weight 0.05
set_attrib this hitpoints 0.5
}
}
def_class Grosse_Holzkiepe_ wood tool 1 {} {
call scripts/misc/autodef.tcl
class_defaultanim big_holzkiepe.standard
obj_init {
call scripts/misc/autodef.tcl
set_anim this big_holzkiepe.standard 0 $ANIM_STILL
set_attrib this weight 0.05
set_attrib this hitpoints 0.5
}
}
Nun muss man in die Datei
Scripts/misc/techtreetunes.tcl und
vor dieser Zeile
diesen Code einfügen:
Code: Alles auswählen
"Holzkiepe_" {
set tttmaterial_Holzkiepe {}
set tttinvent_Holzkiepe {}
set tttgain_Holzkiepe {}
set tttinfluence_Holzkiepe {}
}
"Grosse_Holzkiepe_" {
set tttmaterial_Grosse_Holzkiepe {}
set tttinvent_Grosse_Holzkiepe {}
set tttgain_Grosse_Holzkiepe {}
set tttinfluence_Grosse_Holzkiepe {}
}
Jetzt haben wir zwei neue Items erstellt, die vom Typ "tool" sind, das Inventar nicht beeinflussen, aber genauso aussehen wie die beiden Holzkiepen. Nun kommt der fummelige Teil, denn wir müssen beim Einlagern in das Lager und beim Entnehmen die Items auswechseln.
Dazu öffnen wir die Datei
Scripts/classes/work/lager.tcl und tun folgendes:
1. Wir fügen
vor der Zeile
diesen Code ein:
Code: Alles auswählen
if {[get_objtype $item] == "transport"} {
//Container ausleeren, sonst gehen Items verloren
foreach invitem [inv_list $item] {
inv_rem $item $invitem
set_visibility $invitem 1
set_hoverable $invitem 1
set_posbottom $invitem [vector_fix [get_pos $item]]
}
if {[get_objclass $item] == "Holzkiepe"} {
del $item
set item [new Holzkiepe_]
} elseif {[get_objclass $item] == "Grosse_Holzkiepe"} {
del $item
set item [new Grosse_Holzkiepe_]
}
}
Das bewirkt, dass die Transport-Holzkiepe geleert und gelöscht wird. Daraufhin wird eine Tool-Holzkiepe für das Lager erstellt.
2.
Unter diese Zeile
Code: Alles auswählen
log "item $item [get_objname $item] retrieved from lager"
fügen wir diesen Code ein:
Code: Alles auswählen
if {[get_objclass $item] == "Holzkiepe_"} {
set_visibility $item 0
del $item
} elseif {[get_objclass $item] == "Grosse_Holzkiepe_"} {
set_visibility $item 0
del $item
}
Das bewirkt, dass beim Entnehmen der Tool-Holzkiepe, diese gelöscht wird. (Das Erstellen der Transport-Holzkiepe passiert später)
3. Damit die Holzkiepen nicht zwischen den Regalen schweben
ersetzen wir noch folgende Zeile
Code: Alles auswählen
set_pos $item [vector_add [get_pos this] "[expr {[lindex $slotx [expr {$slotidx % 6}]] + [random -0.15 0.15]}] [lindex $sloty [expr {$slotidx / 6}]] 0"]
mit
Code: Alles auswählen
if {[get_objclass $item] == "Holzkiepe_" || [get_objclass $item] == "Grosse_Holzkiepe_"} {
set_pos $item [vector_add [get_pos this] "[expr {[lindex $slotx [expr {$slotidx % 6}]] + [random -0.15 0.15]}] [expr {[lindex $sloty [expr {$slotidx / 6}]] - 0.4}] -0.2"]
} else {
set_pos $item [vector_add [get_pos this] "[expr {[lindex $slotx [expr {$slotidx % 6}]] + [random -0.15 0.15]}] [lindex $sloty [expr {$slotidx / 6}]] 0"]
}
4. bei der Zeile
müssen noch die
hinzugefügt werden.
Jetzt muss nur noch in der Datei
Scripts/classes/zwerg/z_work_prod.tcl diese Zeile
Code: Alles auswählen
tasklist_add this "call_method $store retrieve_item $slotidx $item; beamto_inv $item"
ersetzt mit diesem Code werden:
Code: Alles auswählen
set item_inv $item
if {[get_objclass $item] == "Holzkiepe_"} {
set item_inv [new Holzkiepe]
} elseif {[get_objclass $item] == "Grosse_Holzkiepe_"} {
set item_inv [new Grosse_Holzkiepe]
}
tasklist_add this "call_method $store retrieve_item $slotidx $item; beamto_inv $item_inv"
Dies bewirkt, dass bei der Entnahme eine Transport-Holzkiepe generiert wird. (Das Löschen der Tool-Holzkiepe hat zuvor stattgefunden)
Für den Feinschliff kann man noch im Verzeichnis
Texture/ClassIcons die Dateien
Holzkiepe.tga und Grosse_Holzkiepe.tga dublizieren und
Holzkiepe_.tga und Grosse_Holzkiepe_.tga nennen. Dann haben die Wiggles beim Entnehmen auch das richtige Symbol über ihrem Kopf.
Außderdem kann man noch in der
messages.txt die folgenden Zeilen
hinzufügen, damit auch die Beschreibungen im Spiel korrekt sind:
Code: Alles auswählen
## "Holzkiepe_"
en "Pannier"
de "Holzkiepe"
fr "Hotte de bois"
it "Gerla"
nl "Draagkorf"
es "Cuévano de madera"
## "Grosse_Holzkiepe_"
en "big pannier"
de "große Holzkiepe"
fr "Grande hotte de bois"
it "grande gerla"
nl "Grote draagkorf"
es "Cuévano grande de madera"
Viel Spaß beim Einlagern der Holzkiepen!
Euer Christian (Nr. 2)