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