Erweiterte Entlassung im MP

» Siedler Map Source Forum » Siedler DEdK Script Forum » Erweiterte Entlassung im MP

Seiten: 1

RitterLeo
#1
30.06.2019 12:28
Beiträge: 237

Erweiterte Entlassung im MP

Ich wollte hier mal nachfragen ob es eine Möglichkeit gibt, im Multiplayer alle Leibeigenen zu entlassen.
Derzeit habe ich nur herausgefunden wie man eben einen Button einfügt jedoch ohne Text usw.

Deshalb nun die Frage ob jemand weiss wie ich diesem Button den Nutzen gebe alle Leibeigenen von der jeweiligen SpielerId zu entlassen. In diesem Fall in der Burg.

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

mcb
#2
30.06.2019 13:59
Beiträge: 1472

Wo hast du denn den Button her?
In jedem Fall musst du ne action funktion schreiben, die dann die eigentliche Arbeit macht. Da musst du dann an die ids der Serfs kommen und die entlassen (was zum glück von siedler synchronisiert wird, du hast also kein problem damit im mp).

RitterLeo
#3
30.06.2019 16:37
Beiträge: 237

den Button habe ich erstmal nur angezeigt.

XGUIEng.ShowWidget("Levy_Duties",1)
XGUIEng.TransferMaterials("Research_Laws", "Levy_Duties")


Natürlich habe ich so eine ähnliche funktion bei dem Button Lightbricks in der Ziegelhütte gefunden. Zudem weiss ich derzeit nur bei einem Spiel das es möglich ist alle Serfs zu löschen (+Geld dafür bekommen) nämlich bei Die Schlacht der Helden mit Salims fähigkeit.

Jedoch weiss ich noch nicht genau wie sich dieser Button nutzen lässt, bzw. wie ich das dann auf die einzelnen Spieler anwenden sollte ob nun für jeden extra oder gekürzt.

Aber an die Id der Serfs zu kommen sollte ja kein Problem sein.

Edit: Gefunden, sollten die ID 17 haben.

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

Dieser Beitrag wurde von RitterLeo am 30.06.2019 um 17:11 editiert.

mcb
#4
30.06.2019 19:52
Beiträge: 1472

Dazu musst du die Funktion GUIAction_LevyTaxes überschreiben.
Also ungefähr so:

function GUIAction_LevyTaxes()
   for id in S5Hook.EntityIterator(Predicate.OfPlayer(GUI.GetPlayerID(), Predicate.OfType(Entities.PU_Serf)) do
      GUI.ExpelSettler(id)
   end
end


Den Toltip kannst du mit GUITooltip_LevyTaxes ändern, ne update hat der button nicht.

Edit: Ich nutze da den Hook um an die entityids zu kommen, kannst natürlich auch sowas wie SucheAufDerWelt benutzen, falls du den hook nicht magst.

RitterLeo
#5
30.06.2019 20:32
Beiträge: 237

Werde ich mal ausprobieren, wäre nämlich sehr nützlich für MP da wir ansonsten vor WS Ende um die 100 Leibis löschen müssten.
Wir werden sehen wie gut das klappt.
Haste da noch was um den Button zu beschriften?

Schonmal vielen dank dir mcb.
LG RitterLeo

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

mcb
#6
30.06.2019 20:42
Beiträge: 1472

Hatte ich auch schon greschrieben, dazu musst du die GUITooltip_LevyTaxes überschreiben, also so:

function GUITooltip_LevyTaxes()
   XGUIEng.SetText("TooltipBottomText", " @color:180,180,180 Massenentlassung @color:255,255,255 @cr Entlasst ALLE Eure Leibeigenen!")
   XGUIEng.SetText("TooltipBottomCosts", "")
   XGUIEng.SetText("TooltipBottomShortCut", "")
end


(Den Text kannst du natürlich ändern wie du willst)

RitterLeo
#7
01.07.2019 13:16
Beiträge: 237

Dann geh ich mal zu einem anderem Problem über.
Wenn ich bei einem Tribut für 800 Stein die Festung erlauben will klappt das nicht, habe jeweils mit Research and AllowTechnologie versucht jedoch vergebens. Das Tribut wird ja angezeigt doch irgendwie will es nicht klappen.
Weiss da jemand eine Lösung?

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

mcb
#8
01.07.2019 14:30
Beiträge: 1472

Es ist ne MP Map? Dan sieh mal hier ganz unten: http://www.siedler-games.de/si.../doku.php?id=tutorials:tribute

RitterLeo
#9
01.07.2019 15:19
Beiträge: 237

Nein es ist eine Singleplayer.

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

mcb
#10
01.07.2019 15:35
Beiträge: 1472

Dann poste mal den Code mit dem du den Tribut erzeugst.

RitterLeo
#11
01.07.2019 16:49
Beiträge: 237

also ich mach dies normalerweise so:

function Trader2_Coming()
CreateMilitaryGroup(4, Entities.CU_MasterBuilder, 0, GetPosition("Spawn_Trader"),"Architekt")
CreateNpc_Architekt()
Move("Architekt","Move_Trader")
end

function CreateNpc_Architekt()
	local npc = {
        name     = "Architekt", 
		heroName = "Pilgrim",
		marker = true, 
		wrongHeroMessage = "Nein, bloss weg",	
	    callback = function()
			Briefing_Architekt()
		RemoveNpcFromTable("Architekt")
		end
    }
    CreateNPC(npc)	
end

function Briefing_Architekt()
Briefing_SetParameter(true, 0.8, 2000, 10, 900,13)
    local briefing = {}
    local AP, ASP = AddPages(briefing);
	ASP("Architekt","Architekt", "Hier ist ja alles öde, keine Prachtvollen bauten hier.", true)
	ASP("Architekt","Architekt", "Willst du vielleicht etwas Kultur hierher bringen? Sagen wir 800 Stein und ich lass dich eine Festung bauen, die wird sicher sehr schön.", true)
		StartBriefing( briefing)
	briefing.finished = function()
TributFestung()
	end
end

function TributFestung()
	local tribute =  {}
	tribute.playerId = 1;
	tribute.text = "Zahlt 800 Stein damit euch der Architekt die Burg ausbauen laesst";
	tribute.cost = {Stone = 800};
	tribute.Callback = TributFestungBezahlt;
	AddTribute( tribute )
end

function TributFestungBezahlt()
tribute.Technologies = { Technologies.UP1_Headquarter };
Move("Architekt","Spawn_Trader")
StartSimpleJob("DestroyTrader2")
		end;

function DestroyTrader2()
if IsNear("Architekt","Spawn_Trader", 600) then
DestroyEntity("Architekt")
StartCountdown( 60*9,Trader3_Coming,false)
return true
end
end


Gedacht ist das eben einige male ein Händler mit einer neuen Technologie vorbeikommen nachdem der vorherige Händler eine Gewisse Position erreicht hat.
Ich habe schon bereits getestet und der Architekt ,in diesem Falle, wird erschaffen und geht auch wieder sobald der Tribut bezahlt wurde, jedoch ist die Festung nicht ausbaubar.

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

mcb
#12
01.07.2019 17:16
Beiträge: 1472

Liegt daran, das du die Technologie nirgendwo erlaubst/erforschst.
So sollte es funktionieren:

function TributFestungBezahlt()
   AllowTechmology(Technologies.UP1_Headquarter)
   Move("Architekt","Spawn_Trader")
   StartSimpleJob("DestroyTrader2")
end

RitterLeo
#13
01.07.2019 17:23
Beiträge: 237

Dann muss ich vorher irgendetwas falsch geschrieben haben weil es da nicht klappte. Naja, danke dir jedenfalls .

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

RitterLeo
#14
01.07.2019 19:51
Beiträge: 237

Wenn ich die von dir geschriebene Variante zum Benennen des Buttons verwende erscheint irgendwie garnichts. Es steht halt immernoch Taxis: 0 da usw.
Und ja ich Rufe die funktion auf .

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

mcb
#15
02.07.2019 13:57
Beiträge: 1472

Du musst die Funktion nicht Aufrufen, du musst sie nur da lassen, damit Siedler sie Aufrufen kann, wenn der Tooltip gesetzt werden soll.
Vermutlich wird deine Variante zuerst geladen und die originale danach, was dazu führt das deine Variante überschrieben wird. Wenn du deine Funktionsdefinition in die FMA packst, sollte es funktionieren:

function FirstMapAction()
   -- other stuff
   function GUITooltip_LevyTaxes()
      XGUIEng.SetText("TooltipBottomText", " @color:180,180,180 Massenentlassung @color:255,255,255 @cr Entlasst ALLE Eure Leibeigenen!")
      XGUIEng.SetText("TooltipBottomCosts", "")
      XGUIEng.SetText("TooltipBottomShortCut", "")
   end
end

RitterLeo
#16
02.07.2019 20:43
Beiträge: 237

Ah wie schön wenn alles funktioniert.
Wird bestimmt leichter wenn ich das dann irgendwie in die Scripte einbauen kann (derzeit ohne Erfolg).
Aber trotzdem vielen dank!

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

Seiten: 1

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

Impressum