Texture variation

Startprobleme? Du kommst nicht mehr weiter?
zed2000
Hamster
Hamster
Beiträge: 52
Registriert: Mi 25. Feb 2015, 02:02

Event Generator

Beitrag von zed2000 »

Hm weiß nicht was genau diese Funktion macht, wohl einen Filter für den Levelgenerator definieren
lg_addfilterclass
lg_addfilterclass {‹classname› ‹classname› ...}
adds a class as filter for a template for levelgenerating

Die Vermutung liegt nahe, dass der gesamte EventGenerator in der .exe ist, da ich bis jetzt keine einzige TCL zeile gefunden habe, die

Code: Alles auswählen

set_event ... evt_autoprod_...
aufruft, also alle Events, die die Wiggles automatisch machen.
Zuletzt geändert von zed2000 am Do 2. Feb 2017, 22:55, insgesamt 1-mal geändert.
Benutzeravatar
cech12
Zwerg
Zwerg
Beiträge: 242
Registriert: Di 9. Jun 2015, 12:18
Kontaktdaten:

Re: Texture variation

Beitrag von cech12 »

Hm weiß nicht was genau diese Funktion macht, einen Filter für den Levelgenerator
Ich habe mal fix ausprobiert, ob eine Änderung dort eine Auswirkung auf die Problematik hat. Leider wurden die neu erstellten Brocken nicht als Resourcenquelle wahrgenommen. :/
Die Vermutung liegt nahe, dass der gesamte EventGenerator in der .exe ist, da ich bis jetzt keine einzige TCL zeile gefunden habe die
Da stimme ich dir zu. Sowas konnte ich bisher auch nicht finden. Aber ich finde es eigenartig, dass sämliche Gegenstände in den tcl-Files definiert sind, aber die Abfrage, dass die einzelnen Erze von den passenden Brocken abgebaut werden können, soll hard-gecoded in der exe liegen. Das wäre unschöner Stil.^^ Da gibt es sicherlich irgendwo einen Kniff, den wir übersehen.

Edit: Ich denke, dass du Recht hast. Ich habe so ziemlich alle Stellen abgesucht und nichts derartiges gefunden. Das wird bestimmt in der exe versteckt sein. (Ähnlich wie die Inventar-Größe der Holzkiepen. Danach hatte ich auch schonmal gesucht und nichts gefunden). Schade. :(
SkyNet
Raupe
Raupe
Beiträge: 36
Registriert: Mi 4. Dez 2013, 17:57

Re: Texture variation

Beitrag von SkyNet »

Beim herumspielen in einigen tcl files ist mir etwas aufgefallen. Mein eigentliches Ziel war es, Leitern upgradebar zu machen. Das heißt: Unter techtreetunes füge ich die Klasse Leiter dem rezept der Klasse Leiter_Metall hinzu. Problem hierbei ist, das scheinbar BOXED_CLASSES (Klassen die in Kisten gepackt sind), nicht von Produktionsstätten erkannt werden, genau wie die Erzbrocken.

Wenn ich aber...

Code: Alles auswählen

def_class Leiter metal elevator 2 {} {
...auf

Code: Alles auswählen

def_class Leiter metal material 2 {} {
...ändere, dann wird die Leiter als Rohstoff erkannt und die Produktionsstätte beginnt die Produktion. Nur leider verliert die Leiter dann ihre funktion und ich kann sie nicht auspacken/einpacken.

Irgendwo anders muss der typ material deklariert sein. Dann kann man dort eventuell neue typen erstellen, oder so.
In Discord as: SkyNet#9744
SkyNet
Raupe
Raupe
Beiträge: 36
Registriert: Mi 4. Dez 2013, 17:57

Re: Texture variation

Beitrag von SkyNet »

Des weiteren frage ich mich, ob es möglich währe, in Rezepten der techtreetunes eine "ODER" funktion einzubauen. Ich bin nämlich dabei neue Erze zu implementieren. Zum beispiel hab ich da die Klassen: Roteisenerzbrocken und Pyritbrocken. Beides ist ein Eisenerz und dient als Eisenquelle. Ich will mir aber nicht extra zusätzliche Produktionsbuttons in der Schmelze/Hochofen für jedes Erz modden.
In Discord as: SkyNet#9744
Benutzeravatar
cech12
Zwerg
Zwerg
Beiträge: 242
Registriert: Di 9. Jun 2015, 12:18
Kontaktdaten:

Re: Texture variation

Beitrag von cech12 »

In der techtreetunes.tcl findest du ab Zeile 932

Code: Alles auswählen

"Eisen_" { ;# in Hochofen
	set tttmaterial_Eisen_				{Kohle Kohle Eisenerz Eisenerz Eisenerz}
	set tttinvent_Eisen_				{}
	set tttgain_Eisen_					{{exp_Metall 0.02} {exp_Energie 0.006}}
	set tttinfluence_Eisen_				{{exp_Metall 0.3}}
	set tttnumber2produce_Eisen_		3
}
Mit Hilfe der Unterstriche, wird quasi ein anderes Rezept für Eisen angegeben. Das heißt, wenn du ein neues Rezept für Eisen anlegen möchtest, dann kann das so aussehen:

Code: Alles auswählen

"Eisen__" {
	set tttmaterial_Eisen__				{Pilzstamm}
	set tttinvent_Eisen__				{}
	set tttgain_Eisen__					{{exp_Metall 0.02} {exp_Energie 0.006}}
	set tttinfluence_Eisen__				{{exp_Metall 0.3}}
	set tttnumber2produce_Eisen__		3
}
Nun muss Eisen__ nur noch in die Fertigungsstätten eingetragen werden und tadaa, nun sind zwei Eisen-Buttons da. :)
SkyNet
Raupe
Raupe
Beiträge: 36
Registriert: Mi 4. Dez 2013, 17:57

Re: Texture variation

Beitrag von SkyNet »

Ja, aber ich will nicht zusätzliche Produktionsbuttons für das gleiche Produkt modden. Dann hätte ich zwei Eisen buttons in der gleichen PS.
In Discord as: SkyNet#9744
Benutzeravatar
cech12
Zwerg
Zwerg
Beiträge: 242
Registriert: Di 9. Jun 2015, 12:18
Kontaktdaten:

Re: Texture variation

Beitrag von cech12 »

Ach, so meinst du das. :) Du Willst einen Eisen-Button in der PS haben, aber mehrere Rezepte dafür. Puh, ich glaube, da macht die Engine nicht mit. Dann weiß die Engine bzw. die PS ja gar nicht, welches Rezept du nun verwenden möchtest, auch wenn es schließlich egal wäre.

Also entweder macht man das mit den mehreren Buttons über die techtreetunes oder man versucht es über die tcl der PS. Aber dann müsste man vermutlich alle Buttons der PS neu erstellen, so wie es bei Lager passiert und die Vorzüge der techtreetunes, alle Items und Eigenschaften aufzulisten und dann sind sie einfach in der PS, wären hinfort.
zed2000
Hamster
Hamster
Beiträge: 52
Registriert: Mi 25. Feb 2015, 02:02

Re: Texture variation

Beitrag von zed2000 »

Mehrere Rezepte für einen Rohstoff stößt wieder auf das Problem, das der Event-Generator wohl in der exe eingebaut ist. Das, was die Wiggles zur Produktionsstätte bringen, hängt davon ab, ob das Produktionsicon geklickt wurde. Da geht nur ein Rezept pro Icon.
SkyNet
Raupe
Raupe
Beiträge: 36
Registriert: Mi 4. Dez 2013, 17:57

Re: Texture variation

Beitrag von SkyNet »

Ich hab da mal wieder etwas herumgebastelt und die Schatztonne im Sägewerk herstellbar gemacht. Ich kann auch items darin speichern. Was mir jetzt noch fehlt ist eine Funktion für die inventar liste der Schatztonne, die dessen Textur variation nach dem auspacken der Tonne verändert, je nachdem was sie gerade ins inventar aufgenommen hat... z.B:

- Bei Kohle = Textur A
- Bei Nahrung = Textur B
- Bei einem Wuker = Textur C
- Bei allem anderen = Textur D

Jetzt bin ich schon den ganzen Tag am versuchen, schnalls aber nicht. Ich hab dutzende Methoden ausprobiert und seh den Fehler einfach nicht.

Code: Alles auswählen

def_class Schatztonne none material 0 {} {

	method release_content {owner} {
		global destroyed

		if {$destroyed} {
			return
		}
		set destroyed 1
		set_attrib this PilzAge 1
		set cpos [get_pos this]
		action this anim tonne.ani {set_anim this tonne.auf 0 $ANIM_STILL}
		set_particlesource this 0 5
		release_nextitem $owner
	}

	method is_destroyed {} {
		global destroyed
		return $destroyed
	}

	def_event evt_timer0
	def_event evt_timer1
	def_event evt_timer2


	handle_event evt_timer0 {
		release_nextitem [event_get this -subject1]
	}

	handle_event evt_timer1 {
		set_physic this 0
		set_vel this {0 0.05 0}
		set_forceipol this 1
		timer_event this evt_timer2 -userid 1 -repeat 0 -attime [expr {[gettime]+5}]
	}

	handle_event evt_timer2 {
		del this
	}

	call scripts/misc/animclassinit.tcl
	call scripts/classes/items/calls/takeitems.tcl

	obj_init {
		call scripts/misc/animclassinit.tcl
		set_roty this [random 6.28]
		set_anim this tonne.zu 0 $ANIM_STILL
		change_particlesource this 0 13 {0 -0.4 0.1} {0 -0.07 0.01} 300 50 0
		set_collision this 1
		set_viewinfog this 1
		set destroyed 0
		set_attrib this PilzAge 0
        call scripts/classes/items/calls/takeitems.tcl
				
		proc check_inventory_list {item} {
			set item [inv_list this]
			if {[lsearch "Kohle" [get_objtype $item]] != -1} {
				set_texturevariation this 1 1
			} elseif {[lsearch "Grillpilz Grillhamster Pilzbrot Raupensuppe Raupenschleimkuchen Pilzbrot Gourmetsuppe Hamstershake" [get_objtype $item]] != -1} {
				set_texturevariation this 2 2
			} elseif {[lsearch "Wuker" [get_objtype $item]] != -1} {
				set_texturevariation this 3 3
			} else {
				set_texturevariation this 0 0
			}
		}

		proc release_nextitem {owner} {
			set ilst [inv_list this]
			if { [llength $ilst] } {
				global cpos
				set item [lindex $ilst 0]
				inv_rem this $item
				//if {[get_boxed $item]} {
				    set_owner $item $owner
				//}
				if {[lsearch "production protection store elevator energy" [get_objtype $item]] != -1} {
					if {[check_method [get_objclass $item] packtobox]} {
						log "Methode packtobox fuer $item wird aufgerufen"
						call_method $item packtobox
					}
				}
				if {[get_objclass $item]=="Schatzbuch"} {
					call_method $item initiate [get_pos this]
				} else {
					set_posbottom $item [vector_add $cpos {0.0 -0.2 0.0}]
				}
				set_hoverable $item 1
				timer_event this evt_timer0 -subject1 $owner -userid 1 -repeat 0 -attime [expr {[gettime]+0.2}]
			} else {
				set_hoverable this 0
				timer_event this evt_timer1 -userid 1 -repeat 0 -attime [expr {[gettime]+5}]
			}
		}
	}
}
In Discord as: SkyNet#9744
Benutzeravatar
cech12
Zwerg
Zwerg
Beiträge: 242
Registriert: Di 9. Jun 2015, 12:18
Kontaktdaten:

Re: Texture variation

Beitrag von cech12 »

Hey SkyNet,

ich habe mir mal deinen Code angesehen. Ich gehe jetzt einfach mal davon aus, dass du den Textur-Namen der Tonne und die neuen Texturen in die txtinit.tcl eingefügt hast und die Funktion check_inventory_list in irgendeiner Weise nach dem Auspacken aufgerufen wird. :D

In dem Fall, fällt mir sofort ins Auge, dass du gleich nach dem Funktionsaufruf den Parameter item (wahrscheinlich ein einzelnes Objekt) mit einer Liste überschreibst:

Code: Alles auswählen

set item [inv_list this]
Versuche mal den Code-Anfang

Code: Alles auswählen

proc check_inventory_list {} {
         set item [lindex [inv_list this] 0]
         ...
}
Damit nimmst du das erste Element des Inventars. Wenn du das gesamte Inventar durchsuchen möchtest, dann müssten die if-Abfragen anders aussehen, da vermutlich get_objtype auf einer Liste komische Dinge tut? ^^

Ich hoffe, das hilft.

Viele Grüße
Chris
Antworten