Inhaltsverzeichnis

Leben ins Dorf

An diesem Beispiel kann man sehen, wie man ein Dorf beleben kann. Wie man Dinge übergeben kann (Schlüssel, Briefing, was auch immer) Das Beispiel ist mit 100 Serfs. Man kann natürlich alles x-beliebige in das Table packen. Ist ja nur ein Beispiel.

Hier ein Beispiel, was irre ist. Aber fragt mich nicht, wie ich das geschafft habe. Ich weiß es nicht mehr 8-O
Kroßes Garte prauchen

Die Kommentare sollten schon (fast) alles sagen.

---------------------------------------------------------------------------------
-- MapName:Zufälliges Übergeben (Hier der NPC-Marker)
-- Autor: Peermanent(Idee) & Robert (Ausführung)
----------------------------------------------------------------------------------------------------
Script.Load( Folders.MapTools.."Main.lua" )
IncludeGlobals("MapEditorTools")
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
function InitResources()
----------------------------------------------------------------------------------------------------
    AddGold  (1000)
    AddSulfur(0)
    AddIron  (0)
    AddWood  (11000)	
    AddStone (1000)	
    AddClay  (1000)
 
    AddGold  (2,5000)
end
function InitDiplomacy()
	SetHostile(1,2)
end
----------------------------------------------------------------------------------------------------
function InitTechnologies()
----------------------------------------------------------------------------------------------------
end
----------------------------------------------------------------------------------------------------
function InitWeatherGfxSets()
----------------------------------------------------------------------------------------------------
end
----------------------------------------------------------------------------------------------------
function InitWeather()
----------------------------------------------------------------------------------------------------
end
----------------------------------------------------------------------------------------------------
function InitPlayerColorMapping()
----------------------------------------------------------------------------------------------------
end
----------------------------------------------------------------------------------------------------
function FirstMapAction()
----------------------------------------------------------------------------------------------------
	Tools.ExploreArea( -1, -1, 900 )-- Der Herr sprach es werde Licht
	xWorld,yWorld =Logic.WorldGetSize() -- Wie groß ist die Karte
	xWorld=xWorld-200 -- Sicherheit abziehen
	yWorld=yWorld-200 -- Sicherheit abziehen
	nUeberGabeZeit=10 -- wieviel sekunden muß gewartet werden bis eine neue Übergabe stattfinden kann
	ueberGabeZeit=nUeberGabeZeit -- Übergabezähler hochsetzten
	nWarteZeit=4 -- wie lange wartet er, wenn er den Punkt erreicht hat
	abzaehlen = false
	idWechseln=false -- wenn statt dem Marker die Id geändert werden soll ==> true
	serfs={}
	nPlayer=3	

Alternative 1

Hier wie oben gesagt 100 Serfs

	for i= 1, 100 do -- 100 zufällige Serfs erzeugen
	local _punkt=MachRandomPunkt()
		CreateEntity(3  ,Entities.PU_Serf,_punkt,"Serf"..i)
		table.insert(serfs,{"Serf"..i,_punkt,_punkt,0})
	end

Alternative 2

Hier eigen gewählte Entities

	local entry={
                "Willi",  -- steht drin
  				      {X=5000, Y=5000}, -- steht drin
 				   {X=5000, Y=5000}, -- steht drin
                0, -- WarteZähler. Soll 0 sein
                }
	CreateEntity(nPlayer  ,Entities.PU_Serf,entry[2],entry[1])
	table.insert(serfs,entry)
          entry={
                "Otto",  -- steht drin
                {X=5500, Y=5500}, -- steht drin
                {X=5500, Y=5500}, -- steht drin
                0, -- WarteZähler. Soll 0 sein
                }
    CreateEntity(nPlayer  ,Entities.PU_Serf,entry[2],entry[1])
    table.insert(serfs,entry)

– und so weiter

Weiter in der FistMapAction

	markerTraeger=1 -- Nummer des Serfs, der den Marker hat
	if idWechseln then
		ChangePlayer(serfs[markerTraeger][1],1)
	else
		EnableNpcMarker(serfs[markerTraeger][1])
	end
	Camera.FollowEntity(GetEntityId(serfs[markerTraeger][1]))
	StartSimpleJob("Ueberwachen2")-- ab die Post
 
end	
function Ueberwachen2()
	for i = 1, table.getn(serfs) do
		if (not (i == markerTraeger))and IsNear(serfs[markerTraeger][1],serfs[i][1],500) and (not abzaehlen)then
			-- ist er es nicht selbst (i)
			-- ist er in der Nähe eines Kumpels
			-- hat nicht gerade eine Übergabe stattgefunden
				if ueberGabeZeit == nUeberGabeZeit then -- nach einer Übergabe erneute Übergabe erstmal blockiert
					if idWechseln then
						ChangePlayer(serfs[markerTraeger][1],nPlayer)
						ChangePlayer(serfs[i][1],1)
					else
						EnableNpcMarker(serfs[i][1])-- bisheriger Träger bekommt die Sache entzogen (hier NPC-Marker)
						DisableNpcMarker(serfs[markerTraeger][1])-- er bekommt sie (hier NPC-Marker)
					end
					markerTraeger=i -- das ist der Träger
					Camera.FollowEntity(GetEntityId(serfs[markerTraeger][1]))
					abzaehlen=true -- es wird abgezählt. Solange keine Übergabe möglich
				end
		end
		if (not Logic.IsEntityMoving(serfs[i][1])) then  -- steht der Serf?
			if serfs[i][2] == serfs[i][3] then  -- ist er auf seinem Bestimmungsord angekommen?
				-- neuer Punkt
				serfs[i][5]=0 -- Zähler fürs Warten runtersetzten
				serfs[i][2]=GetPosition(serfs[i][1]) ---Wo ist er jetzt
				serfs[i][3]=MachRandomPunkt() -- Neuen Zufallspunkt erzeugen
				Move(serfs[i][1],serfs[i][3])  -- ab dahin
			else -- ist noch nicht angekommen
				if serfs[i][4] < nWarteZeit then --etwas warten, kann ja durch andere blokiert sein
					serfs[i][4]=serfs[i][4]+1
				else
					-- dauert zu lange ==> neuer Punkt
					serfs[i][5]=0 -- Wartezeit wieder runtersetzten
					serfs[i][2]=GetPosition(serfs[i][1])---Wo ist er jetzt
					serfs[i][3]=MachRandomPunkt()-- Neuen Zufallspunkt erzeugen
					Move(serfs[i][1],serfs[i][3])-- ab dahin
				end
			end
		else
			if serfs[i][5]~=0 then
				serfs[i][5]=0 -- Wartezeit wieder runtersetzten falls er aufgehalten wurde
			end
		end
	end
	if abzaehlen then -- nach einer Übergabe erneute Übergabe erstmal blockiert
		ueberGabeZeit=ueberGabeZeit-1
		Message(ueberGabeZeit)
		if ueberGabeZeit == 0 then
			abzaehlen=false -- jetzt darf wieder übergeben werden
			ueberGabeZeit =	nUeberGabeZeit
		end
	end
 
end
 
 
---------------------------------------------------------------------------------------------
function MachRandomPunkt()  -- Zufälligen Punkt erzeugen
		randomX=math.random (xWorld)+100 
		randomY=math.random (yWorld) +100
	return {X=randomX,Y=randomY}
end