
Zitat von
FastBow
Okay und hat jemand noch andere vorschläge?
Jupp, die hat einer:
Wenn eine Mine gebaut wird, dann hat sie keinen Namen. Man kann also die Mine mit ChangePlayer nicht so einfach übergeben.
Daher folgendes machen:
Du legst eine Skriptentity in die Mitte, oder unmittelbar am Rand der "Rohmine", also dort, wo die Mine gebaut werden soll und gibst dieser Skriptentitity den Namen "posMine1", die 1 deshalb, weil es ja sein kann, dass Du dies mit mehrerer Minen vorhast. Ansonsten die 1 einfach weglassen.
Nun kommt es drauf an, wie weit die Mine ausgebaut werden soll, bevor sie Übergeben wird.
Nehmen wir mal an, es ist eine Schwefelmine die erst einmal vom Spieler aufgebaut und dann zur höchsten Stufe ausgebaut werden soll. Das wäre dann eine PB_SulfurMine3.
Jetzt kanns losgehen:
Code:
local quest = {
AreaPos = "posMine1", -- Die Stelle an der die Mine gebaut werden soll
AreaSize = 2000, -- Ein Toleranzwert (Radius) um die Position, denn genau darauf wird man sie nicht bauen können.
EntityTypes = {
{Entities.PB_SulfurMine3, 1} -- Die angegebene Mine soll gebaut werden
},
Callback = function(_quest) --Diese Funktion wird aufgerufen, wenn die Mine gebaut wurde
-- Hiermit bekommt man die Entity ID der Mine, damit man die Spieler ID ändern kann
-- Die Funktion GetEntityIdInArea() muss man aber noch zusätzlich in das Script kopieren (siehe unten)
local entityID = GetEntityIdInArea(1, _quest.EntityTypes[1][1], _quest.AreaPos, _quest.AreaSize)
-- Jetzt kann man die ID der Mine ändern, bzw. die Mine übergeben:
ChangePlayer(entityID, 4)
end,
}
-- Quest starten:
SetupEstablish(quest)
Benötigter Comfort-Code:
Die Funktion GetEntityIdInArea() liefert eine ID einer bestimmten Entity,
welche in dem Radius _range um _position liegt und sieht so aus:
Code:
function GetEntityIdInArea(_playerID, _entity, _position, _range)
local data = {Logic.GetPlayerEntitiesInArea(_playerID, _entity, _position.X, _position.Y, _range, 1)}
if Logic.IsBuilding(data[2]) then
if Logic.IsConstructionComplete(data[2]) == 1 then
return data[2]
else
return false
end
end
return data[2]
end
Das Ganze noch mal ohne Kommentare:
Code:
local quest = {
AreaPos = "posMine1",
AreaSize = 2000,
EntityTypes = {
{Entities.PB_SulfurMine3, 1}
},
Callback = function(_quest)
local entityID = GetEntityIdInArea(1, _quest.EntityTypes[1][1], _quest.AreaPos, _quest.AreaSize)
ChangePlayer(entityID, 4)
end,
}
SetupEstablish(quest)
Benötigter Comfort-Code (Irgendwo ans Skriptende kopieren):
Code:
function GetEntityIdInArea(_playerID, _entity, _position, _range)
local data = {Logic.GetPlayerEntitiesInArea(_playerID, _entity, _position.X, _position.Y, _range, 1)}
if Logic.IsBuilding(data[2]) then
if Logic.IsConstructionComplete(data[2]) == 1 then
return data[2]
else
return false
end
end
return data[2]
end
Ich hoffe, Dir hiermit helfen zu können. 
Gruss
Flodder
Lesezeichen