[Gelöst] Trennen von Leitungen unterbinden?

Ich möchte nicht, dass Feinde Leitungen von Gebäuden abnehmen können.

Habe dazu schon im Linekit Skript in der Activate Funktion was eingefügt, aber das unterbindet halt leider nur alle Aktionen die man machen kann, wenn man einen Leitungsbausatz dabei hat.
Wo finde ich die Funktion, die dafür zuständig ist, dass Leitungen abgenommen werden, wenn man vor einem Gebäude mit Leitung doppelgraben drückt?

Habe schon den Objects Ordner und auch den source Code nach "getrennt." durchsucht, da beim Abnehmen von Leitungen die message erscheint "Energieleitung von Sägewerk getrennt."…  aber leider scheint es das nirgends zu geben?!

Edit:
habe den Eintrag dazu jetzt in System LanguageDE.txt gefunden…IDS_OBJ_DISCONNECT=%s von|%s getrennt. 
Im Source Code findet sich das in C4ObjectCom.cpp … 
soo… nun nur noch überlegen, wie ich das ändern kann… ?..

BOOL ObjectComLineConstruction(C4Object *cObj)
  {
  C4Object *linekit,*tstruct,*cline;
  DWORD ocf;

  ObjectActionStand(cObj); 

  // Check physical
  if (!cObj->GetPhysical()->CanConstruct)
    {
    sprintf(OSTR,LoadResStr("IDS_OBJ_NOLINECONSTRUCT"),cObj->GetName());
    GameMsgObject(OSTR,cObj); return FALSE;
    }

  // - - - - - - - - - - - - - - - - - - Line pickup - - - - - - - - - - - - - - - - -

  // Check for linekit
  if (!(linekit=cObj->Contents.Find(C4ID_Linekit)))
    {
    // Check for collection limit
    if (cObj->Def->CollectionLimit && (cObj->Contents.ObjectCount()>=cObj->Def->CollectionLimit) ) return FALSE;
    // Check line pickup
    ocf=OCF_LineConstruct;
    tstruct=Game.Objects.AtObject(cObj->x,cObj->y,ocf,cObj);
    if (!tstruct || !(ocf & OCF_LineConstruct)) return FALSE;
    if (!(cline=Game.FindObject(C4ID_None,0,0,0,0,OCF_All,"Connect",tstruct))) return FALSE;
    // Check line connected to linekit at other end
    if ( (cline->Action.Target && (cline->Action.Target->Def->id==C4ID_Linekit))
      || (cline->Action.Target2 && (cline->Action.Target2->Def->id==C4ID_Linekit)) )
        {
        StartSoundEffect("Error",false,100,cObj);
        sprintf(OSTR,LoadResStr("IDS_OBJ_NODOUBLEKIT"),cline->GetName());
        GameMsgObject(OSTR,cObj);  return FALSE;
        }
    // Create new linekit
    if (!(linekit=Game.CreateObject(C4ID_Linekit,cObj,cline->Owner))) return FALSE;
    // Enter linekit into clonk
    bool fRejectCollect;
    if (!linekit->Enter(cObj, TRUE, true, &fRejectCollect))
      {
      // Enter failed: abort operation
      linekit->AssignRemoval(); return FALSE;
      }
    // Attach line to collected linekit   
    StartSoundEffect("Connect",false,100,cObj);
    if (cline->Action.Target==tstruct) cline->Action.Target=linekit;
    if (cline->Action.Target2==tstruct) cline->Action.Target2=linekit;
    // Message
    sprintf(OSTR,LoadResStr("IDS_OBJ_DISCONNECT"),cline->GetName(),tstruct->GetName());
    GameMsgObject(OSTR,tstruct);
    return TRUE;
    }

Da das Leitungsobjekt erhalten bleibt, kannst du einfach im Leitungskasten in Initialize einen Timer starten und dann ein Frame spaeter pruefen, ob die verbundene Leitung einem Gegenspieler gehoert. Wenn ja, dann wird die Leitung wirder ans letzte Gebaeude angebaut.

Ausserdem natuerlich den Besitzer der Leitung nach dem Clonk setzen, der die Leitung angebaut hat (oder einfach nach dem Gebaude) und die letzten verbundenen Gebaeude speichern, damit die Leitung wieder an die richtige Stelle angelegt wird.

das ist eine sehr gute Idee, vielen dank! :slight_smile: