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