Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› Allgemein —› (Mapeditor) Enemy Hotspots reihenfolge

Autor Mitteilung
verfasst am: 02.07.2010, 13:03
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Werden eigentlich die Aliens auf der Karte auf einen zufälligen Hotspot gesetzt oder läuft das nach einem bestimmten Schem ab?
verfasst am: 02.07.2010, 23:49
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
procedure TAIGroup.AddUnit(Figure: TGameFigure);
var
  Pos         : TPoint;
  Dummy       : Integer;

  procedure GotoNextSpawnRoom;
  var
    Dummy: Integer;
  begin
    for Dummy:=high(fSpawnPoints) downto 0 do
    begin
      if (fSpawnPoints[Dummy].RoomNr=fLastSpawnRoom) then
      begin
        SetLength(fNotUsedSpawns,length(fNotUsedSpawns)+1);
        fNotUsedSpawns[high(fNotUsedSpawns)]:=fSpawnPoints[Dummy];

        DeleteArray(Addr(fSpawnPoints),TypeInfo(TSpawnPoints),Dummy);
      end;
    end;

    fLastSpawnRoom:=-1;
  end;

  function GetSpawnPointInRoom(Room: Integer; var Point: TPoint): Boolean;
  var
    Dummy: Integer;
    Points : Array of Integer;
    Index  : Integer;
  begin
    SetLength(Points,length(fSpawnPoints));
    Index:=0;
    for Dummy:=0 to high(fSpawnPoints) do
    begin
      if fSpawnPoints[Dummy].RoomNr=Room then
      begin
        Points[Index]:=Dummy;
        inc(Index);
      end;
    end;

    if Index=0 then
      result:=false
    else
    begin
      result:=true;
      Index:=random(Index);
      Point:=fSpawnPoints[Points[Index]].Point;
      DeleteArray(Addr(fSpawnPoints),TypeInfo(TSpawnPoints),Points[Index]);
    end;
  end;

  function CheckPosition(Point:TPoint): Boolean;
  var
    Tile     : TMapFieldData;
    TileState: PTileState;
    TmpPoint : TPoint;
    ISOMap : TIsoMap;
  begin
    ISOMap:=TBodenEinsatz(gui_api_GetPage(PageBodenEinsatz)).Engine.ISOMap ;
    TileState:=Addr(IsoMap.Figures[Point.X,Point.Y]);
    Tile:=IsoMap.Tiles[Point.X,Point.Y];

    if Figure<>nil then
    begin
      if TileState.Figure=Figure then
      begin
        result:=true;
        exit;
      end;

      if (TileState.Figure<>Figure) and (TileState.Figure<>nil) then
      begin
        result:=false;
        exit;
      end;

      if (not Tile.Begehbar) {or (Tile.Obj<>-1)} then
      begin
        result:=false;
        exit;
      end;
    end;

    result:=true;
  end;

begin
  fUnitsInGroupList.Add(Figure);
  Figure.AIGroup:=Self;

  if not GetSpawnPointInRoom(fLastSpawnRoom,Pos) then
  begin
    // Keine Spawnpunkte mehr vorhanden
    if length(fSpawnPoints)=0 then
    begin
      game_api_MessageBox('Nicht genug Spawnpunkte vorhanden','Fehler');

      if length(fNotUsedSpawns)=0 then
      begin
        Dummy:=5000;
        repeat
          Pos:=Point(random(fMapSize.cx),random(fMapSize.cy));
          dec(Dummy);
          if Dummy=0 then
          begin
            game_api_MessageBox('kein zufälliger Spawnpunkt gefunden','Fehler');
            break;
          end;
        until CheckPosition(Pos);
      end
      else
      begin
        Dummy:=random(high(fNotUsedSpawns));
        Assert((Dummy>=0) and (Dummy<=high(fNotUsedSpawns)));
        Pos:=fNotUsedSpawns[Dummy].Point;
        DeleteArray(Addr(fNotUsedSpawns),TypeInfo(TSpawnPoints),Dummy);
      end;
    end
    else
    begin
      Dummy:=random(high(fSpawnPoints));
      Assert((Dummy>=0) and (Dummy<=high(fSpawnPoints)));
      fLastSpawnRoom:=fSpawnPoints[Dummy].RoomNr;
      Assert(GetSpawnPointInRoom(fLastSpawnRoom,Pos));
    end;
  end;

  repeat
    if not PtInRect(Rect(0,0,fMapSize.cx,fMapSize.cy),Pos) then
    begin
      Pos.X:=random(fMapSize.cx);
      Pos.Y:=random(fMapSize.cy);
    end;

    Figure.XPos:=Pos.X;
    Figure.YPos:=Pos.Y;

    // Beim nächsten durchlauf auf jeden Fall eine neue Position ermitteln
    Pos.X:=-1;
  until Figure.SetToGameField;
end;



Beim ersten überfliegen bin ich mir aber nicht sicher, ob das noch so arbeitet wie es mal sollte. GoToNextSpawnRoom wird jedenfalls nirgends aufgerufen.
verfasst am: 03.07.2010, 09:33
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Meiner Meinung nach sollte die Platzierung der Einheiten langfristig so geändert werden, das ein allgemeiner Zufall nur noch genutzt wird, falls das Kartenskript keine Platzierungsbefehle enthält.

Natürlich gibt es diese Platzierungsbefehle noch nicht, aber wir werden sie spätestens brauchen wenn es neutrale Karteneinheiten gibt - und auch um spezielle Aliens wie Kommandanten auch an richtigen Stellen wie Kommandozentralen platzieren zu können...

Leider alles noch Zukunftsmusik :-(
verfasst am: 04.07.2010, 15:44 · Edited by: Kreks
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Zumindest wirkt es so, als ob alle Aliens immer aus dem gleichen Spawnroom kommen, bestätigen kann ich das aber nicht.

Zitat: DirkF
Leider alles noch Zukunftsmusik :-(

Schade, aber danke.



Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

Ladezeit (sec.): 0.014 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003