Idee: Spieler entfernen/hinzufügen
Moderator: Moderatoren2
- Snake
- Oberstabsfeldwebel
- Beiträge: 3754
- Registriert: Sa 13. Jun 2009, 21:49
- Einheitenset: Cybs
- Wohnort: Berlin - Pankow
- Kontaktdaten:
Re: Idee: Spieler entfernen/hinzufügen
Danke für die Mühe!
Das wird SVs die Arbeit unheimlich erleichtern.
Wer weiß schon, wie viele Kartenbestandteile bei vergangenen Löschaktionen
aus Versehen mit gelöscht wurden? Es haben PBP schon so viele Spieler
verlassen, da musste garantiert die eine oder andere Stadt dran glauben ^^
Das wird SVs die Arbeit unheimlich erleichtern.
Wer weiß schon, wie viele Kartenbestandteile bei vergangenen Löschaktionen
aus Versehen mit gelöscht wurden? Es haben PBP schon so viele Spieler
verlassen, da musste garantiert die eine oder andere Stadt dran glauben ^^
You are either a player or a victim.
- itaker
- Oberstabsfeldwebel
- Beiträge: 2505
- Registriert: Sa 13. Jun 2009, 23:02
- Einheitenset: Rehaner
- Wohnort: Karlsruhe
Re: Idee: Spieler entfernen/hinzufügen
kann das jemand in die aktuelle Lua-Skripte Sammlung einpflegen? und als lua skript zu nutzen, einfach den obeneingegeben text in einen texteditor einfügen und dann als .lua benenen?
- motsch
- Stabsfeldwebel
- Beiträge: 1512
- Registriert: Mi 17. Jun 2009, 18:10
- Einheitenset: Cromoner
- Wohnort: Baiersdorf
Re: Idee: Spieler entfernen/hinzufügen
Der eingepflegte Text kann in einen Lua-Editor hineinkopiert werden. Dann das Lua-Skript in das ASC Verzeichnis speichern. Vom Map- oder PBP-Editor kann es dann ausgeführt werden.
Das Skript ändert nur den Eigentümer der Gebäude, deren ID im table kartenbestandteile enthalten sind. Es gibt noch immer ein paar Ausnahmen. Außerdem werden in den Gebäuden enthaltene Einheiten nicht gelöscht, sondern wechseln ebenfalls den Besitzer.
Das Skript ändert nur den Eigentümer der Gebäude, deren ID im table kartenbestandteile enthalten sind. Es gibt noch immer ein paar Ausnahmen. Außerdem werden in den Gebäuden enthaltene Einheiten nicht gelöscht, sondern wechseln ebenfalls den Besitzer.
Gruß
motsch
motsch
-
- Oberstabsfeldwebel
- Beiträge: 2898
- Registriert: Sa 31. Jan 2009, 13:04
- Einheitenset: Cromoner MK4
- Wohnort: Leipzig
Re: Idee: Spieler entfernen/hinzufügen
Wenn Motsch ein paar Worte zur Hanhabung etc. verfasst, dann werde ich das ganze mit in die Skript Sammlung einpflegen.
Grüße
Hanni
Grüße
Hanni
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!
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
- motsch
- Stabsfeldwebel
- Beiträge: 1512
- Registriert: Mi 17. Jun 2009, 18:10
- Einheitenset: Cromoner
- Wohnort: Baiersdorf
Re: Idee: Spieler entfernen/hinzufügen
Das Skript kann erst nach dem nächsten ASC update fertiggestellt werden. Es fehlt noch der Filter nach dem "Versteckt"-flag.
Außerdem habe ich noch ein paar Änderungen vorgesehen, bin also noch nicht damit fertig.
Außerdem habe ich noch ein paar Änderungen vorgesehen, bin also noch nicht damit fertig.
Gruß
motsch
motsch
- motsch
- Stabsfeldwebel
- Beiträge: 1512
- Registriert: Mi 17. Jun 2009, 18:10
- Einheitenset: Cromoner
- Wohnort: Baiersdorf
Re: Idee: Spieler entfernen/hinzufügen
Es wird jetzt auch nach versteckten Gebäuden gefiltert.
Es werden nur auf der map vorhandene Spieler zur Auswahl angeboten, ausgenommen Spieler 0 (SV) und Spieler 8 (neutral). KI und OFF gestellte Spieler werden zur Auswahl gestellt.
Vor der Neutralstellung werden keine Einheiten entfernt und keine Bauoptionen (Secret Factory).
Es werden nur auf der map vorhandene Spieler zur Auswahl angeboten, ausgenommen Spieler 0 (SV) und Spieler 8 (neutral). KI und OFF gestellte Spieler werden zur Auswahl gestellt.
Vor der Neutralstellung werden keine Einheiten entfernt und keine Bauoptionen (Secret Factory).
Gruß
motsch
motsch
- motsch
- Stabsfeldwebel
- Beiträge: 1512
- Registriert: Mi 17. Jun 2009, 18:10
- Einheitenset: Cromoner
- Wohnort: Baiersdorf
Re: Idee: Spieler entfernen/hinzufügen
Was kann dieses Skript:
- Es bietet nur vorhandene Spieler zur Auswahl an, außer Slot0 (SV) und Slot 8 (neutral)
- Es stellt alle Gebäude des gewählten Spielers, die Kartenbestandteie sind, auf neutral
- Es löscht aus den Kartenbestandteilen des Spielers alle Bauoptionen
- Es löscht aus den Kartenbestandteilen des Spielers alle Einheiten
- suche freies Feld
- stelle einen EvacPod dort hin
- verschiebe den Inhalt des Gebäudes dort hinein
- lösche den EvacPod
Code: Alles auswählen
--
-- Dieses Script setzt alle Gebäude eines wählbaren Spielers die als Kartenbestandteil gelten auf neutral.
--
-- Verwendbar in: mapeditor
--
-- -------------------------------------------------------------------------------------------------------
--
-- globale Variable vorbelegen:
--
neutral = false
counter = 0
counterunit = 0
zeile = 0
xEvac = 0
yEvac = 0
EvacPod = asc.getBuildingType( 12016 )
--
-- -------------------------------------------------------------------------------------------------------
--
-- Table für Kartenbestandteile erzeugen:
--
kartenbestandteile = {}
kartenbestandteile.Headquarter1 = 3
kartenbestandteile.Town1 = 24
kartenbestandteile.Akku = 25
kartenbestandteile.Lab10 = 27
kartenbestandteile.Lab25 = 28
kartenbestandteile.Headquarter2 = 55
kartenbestandteile.Headquarter3 = 56
kartenbestandteile.TrainingCenter = 57
kartenbestandteile.VillaDeng = 58
kartenbestandteile.Town2 = 59
kartenbestandteile.Town3 = 60
kartenbestandteile.Headquarter4 = 1002
kartenbestandteile.Bunker1 = 1003
kartenbestandteile.SecretDepot = 1005
kartenbestandteile.MountainEntrance = 1009
kartenbestandteile.HQTitanNet = 1010
kartenbestandteile.Bunker2 = 1015
kartenbestandteile.Bunker3 = 1016
kartenbestandteile.SecretFactory = 1202
kartenbestandteile.SecretTown = 1203
kartenbestandteile.Wreck = 1299
kartenbestandteile.Aussenposten = 12031
kartenbestandteile.Fabrik = 12032
kartenbestandteile.Treibstoffbunker = 12033
--
-- -------------------------------------------------------------------------------------------------------
--
-- Karte laden
map = asc.getActiveMap()
--
-- -------------------------------------------------------------------------------------------------------
--
-- Ermittle freies Feld und Speichere Koordinaten in xEvac, yEvac
for y = 0,map:height()-1 do
for x = 0,map:width()-1 do
fld = map:getField(x,y)
-- prüfe ob ein Gebäude, eine Einheit oder ein Objekt auf dem Feld ist
if not fld:getVehicle() and not fld:getBuildingEntrance() and fld:getObjectCount() == 0 then
xEvac = x
yEvac = y
end
end
end
--
-- ---------------------------------------------------------------------------------------------------------
--
-- Funktionen:
--
--
-- leere Cargoslots
function removeCargo ( gebaeude )
local sum = 0
local c
local unit
-- setze EvacPod
asc.placeBuilding( map, asc.MapCoordinate(xEvac,yEvac) , EvacPod , slotNr )
local fld = map:getField(xEvac,yEvac)
local Evac = fld:getBuildingEntrance()
-- prüfe Inhalt slot für slot
for c = 0, gebaeude:getCargoCount()-1 do
unit = gebaeude:getCargo(c)
if unit then
-- verschiebe Gebäudeinhalt nach EvacPod
gebaeude:removeUnitFromCargo(unit)
Evac:addToCargo(unit)
sum = sum + 1
end
end
-- lösche EvacPod
fld:removeBuilding()
return sum
end
--
--
-- Ermittle Gebäude ID
function GetGebaeudeID ( feldGebaeude )
local gebaeudetyp = feldGebaeude:getType()
local gebaeudeid = gebaeudetyp:getID()
return gebaeudeid
end
--
--
-- Prüfe ob aktuelle GebäudeID Kartenbestandteil oder Gebäude versteckt ist
function CheckGebaeudeID ( _index )
if gebaeudeID == kartenbestandteile [ _index ] or not gebaeude:getVisible() then
neutral = true
return neutral
end
end
--
-- -------------------------------------------------------------------------------------------------------
--
--
-- Dialog zur Auswahl der Slotnummer
--
-- Table zum Speichern der Slotnummern in Abhängigkeit zur Zeile des Ausgabefensters
slotnrTabl = {}
-- Array zur Ausgabe der Spielernamen
s = asc.StringArray()
-- wähle nacheinander Spielerslot 1 bis 7
for slot = 1,7,1 do
-- Zeiger auf gewählten Spieler
player = map:getPlayer (slot)
-- nur bei auf der map existierenden Spielern
if player:exist() then
-- Hole Name des gewählten Spielers und speichere zur Ausgabe
s:add ( player:getName() )
-- Speichere Slotnummer in Abhängigkeit zur Zeile des Ausgabefensters
slotnrTabl [zeile] = slot
-- erhöhe Zeilenzähler
zeile = zeile + 1
end
end
--
-- erzeugt Auswahlfenster und speichert gewählte Zeilennummer in Variable zeileNr
zeileNr = asc.selectString('Spielerauswahl', s )
-- bei zeileNr = -1 wurde 'CANCEL' gewählt
if zeileNr < 0 then
return
end
-- Zeige Spielerslot an in Abhängigkeit der gewählten Zeilennummer
slotNr = slotnrTabl [zeileNr]
asc.infoMessage( 'gewaehlter Slot : ' .. slotNr )
-- Dialog Ende -------------------------------------------------------------------------------------------
--
-- Absuchen der Karte Feld für Feld
for y = 0,map:height()-1 do
for x = 0,map:width()-1 do
--Zeiger auf Feld setzen
feld = map:getField(x,y)
-- Prüfe ob ein Gebäudeeingang auf dem Feld ist
if feld:getBuildingEntrance() then
-- Prüfe ob das Gebäude dem ausgewählten Spieler gehört
if feld:getBuildingEntrance():getOwner() == slotNr then
-- Zeiger auf Gebäude setzen
gebaeude = feld:getBuildingEntrance()
-- Ermittle ID des Gebäudes per Funktion
gebaeudeID = GetGebaeudeID( gebaeude )
-- Prüfe ob Gebäude Kartenbestandteil ist per Funktion
table.foreach ( kartenbestandteile , CheckGebaeudeID )
-- Gebäude ist Kartenbestandteil
if neutral then
-- alle Bauoptionen löschen
gebaeude:deleteAllProductionLines()
-- Einheiten löschen per Funktion
counterunit = counterunit + removeCargo( gebaeude )
-- Gebäude neutral stellen
gebaeude:convert ( 8 )
-- Erhöhe Zähler
counter = counter + 1
-- Stelle Zeiger "Gebäude ist Kartenbestandteil" zurück
neutral = false
end
end
end
end
end
asc.infoMessage( counter .. ' Gebaeude neutral gestellt' )
asc.infoMessage( counterunit .. ' Einheiten in Gebaeuden geloescht' )
Gruß
motsch
motsch
- Snake
- Oberstabsfeldwebel
- Beiträge: 3754
- Registriert: Sa 13. Jun 2009, 21:49
- Einheitenset: Cybs
- Wohnort: Berlin - Pankow
- Kontaktdaten:
Re: Idee: Spieler entfernen/hinzufügen
Vielen Dank.
Wenn man dies hochrechnet auf die noch durchzuführenden Löschaktionen
in der Zukunft, kommt eine erhebliche Zeiteinsparung für alle SVs heraus!
Wenn man dies hochrechnet auf die noch durchzuführenden Löschaktionen
in der Zukunft, kommt eine erhebliche Zeiteinsparung für alle SVs heraus!
You are either a player or a victim.
- motsch
- Stabsfeldwebel
- Beiträge: 1512
- Registriert: Mi 17. Jun 2009, 18:10
- Einheitenset: Cromoner
- Wohnort: Baiersdorf
Re: Idee: Spieler entfernen/hinzufügen
Was kann dieses Skript:
- Es bietet nur vorhandene Spieler zur Auswahl an, außer Slot0 (SV) und Slot 8 (neutral)
- Es stellt alle Gebäude des gewählten Spielers, die Kartenbestandteie sind, auf neutral
- Es löscht aus den Kartenbestandteilen des Spielers alle Bauoptionen
- Es löscht aus den Kartenbestandteilen des Spielers alle Einheiten
- Vor jedem Ausführen zeigt es eine kurze Beschreibung
- Es zeigt am Ende eine Zusammenfassung
Code: Alles auswählen
--
-- Dieses Script setzt alle Gebäude eines wählbaren Spielers die als Kartenbestandteil gelten auf neutral.
--
-- Stand: 20.09.2013
--
-- Verwendbar in: mapeditor
--
text1 = 'Mit diesem Skript kann ein Spieler ausgewaehlt werden.'
text2 = ' Anschliessend werden alle Staedte und alle anderen Gebaeude dieses Spielers,'
text3 = ' die Kartenbestandteile sind, auf neutral gestellt. Zusaetzlich werden aus den'
text4 = ' betroffenen Gebaeuden alle Produktionsstrassen und Einheiten geloescht.'
text5 = ' Dazu muss ein Hexfeld auf der Karte vorhanden sein, auf dem ein EvakPod'
text6 = ' aufgestellt werden kann, da das Skript andernfalls abbricht.'
-- -------------------------------------------------------------------------------------------------------
--
-- globale Variable vorbelegen:
--
neutral = false
counter = 0
counterunit = 0
zeile = 0
EvacPod = asc.getBuildingType( 12016 )
--
-- -------------------------------------------------------------------------------------------------------
--
-- Table für Kartenbestandteile erzeugen:
--
kartenbestandteile = {}
kartenbestandteile.Headquarter1 = 3
kartenbestandteile.Town1 = 24
kartenbestandteile.Akku = 25
kartenbestandteile.Lab10 = 27
kartenbestandteile.Lab25 = 28
kartenbestandteile.Headquarter2 = 55
kartenbestandteile.Headquarter3 = 56
kartenbestandteile.TrainingCenter = 57
kartenbestandteile.VillaDeng = 58
kartenbestandteile.Town2 = 59
kartenbestandteile.Town3 = 60
kartenbestandteile.Headquarter4 = 1002
kartenbestandteile.Bunker1 = 1003
kartenbestandteile.SecretDepot = 1005
kartenbestandteile.MountainEntrance = 1009
kartenbestandteile.HQTitanNet = 1010
kartenbestandteile.Bunker2 = 1015
kartenbestandteile.Bunker3 = 1016
kartenbestandteile.SecretFactory = 1202
kartenbestandteile.SecretTown = 1203
kartenbestandteile.Wreck = 1299
kartenbestandteile.Aussenposten = 12031
kartenbestandteile.Fabrik = 12032
kartenbestandteile.Treibstoffbunker = 12033
--
-- -------------------------------------------------------------------------------------------------------
--
-- Karte laden
map = asc.getActiveMap()
--
-- -------------------------------------------------------------------------------------------------------
--
asc.infoMessage (text1 .. text2 .. text3 .. text4 .. text5 .. text6)
--
-- Ermittle freies Feld und Speichere Koordinaten in xEvac, yEvac
x = 0
y = 0
repeat
repeat
fld = map:getField(x,y)
-- prüfe ob ein Gebäude, eine Einheit oder ein Objekt auf dem Feld ist
if not fld:getVehicle() and not fld:getBuildingEntrance() and fld:getObjectCount() == 0 then
xEvac = x
yEvac = y
end
x = x + 1
until x == map:width() or xEvac ~= nil
x = 0
y = y + 1
until y == map:height() or yEvac ~= nil
if xEvac == nil or yEvac == nil then
asc.warningMessage("Es konnte kein freies Feld ermittelt werden. Sktript abgebrochen.")
return
end
--
-- ---------------------------------------------------------------------------------------------------------
--
-- Funktionen:
--
--
-- leere Cargoslots
function removeCargo ( gebaeude )
local sum = 0
local c
local unit
-- setze EvacPod
asc.placeBuilding( map, asc.MapCoordinate(xEvac,yEvac) , EvacPod , slotNr )
local fld = map:getField(xEvac,yEvac)
local Evac = fld:getBuildingEntrance()
-- prüfe Inhalt slot für slot
for c = 0, gebaeude:getCargoCount()-1 do
unit = gebaeude:getCargo(c)
if unit then
-- verschiebe Gebäudeinhalt nach EvacPod
gebaeude:removeUnitFromCargo(unit)
Evac:addToCargo(unit)
sum = sum + 1
end
end
-- lösche EvacPod
fld:removeBuilding()
return sum
end
--
--
-- Ermittle Gebäude ID
function GetGebaeudeID ( feldGebaeude )
local gebaeudetyp = feldGebaeude:getType()
local gebaeudeid = gebaeudetyp:getID()
return gebaeudeid
end
--
--
-- Prüfe ob aktuelle GebäudeID Kartenbestandteil oder Gebäude versteckt ist
function CheckGebaeudeID ( _index )
if gebaeudeID == kartenbestandteile [ _index ] or not gebaeude:getVisible() then
neutral = true
return neutral
end
end
--
-- -------------------------------------------------------------------------------------------------------
--
--
-- Dialog zur Auswahl der Slotnummer
--
-- Table zum Speichern der Slotnummern in Abhängigkeit zur Zeile des Ausgabefensters
slotnrTabl = {}
-- Array zur Ausgabe der Spielernamen
s = asc.StringArray()
-- wähle nacheinander Spielerslot 1 bis 7
for slot = 1,7,1 do
-- Zeiger auf gewählten Spieler
player = map:getPlayer (slot)
-- nur bei auf der map existierenden Spielern
if player:exist() then
-- Hole Name des gewählten Spielers und speichere zur Ausgabe
s:add ( player:getName() )
-- Speichere Slotnummer in Abhängigkeit zur Zeile des Ausgabefensters
slotnrTabl [zeile] = slot
-- erhöhe Zeilenzähler
zeile = zeile + 1
end
end
--
-- erzeugt Auswahlfenster und speichert gewählte Zeilennummer in Variable zeileNr
zeileNr = asc.selectString('Spielerauswahl', s )
-- bei zeileNr = -1 wurde 'CANCEL' gewählt
if zeileNr < 0 then
return
end
-- Zeige Spielerslot an in Abhängigkeit der gewählten Zeilennummer
slotNr = slotnrTabl [zeileNr]
-- Dialog Ende -------------------------------------------------------------------------------------------
--
-- Absuchen der Karte Feld für Feld
for y = 0,map:height()-1 do
for x = 0,map:width()-1 do
--Zeiger auf Feld setzen
feld = map:getField(x,y)
-- Prüfe ob ein Gebäudeeingang auf dem Feld ist
if feld:getBuildingEntrance() then
-- Prüfe ob das Gebäude dem ausgewählten Spieler gehört
if feld:getBuildingEntrance():getOwner() == slotNr then
-- Zeiger auf Gebäude setzen
gebaeude = feld:getBuildingEntrance()
-- Ermittle ID des Gebäudes per Funktion
gebaeudeID = GetGebaeudeID( gebaeude )
-- Prüfe ob Gebäude Kartenbestandteil ist per Funktion
table.foreach ( kartenbestandteile , CheckGebaeudeID )
-- Gebäude ist Kartenbestandteil
if neutral then
-- alle Bauoptionen löschen
gebaeude:deleteAllProductionLines()
-- Einheiten löschen per Funktion
counterunit = counterunit + removeCargo( gebaeude )
-- Gebäude neutral stellen
gebaeude:convert ( 8 )
-- Erhöhe Zähler
counter = counter + 1
-- Stelle Zeiger "Gebäude ist Kartenbestandteil" zurück
neutral = false
end
end
end
end
end
asc.infoMessage( counterunit .. ' Einheiten aus Gebaeuden geloescht und ' .. counter .. ' Gebaeude neutral gestellt.' )
Gruß
motsch
motsch
- itaker
- Oberstabsfeldwebel
- Beiträge: 2505
- Registriert: Sa 13. Jun 2009, 23:02
- Einheitenset: Rehaner
- Wohnort: Karlsruhe
Re: Idee: Spieler entfernen/hinzufügen
Hallo Motsch
ich wollte den Skript nutzen, die Einheiten wurde jedoch nicht gelöscht, was hat es mit dem Evakpod an sich?
muss der Evakpod bevor man den skript ausruft aufgestellt werden?
soll der Evakpod auf der name des Spieler laufen?
das Programm soll man mit über den PBP Editor starten oder?
was mir in diesem zusammenhang einfällt, es wäre Klasse wenn die Einheiten der zu sichernde Spieler in den Evakpod verschoben werden könnten...
ich wollte den Skript nutzen, die Einheiten wurde jedoch nicht gelöscht, was hat es mit dem Evakpod an sich?
muss der Evakpod bevor man den skript ausruft aufgestellt werden?
soll der Evakpod auf der name des Spieler laufen?
das Programm soll man mit über den PBP Editor starten oder?
was mir in diesem zusammenhang einfällt, es wäre Klasse wenn die Einheiten der zu sichernde Spieler in den Evakpod verschoben werden könnten...