warrior1024
15.02.2010 16:46
1142 mal angesehen

Wenn man gewisse Funktionen überschreibt...

Durch einen 45 Zeilen langen Hack habe ich das Bevölkerungslimit verändert, die Lebenspunkte erhöht, die Angriffskraft leicht erhöht und noch die Verteidigungskraft.

Wenn Interesse besteht, poste ich den Code als Comfortfunktion(muss aber noch entwickelt werden). Wer selbst eine Lösung finden will, kann versuchen, das Superfighterscript zu verstehen. Wenn ihr es einmal verstanden habt, ist es immer sehr ähnlich.


Auf das Bild klicken, um es in Originalgröße zu sehen (146,99 KB)


Kommentare

» Kommentar schreiben

fighty
22.11.2015 18:25

Nimmt dieser Mod nicht den Reiz des Spiels, ähnlich wie die Cheats?

warrior1024
15.02.2010 21:16

Das hab ich auch bei einem Testlauf bemerkt und das Prinzip war schon richtig(alles was Logic im Namen hat und passen könnte umschreiben), aber ich habe vergessen, das Event hier umzuschreiben:
LOGIC_EVENT_ENTITY_HURT_ENTITY

Und mein Entwurf bringt noch nicht viel:

LOGIC_EVENT_ENTITY_HURT_ENTITY = function()
		local Angreifer = Event.GetEntityID1
		local Opfer = Event.GetEntityID2
		local AngreiferName = GetEntityName(Angreifer)
		local OpferName = GetEntityName(Opfer)
		local Opfer2 = Opfer
		if (AngreiferName == "Miliz") then
			if (Logic.IsLeader(Opfer) == 1)then
				Opfer2 = Logic.GetSoldiersAttachedToLeader(Opfer)
			end
		end
		local DMG = Logic.GetEntityDamage(Angreifer) - Logic.GetEntityArmor(Opfer2)
		Logic.HurtEntity(Opfer2, DMG)
	end

Mordred
15.02.2010 20:57

Hab gerade Damage getestet(angriff), ich glaub, dass
das auch nur für die GUI gilt. Erec war dannach genauso
stark wie davor, obwohl er eigentlich um das 100-fache
stärker sein sollte. Aber angezeigt(GUI) war das richtige.

Mordred
15.02.2010 20:48

Ist schon toll geworden!
Klappt das alles auch ohne
Debug-meldung?
Muss ich unbedingt mal ausprobieren!

totalwarANGEL
15.02.2010 18:01

quote=warrior1024] Aber kein Grund zur Sorge, die Logic-Funktionen bieten noch viele Funktionen zum modden![/quote]
kann ich nur bestätigen

warrior1024
15.02.2010 17:47

Ich hab mal zum Kundschafter noch eine Burg gesetzt und du hast Recht, ich kann keine LE´s kaufen. Aber kein Grund zur Sorge, die Logic-Funktionen bieten noch viele Funktionen zum modden!

Katmai300
Gast
15.02.2010 17:37

Ich habe den Einheiten-Limit Hack ausprobiert und zumindest bei mir (1.06 Extra2) kommt bei dem Versuch das Einheitenlimit, das es ohne Hack geben müsste, zu überschreiten die Meldung, ich hätte keinen Platz mehr. Wenn ich dann per Script höher gehe, kommt zwar keine Meldung, aber Einheiten kann ich auch nicht mehr kaufen.
Ich vermute einfach mal, das die von dir gehackte Funktion, nur das GUI beeinflusst, aber das eigentliche Einheitenlinit fest im C++-Code verdrahtet und somit ohne Modifikation der exe nicht manipulierbar ist. Einige der erfahrenen Leute haben das aber, glaube ich, auch schon mal gesagt.
Allerdings könnte man mithilfe dieses Hacks die GUIActions der Buttons abfangen und z. B. die Leibis dann einfach vor die Burg stellen und damit das Einheitenlimit zwar nicht entfernen, aber doch zumindest, so wie bei Noigis Mod "Im tiefen Mittelalter", umgehen.

Die anderen Hacks teste ich wahrscheinlich noch später.

warrior1024
15.02.2010 17:00

Ok, an dem HP-Hack muss noch etwas geändert werden(im Moment wird eine gehackte Einheit unverwundbar), aber hier ist der Code, noch nicht als Comfort:

function Init_Mod()
	--Siedlungslimit_HACK
	GetPlayerAttractionLimit_Orig = Logic.GetPlayerAttractionLimit
	Logic.GetPlayerAttractionLimit = function(_player)
		if (_player == 1) then
			return 321
		end
		return GetPlayerAttractionLimit_Orig(_player)
	end
	--Rüstungs_HACK
	GetEntityArmor_Orig = Logic.GetEntityArmor
	Logic.GetEntityArmor = function(_id)
		local ArmorHackName = GetEntityName(_id)
		if (ArmorHackName == "Miliz") then
			return 2048
		end
		return GetEntityArmor_Orig(_id)
	end
	--Schadens_HACK
	GetEntityDamage_Orig = Logic.GetEntityDamage
	Logic.GetEntityDamage = function(_id)
		local DamageHackName = GetEntityName(_id)
		if (DamageHackName == "Miliz") then
			return 4096
		end
		return GetEntityDamage_Orig(_id)
	end
	--Max_LP_HACK
	GetEntityMaxHealth_Orig = Logic.GetEntityMaxHealth
	Logic.GetEntityMaxHealth = function(_id)
		local LPHackName = GetEntityName(_id)
		if (LPHackName == "Miliz") then
			return 8192
		end
		return GetEntityMaxHealth_Orig(_id)
	end
	--LP_Hack
	GetEntityHealth_Orig = Logic.GetEntityHealth
	Logic.GetEntityHealth = function(_id)
		local LP2HackName = GetEntityName(_id)
		if (LP2HackName == "Miliz") then
			return 8192
		end
		return GetEntityHealth_Orig(_id)
	end
end



Die Einheit, die "Miliz" heißt, bekommt die Eigenschaften(HP, Angriff, Deff) des Kundschafters. Zusätzlich wird das Bevölkerungslimit von Spieler1 unabhängig von DZs auf 321 gesetzt. Der Spieler 1 ist dann unabhängig von DZs.

Aufgerufen wird das ganze mit:

Init_Mod()

Wladimir
15.02.2010 16:51

Mich interessiert vorallem die Erhöhung der Lebenspunkte, sowie Angriff und Verteidigung. Haste klasse gemacht!
Wär schön, wenn du es posten würdest.

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

Impressum