[[http://www.siedler-games.de|{{:sg-link.jpg|}}]] ====== Einleitung ====== Manchmal ist es für die Story einer Karte wichtig, dass der Spieler eine bestimmte Schlüsselfigur nicht entlässt. Oder er soll aus irgendeinem Grunde eins seiner Gebäude nicht einreissen können. Oder aber man will den Spieler einfach ärgern... ;-)\\ \\ Diese Skripterweiterung bietet dafür die technischen Möglichkeiten. Sobald die Funktion...\\ SetupProtectedEntities() ...einmal irgendwo aufgerufen wurde (z.B. in der FMA), kann man mit...\\ ProtectEntity( _skriptname ) ...die Selbstzerstörungsknöpfe der jeweiligen Entität verschwinden lassen. ===== Code===== function SetupProtectedEntities() gvProtectedUnits = {}; gvProtectedBuildings = {}; GameCallback_GUI_SelectionChanged_OrigProtected = GameCallback_GUI_SelectionChanged; GameCallback_GUI_SelectionChanged = function() GameCallback_GUI_SelectionChanged_OrigProtected() for i = 1,table.getn(gvProtectedUnits) do if GUI.GetSelectedEntity() == GetEntityId( gvProtectedUnits[i] ) then XGUIEng.ShowWidget( gvGUI_WidgetID.ExpelSettler, 0 ); return; else XGUIEng.ShowWidget( gvGUI_WidgetID.ExpelSettler, 1 ); end end for i = 1,table.getn(gvProtectedBuildings) do if GUI.GetSelectedEntity() == GetEntityId( gvProtectedBuildings[i] ) then XGUIEng.ShowWidget( gvGUI_WidgetID.DestroyBuilding, 0 ); return; else XGUIEng.ShowWidget( gvGUI_WidgetID.DestroyBuilding, 1 ); end end end ProtectEntity = function( _entity ) assert( type( _entity ) == "string" , "ProtectedEntities ERROR: Name of entity must be a string!" ); if Logic.IsBuilding( GetEntityId( _entity ) ) == 1 then table.insert( gvProtectedBuildings, _entity ); else table.insert( gvProtectedUnits, _entity ); end end end