Technologie neu erforschen

» Siedler Map Source Forum » Siedler DEdK Script Forum » Technologie neu erforschen

Seiten: 1

Play4FuN
#1
01.09.2017 15:56
Beiträge: 704

Technologie neu erforschen

Hallo allerseits.

Vorab schon mal: ein ähnliches Problem hatte ich hier schon mal gesehen, finde leider gerade nix konkret hierzu - wenn's jemand findet, gerne verlinken
(warum kann man seine eigenen Forenbeiträge nicht übersichtlich auflisten? ... )

Zum Thema: ich möchte, dass der Spieler diverse Technologien neu erforschen muss, nachdem er sie bereits ein mal erforscht hat.

Also:
Erforschen
...
[mysteriöse Story]
...
(Verbieten)
Erneut erforschen!
...

Der Ansatz aus dem Forum

ForbidTechnology(_tech, 1)
AllowTechnology(_tech, 1)


bringt leider nicht viel. Heißt: in der Uni wird (Bsp Konstruktion) die Tech als bereits erforscht angezeigt (nach obigen Aufrufen!!!) und dennoch kann man die entsprechenden Gebäude (Lehmhütte und Sägemühle) nicht bauen, dort steht (vermeintlich korret), dass man erst Konstruktion bräuchte.

Help pls

Möchte keine hässlichen workarounds haben - also einfach die Techs für die Gebäude selbst nutzen ist hier blöd...

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#2
01.09.2017 19:22
Beiträge: 1472

Das ist möglicherweise nur ein Anzeigebug. Prüf mal nach, was der Tech-Status ist (gibt da ne Logic-Funktion für, am einfachsten per Debugger). Wenn es wirklich nicht erforscht ist, musst du nur die Buttons in der Uni manuell updaten.

Play4FuN
#3
02.09.2017 11:38
Beiträge: 704

Danke mcb, hilft leider nicht wirklich weiter.

Habe den tech status mit Debugger geprüft, bin jetzt komplett durcheinander

Sage ich AllowTech ... (status 2), kann man Ziegelhütte und Sägemühle nicht bauen! Auch wenn die Tech zuvor erforscht wurde, nur dass dann sogar der Button eben als "ist bereits erforscht" angezeigt wird. (Highlight button fehlt also) - Zu sehen in updatebuttons.lua -> GUIUpdate_GlobalTechnologiesButtons

Finde das gerade dezent verwirrend ...

Werde evtl das ganze doch irgendwie selbst speichern müssen und mit DisableButton arbeiten :/

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#4
02.09.2017 13:05
Beiträge: 1472

Wie sieht der Techstatus bei den Gebäudetechs aus?

Es gäbe allerdings noch ein paar Tricks, die mir jetzt Spontan einfallen: Auf einen anderen Spieler wechseln, der hat unbenutzte Techs (Mit Farbe anpassen und so merkt das keiner) oder alle Entitys speichern (z.B. in GDB oder per Hook), Map neu starten und Entities wiederherstellen.

Play4FuN
#5
02.09.2017 16:23
Beiträge: 704

Zitat von mcb:
Wie sieht der Techstatus bei den Gebäudetechs aus?

Habe ich noch nicht geprüft...

Zitat von mcb:
Auf einen anderen Spieler wechseln, der hat unbenutzte Techs

Das klingt nach einer interessanten Idee ...

Restart wäre hier ein Riesen-Aufwand. Geht um ne Questmap die schon jetzt viel zu riesig ist (hab bald 10k Zeilen...)

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Peter-FS
#6
04.09.2017 11:52
Beiträge: 1086

TechState

Hier mal die original Funktion für die Buttons. Daraus erkennt man zumindest die Zustände und den TechState.
Du kannst die Status auch setzen:
Logic.SetTechnologyState(_playerId,Technologies.GT_ChainBlock, 0)

--------------------------------------------------------------------------------
-- Update Technology buttons that are depening on the Buildingtype
--------------------------------------------------------------------------------
function GUIUpdate_TechnologyButtons(_Button, _Technology, _BuildingType)
	
	local PlayerID = GUI.GetPlayerID()
	local SelectedBuildingID = GUI.GetSelectedEntity()
	local SelectedBuildingType = Logic.GetEntityType( SelectedBuildingID )
	local TechState = Logic.GetTechnologyState(PlayerID, _Technology)	
	local UpgardeCategory = Logic.GetUpgradeCategoryByBuildingType(_BuildingType)
	local EntityTypes ={ Logic.GetBuildingTypesInUpgradeCategory( UpgardeCategory ) }		
	local PositionOfSelectedEntityInTable = 0
	local PositionOfNeededEntityInTable = 0
	for i=1,EntityTypes[1],1
	do		
		if EntityTypes[i+1] == SelectedBuildingType then
			PositionOfSelectedEntityInTable = i+1
		end		
		if EntityTypes[i+1] == _BuildingType then
			PositionOfNeededEntityInTable = i+1
		end
	end
	--Technology is researched
	if 	TechState == 4 then			
			XGUIEng.DisableButton(_Button,0)
			XGUIEng.HighLightButton(_Button,1)
			return
	end	
	if PositionOfNeededEntityInTable > PositionOfSelectedEntityInTable
	or  TechState == 1 then	
		XGUIEng.DisableButton(_Button,1)
	else
		--Building is interdicted
		if TechState == 0 then	
			XGUIEng.DisableButton(_Button,1)		
		----Technology is not available yet
		--elseif TechState == 1 then
		--	XGUIEng.DisableButton(_Button,1)						
		--Technology is enabled 
		elseif TechState == 2 then
			XGUIEng.DisableButton(_Button,0)		
		--Technology is in reserach ot to far in the future
		elseif TechState == 3 or TechState == 5 then
			XGUIEng.DisableButton(_Button,1)	
		end	
	end
end



____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Play4FuN
#7
04.09.2017 20:58
Beiträge: 704

Jup, alles bekannt ... Problem leider trotzdem wie ich versucht hab zu beschreiben :C

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Peter-FS
#8
07.09.2017 13:16
Beiträge: 1086

ResearchATech v.0.2 by Fire_Bird

Probier mal das hier, läuft super!
Den geänderten Code kann ich bei bedarf schicken.

Du musst dich halt selbst um die Freigabe der Buttons in der Uni kümmern, sollte aber kein Problem sein, oder?

ResearchATech v.0.2 by Fire_Bird 2016
RAT_StartResearch("blitzschutz",831,Func_Callback,150,Func_Cancel,{Entities.PB_Residence1,})
RAT_StartResearch(_tech,_icon,_callback,_duration,_cancelCall,_building)
_tech = Die Technologie, die es zu Erforschen gilt ("" wenn keine Tech explizit erforscht werden soll)
_icon = Das Symbol der Tech
_callback = Die Funktion, die am Ende der Forschung aufgerufen wird (Tech-Effekt)
_duration = Wie lange man für die Forschung brauchen soll (in 1/10-Sekunden)
_cancelCall = Funktion, die bei Forschungsabbruch aufgerufen wird, z.b. für Kostenrückerstattung
_building = Das Forschungsgebäude (Bank, Uni..) (als Table)
Beispiel:
RAT_StartResearch("","Research_Banking",Func_Callback,150,Func_Cancel,{Entities.PB_Bank1,Entities.PB_Bank2})
-> Ruft die Funktion "Func_Callback" auf, sobald die Forschung beendet ist
-> Ruft die Funktion "Func_Cancel" auf, sobald die Forschung abgebrochen wurde
-> Forschung läuft in jedem Bank-Gebäude, und zwar für 15 Sekunden mit dem Logo "Research_Banking"
## Hinweise:
- Das Script beachtet nicht, ob Gelehrte in der Uni sind
- Das Script erstellt keine Tech-Buttons in der Hochschule.

Peter-FS / 03/2017 für meine Bedürfnisse angepasst:
- Anzeige des Fortschritt in einem Gebäude möglich: z.B. Name oder Id des Gebäudes, Entities funktionieren immer noch
- Callback und Cancel verursachen keinen Fehler, wenn nil

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum