Verbündete

» Settlers Map Source Forums » Siedler DEdK Script Forum » Verbündete

Pages: 1

Maximilian3394w
#1
02-05-2010 20:36
Posts: 9

Verbündete

Hallo erstmal
ich habe ein problem ich mache mir ein verbündeten so



SetFriendly(1,5)




aber er greift mich immer an was mache ich falsch

Mordred
#2
02-05-2010 20:45
Posts: 939

Du musst

MapEditor_SetupAI(5, 0, 0, 0, "", 0, 0)

davor setzen. Denn das setzt den Spieler (bei dir 5) immer auf "Feind". Dann sollte es klappen.

Maximilian3394w
#3
02-05-2010 20:58
Posts: 9

Er soll auch einheiten ausbilden also 1.

Das ist in der Diplomantie
SetFriendly(1,5)

2.

Mit den Computergegnern
MapEditor_SetupAI(2, 3, 90000, 3, "olf", 2, 0)
MapEditor_SetupAI(5, 3, 90000, 3, "McCorlev", 2, 0)

warrior1024
#4
02-05-2010 21:20
Posts: 345

Posted by Mordred:
Du musst

MapEditor_SetupAI(5, 0, 0, 0, "", 0, 0)

davor setzen. Denn das setzt den Spieler (bei dir 5) immer auf "Feind". Dann sollte es klappen.



Das ist einer der Gründe, warum ich mir lieber selbst eine KI bastel als die spieleigene Funktion zu verwenden.

@maximilian3394w:
MapEditor_SetupAI ist nicht wirklich empfehlenswert(meine Meinung), da die KI danach eigentlich nur Soldaten ausbilden kann und die Funktion alleine für nichts zu gebrauchen ist. Bei meiner KI setzte ich vollkommen auf "simulierte" Effekte. Mein Rat:
Wenn du willst, dass die KI Soldaten hat, dann versuchs mit Mordred´s Funktion:

function ArmeeMordred(_player,_type,_follows,_pos,_number,_name)
 for i = 1, _number do
  CreateMilitaryGroup(_player,_soldiers,_follows,GetPosition(_pos),"".._name..""..i.."")
 end
end


Ich habe die Version noch überarbeitet, aber noch nicht ausführlich getestet. Interesse? PN an mich, aber Warnung: OOP kommt zum Einsatz und selbst gute Scripter verstehen die Funktion nicht auf Anhieb.

warrior1024

____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

Flodder
#5
03-05-2010 09:47
Posts: 2608

Posted by Maximilian3394w:

Das ist in der Diplomantie
SetFriendly(1,5)


Hi Maximilian,
damit legst Du ja lediglich das Verhalten von ID1 zu ID5 fest.
Freundlich braucht man eigentlich überhaupt nicht setzen. Interessant ist nur das feindliche Verhalten der IDs zueinander. Da gibt es einmal die einfache Methode:

Gesetz den Fall ID2 ist feindlich zu ID1 und ID5 soll ebenfalls zu ID2 feindlich sein, dann muss man das auch setzen.

Würde hier also bedeuten:
SetHostile(1, 2)
SetHostile(2, 5)

Damit passiert aber noch gar nichts, solange die sich nicht in die Quere kommen. Also insgesamt recht unkontrolliert.

Besser wäre hier der code von Tenji:

function CreateFollowingArmy( _entity, _player, _typ, _soldiers, _position, _trups)
    gvFollowingArmys = gvFollowingArmys or { FollowingArmysJobID = StartSimpleJob("ControlAllFollowingArmys") };
    local entityName = GetEntityName(_entity);
    for i = 1, table.getn(gvFollowingArmys) do
        if gvFollowingArmys[i].followEntity == entityName then
            local jStart = table.getn(gvFollowingArmys[i]);
            for j = 1, _trups do
                local number = jStart +j;
                local trup = { name = _entity.."Trup"..number};
                CreateMilitaryGroup( _player, _typ, _soldiers, GetPosition(_position), trup.name, entityName);
                table.insert( gvFollowingArmys[i], trup);
            end
            return true
        end
    end
    local insertTable = { followEntity = entityName };
    for i = 1, _trups do
        local trup = { name = _entity.."Trup"..i };
        CreateMilitaryGroup( _player, _typ, _soldiers, GetPosition(_position), trup.name, entityName);
        table.insert( insertTable, trup);
    end
    table.insert( gvFollowingArmys, insertTable);
end
function StopAllFollowingArmys()
    if (gvFollowingArmys ~= nil) then
        EndJob( gvFollowingArmys.FollowingArmysJobID );
        gvFollowingArmys = nil;
    end
end
function ControlAllFollowingArmys()
    for i = table.getn(gvFollowingArmys), 1, -1 do
        local entity = gvFollowingArmys[i].followEntity;
        for j = table.getn(gvFollowingArmys[i]), 1, -1 do
            local trup = gvFollowingArmys[i][j].name;
            if (not IsNear( trup, entity, 500)) and IsExisting( trup) then
                if IsNear( trup, entity, 3000) then
                    Attack( trup, GetPosition( entity));
                else
                    Move( trup, GetPosition( entity));
                end
            elseif not IsExisting( trup) then
                table.remove( gvFollowingArmys[i], j);
            end
        end
        if table.getn( gvFollowingArmys[i] ) == 0 then
            table.remove( gvFollowingArmys, i);
        end
    end
end


Näheres dazu hier:
http://www.siedler-games.de/si...s:begleitende_armeen_erstellen

Den dann so verwenden, wie es für Dich passt.

Posted by Maximilian3394w:

Er soll auch einheiten ausbilden...


Dafür gibt es die sog. "Dynamische Entwicklung":

Näheres dazu hier:
http://www.siedler-games.de/si..._entwicklung?s=verb%C3%BCndete

Damit kannst Du auch massgeschneiderte Truppen für die KI entwickeln. Viel Spass damit

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Pages: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum