Idee: Spieler sichern/ausbauen

Entwicklung und Vorstellung von LUA Skripten für ASC oder den Mapeditor

Moderator: Moderatoren2

Benutzeravatar
motsch
Stabsfeldwebel
Stabsfeldwebel
Beiträge: 1512
Registriert: Mi 17. Jun 2009, 18:10
Einheitenset: Cromoner
Wohnort: Baiersdorf

Idee: Spieler sichern/ausbauen

Beitrag von motsch »

Wie in Berlin besprochen, habe ich ein Skript begonnen, dass alle Einheiten eines Spielers in Raumschiffe verpackt. Damit soll es ermöglicht werden, eine Spielersicherung schnell durchzuführen oder einem Spieler auf Wunsch und gegen Gebühr einen schnelleren Abflug zu ermöglichen.
Zu meinem Bedauern musste ich schnell feststellen, dass mit LUA kein Zugriff auf den Editorbefehl CUT möglich ist. Somit habe ich diese Entwicklung vorerst eingestellt.
Gruß
motsch
Benutzeravatar
itaker
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2505
Registriert: Sa 13. Jun 2009, 23:02
Einheitenset: Rehaner
Wohnort: Karlsruhe

Re: Idee: Spieler sichern/ausbauen

Beitrag von itaker »

Vielleicht kann der Heiliger San Martin Abhilfe schaffen??
Excalibur
Generalmajor
Generalmajor
Beiträge: 2346
Registriert: Mo 15. Jun 2009, 18:32
Einheitenset: MK 4
Wohnort: 74629

Re: Idee: Spieler sichern/ausbauen

Beitrag von Excalibur »

Ich mache das alles sehr einfach und schnell. Ihr kennt mich ja - Gutsherrenart.
Viele Spieler die ich bisher ausgebaut habe, kamen ja gar nicht zurück.
Ich speichere einfach die Map ab.
z.B. SicherungSYPlanetAlaskaVolkZyklus120.map
dann stelle ich geschwind die Städte auf neutral und lösche den Spieler - fertig.
Das geht alles ruckzuck. Wenn mal tatsächlich später irgendwann ein Spieler wieder mit genau diesem Volk wieder einsteigen will, muss ich mir halt dann die Arbeit machen.
Macht bitte nicht immer alles so kompliziert und so perfekt.

Wir sollten uns mal lieber über Neuspielerwerbung Gedanken machen, habe gerade Turbomässig die Werbung bei Google hochgefahren.
Ich hoffe es kostet mich kein Vermögen ?
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Idee: Spieler sichern/ausbauen

Beitrag von Hanni »

Prinzipiell müsste es auch ohne die CUT Funktion gehen. Beim erstellen eines passenden Minimalbeispieles habe ich den Karteneditor aber leider zum Absturz gebracht. Der Fehler an sich ist dem Programmiere gemeldet.

Grüße
R.
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Benutzeravatar
motsch
Stabsfeldwebel
Stabsfeldwebel
Beiträge: 1512
Registriert: Mi 17. Jun 2009, 18:10
Einheitenset: Cromoner
Wohnort: Baiersdorf

Re: Idee: Spieler sichern/ausbauen

Beitrag von motsch »

Einheiten innerhalb eines Transporters/Gebäudes lassen sich herausnehmen und in einen anderen Transporter hineinpacken. Einheiten, die allein auf einem Feld stehen, kann ich aber nur löschen. Sie lassen sich im Editor nicht aufnehmen und irgendwo anders hineinpacken.
Aber wenn Du eine Idee hast, dann nehme ich die gerne auf.
Gruß
motsch
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Idee: Spieler sichern/ausbauen

Beitrag von Hanni »

Fahzeug von einem beliebigen Feld aufnehmen:

Code: Alles auswählen

map = asc.getActiveMap()
unit = map:getField(x,y):getVehicle()
aufgenommene Einheit in Transporter packen

Code: Alles auswählen

map = asc.getActiveMap()
unit = map:getField(x,y):getVehicle()
unit:addToCargo(map:getField(a,b):getVehicle())
Fahrzeug auf einem beliebigen Feld löschen

Code: Alles auswählen

map = asc.getActiveMap()
map:getField(x,y):removeUnit()
Mit dem folgenden Script kann ich den Mapeditor übrigens zum Absturz bringen (Voraussetzung: Auf Feld (1;11) steht ein SPS) ...

Code: Alles auswählen

-- hole Kartenobjekt
map = asc.getActiveMap()

-- hole Objekt des Feldes auf dem das SPS steht
fld = map:getField(1,11)

-- hole Objekt vom SPS
sps = fld:getVehicle()

-- iteriere über alle Felder und packe Einheiten in das SPS
for y = 0, map:height()-1 do
	for x = 0, map:width()-1 do
		-- alle Fahrzeuge einpacken, die nicht auf dem Feld des SPS stehen
		if x ~= 1 and y ~=11 then
			fld = map:getField(x,y)
			
			-- wenn ein Fahrzeug auf dem aktuellem Feld steht
			if fld:getVehicle() then
				unit = fld:getVehicle()
				sps:addToCargo(unit)
			end
		end
	end
end
Grüße
R.
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Benutzeravatar
motsch
Stabsfeldwebel
Stabsfeldwebel
Beiträge: 1512
Registriert: Mi 17. Jun 2009, 18:10
Einheitenset: Cromoner
Wohnort: Baiersdorf

Re: Idee: Spieler sichern/ausbauen

Beitrag von motsch »

Editor zum Absturz bringen habe ich auch schon geschafft :)

Das folgende Skript sammelt nur Einheiten des Spielers 0 (rot) ein. Es sucht die map ab und verwendet eine gefundene Einheit als Transporter. Anschließend wird im Umkreis von 5 Feldern um den Transporter nach weiteren Einheiten gesucht, die dann in den Transporter gepackt werden sollen ( Zeile 56). Das funktioniert allerdings nicht. In der common.i wird bei dem Befehl removeUnitFromCargo ausdrücklich darauf hingewiesen, dass die Einheit weiter auf der map existiert. Der Befehl removeUnit (Zeile 59) löscht die Einheit von der map. Das ist nötig, weil der Editor sonst abstürzt.

Code: Alles auswählen


counter = 0

-- get the active map
map = asc.getActiveMap()

-- iterate over all fields of the map
for y = 0,map:height()-1 do
	for x = 0,map:width()-1 do
		fld = map:getField(x,y)

		-- check if there is a unit on the field
		if fld:getVehicle() then

			-- check if the units belongs to red player (who is number 0)
			if fld:getVehicle():getOwner() == 0 then

				-- increase our counter 
				counter = counter + 1

				-- die gefundene einheit soll als transporter dienen
				transporter = fld:getVehicle()

				-- Textausgabe zur Kontrolle
				asc.infoMessage( ' Transporter gefunden ' )
		
				-- Transporter ist Zentrum 
				centerpos = asc.MapCoordinate(x,y)

				-- get all fields with a distance 1 to 5
				for distance = 1, 5 do
		
					-- Array für das Umfeld des Transporters
					fields = asc.getFieldsInDistance( map, centerpos, distance )

					-- note that this is a 1 based array, as is normal in Lua
					for i = 1, fields:size()  do
 		  
						local  pos = fields:getItem(i)
						local feld = map:getField(pos)
 		  
						-- check if there is a unit on the field
						if feld:getVehicle() then

							-- check if the units belongs to red player (who is number 0)
							if feld:getVehicle():getOwner() == 0 then
  
								-- Einheit im Umfeld des Transporters gefunden
								local  unit =  feld:getVehicle() 
   
								-- Textausgabe zur Kontrolle
								asc.infoMessage( ' Einheit gefunden ' )

								-- Einheit im Umfeld in Transporter packen
								transporter:addToCargo(unit)
																
								-- Einheit im Umfeld löschen
								feld:removeUnit()
								
								-- Textausgabe zur Kontrolle
								asc.infoMessage( ' Einheit geloescht ' )

							end
						end
					end
				end    
			end
		end
	end
end
asc.infoMessage( counter .. ' units on map' )

Gruß
motsch
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Idee: Spieler sichern/ausbauen

Beitrag von Hanni »

Mit removeUnit fliegt die Einheit aber auch aus dem Cargo. Was hier meiner Meinung nach fehlt ist eine Clone Methode.

Grüße
R.
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Benutzeravatar
motsch
Stabsfeldwebel
Stabsfeldwebel
Beiträge: 1512
Registriert: Mi 17. Jun 2009, 18:10
Einheitenset: Cromoner
Wohnort: Baiersdorf

Re: Idee: Spieler sichern/ausbauen

Beitrag von motsch »

Genau das macht der CUT Befehl des Editors. Es ist wundervoll, mit Dir einer Meinung zu sein :D
Gruß
motsch
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Idee: Spieler sichern/ausbauen

Beitrag von Hanni »

Ne, nicht so ganz. Hier fehlt nicht der CUT Befehl, sondern ein korrektes Handling beim Einfügen eines Fahrzeuges auf der Karte (bzw. im Cargo). Sinnvoll wäre hier eine Überprüfung, ob das entsprechende Objekt bereits auf der Karte vorhanden ist um dieses ggf. zu duplizieren. Es geht also nicht um CUT, sondern um PASTE ;)

Nachtrag: Aber im Endeffekt ist das egal, da die Wirkung die selbe ist.

Grüße
R.
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Antworten