Ich habe als Naturliebhaber immer einen inneren Konflikt, wenn ich zur Holzgewinnung ganze Wälder roden muss. Da muss eine eine Alternative her, dachte ich mir, und hier ist sie nun!
Mit der Funktion…
CreateWoodPile( _posEntity, _resources )
…kann ein abbaubares Signalfeuer erstellt werden, das die angegebenen Rohstoffe enthält. Dieses ist sozusagen als „Holz-Schacht“ zu verstehen, nur mit dem Unterschied, dass der Spieler (wie bei Bäumen) die verbleibenden Rohstoffe nicht sehen kann.
--Beispiel: CreateWoodPile( "Holzhaufen1", 1000 )
Vorsicht: Die angegebene Entität dient nicht nur als Platzhalter, sondern wird „replaced“!
function CreateWoodPile( _posEntity, _resources ) assert( type( _posEntity ) == "string" ); assert( type( _resources ) == "number" ); gvWoodPiles = gvWoodPiles or { JobID = StartSimpleJob("ControlWoodPiles"), }; local pos = GetPosition( _posEntity ); local pile_id = Logic.CreateEntity( Entities.XD_SingnalFireOff, pos.X, pos.Y, 0, 0 ); SetEntityName( pile_id, _posEntity.."_WoodPile" ); ReplaceEntity( _posEntity, Entities.XD_ResourceTree ); Logic.SetResourceDoodadGoodAmount( GetEntityId( _posEntity ), _resources*10 ); table.insert( gvWoodPiles, { ResourceEntity = _posEntity, PileEntity = _posEntity.."_WoodPile", ResourceLimit = _resources*9 } ); end function ControlWoodPiles() for i = table.getn( gvWoodPiles ),1,-1 do if Logic.GetResourceDoodadGoodAmount( GetEntityId( gvWoodPiles[i].ResourceEntity ) ) <= gvWoodPiles[i].ResourceLimit then DestroyWoodPile( gvWoodPiles[i], i ); end end end function DestroyWoodPile( _piletable, _index ) local pos = GetPosition( _piletable.ResourceEntity ); DestroyEntity( _piletable.ResourceEntity ); DestroyEntity( _piletable.PileEntity ); Logic.CreateEffect( GGL_Effects.FXCrushBuilding, pos.X, pos.Y, 0 ); table.remove( gvWoodPiles, _index ) end