Multiplayer mit KI statt spieler
» Siedler Map Source Forum » Siedler DEdK Script Forum » Multiplayer mit KI statt spieler
Seiten: 1
BrokenSun
|
#1 28.08.2018 09:36 Beiträge: 73 |
Multiplayer mit KI statt spieler
Hallo zusammen,
ich überarbeite gerade nebenbei eine meiner Maps und bräuchte eine Funktion die greift sobald eine bestimmte Spieler ID im Multiplayer nicht von einem Menschen besetzt wird.
Im normalfall löscht sich diese Spieler ID ja, jetzt ist meine Frage wie man ersteinmal herausfindet ob die jeweilige Spieler ID besetzt ist, dann dafür sorgt das wenn sie nicht besetzt ist diese ID nicht gelöscht wird und zuletzt das dieser Spieler durch eine KI ersetzt wird.
Danke schonmal für eure Hilfe
MfG BStar
totalwarANGEL
|
#2 28.08.2018 10:55 Beiträge: 2123 |
Zitat von BrokenSun:
Hallo zusammen,
ich überarbeite gerade nebenbei eine meiner Maps und bräuchte eine Funktion die greift sobald eine bestimmte Spieler ID im Multiplayer nicht von einem Menschen besetzt wird.
Im normalfall löscht sich diese Spieler ID ja, jetzt ist meine Frage wie man ersteinmal herausfindet ob die jeweilige Spieler ID besetzt ist, dann dafür sorgt das wenn sie nicht besetzt ist diese ID nicht gelöscht wird und zuletzt das dieser Spieler durch eine KI ersetzt wird.
Danke schonmal für eure Hilfe
Es sollte ein "PlayerLeft" Callback geben, mit dem du herausfinden kannst, ob ein menschlicher Spieler das Spiel verlassen hat. In allen anderen Fällen müsste es ausreichen zu prüfen ob das Human Flag gesetzt ist.
____________________
Die Welt ist arschlochförmig und wir leben in der Mitte.
mcb
|
#3 28.08.2018 13:08 Beiträge: 1472 |
Der callback heißt MPGame_ApplicationCallback_PlayerLeftGame.
MadShadow
|
#4 28.08.2018 20:51 Beiträge: 372 |
XNetwork.GameInformation_IsHumanPlayer oder so ähnlich, such mal danach.
Gelöscht werden alle Spieler deren Id nicht besetzt ist durch MultiplayerTools.RemoveAllPlayerEntities oder so. Das einfachste wäre du setzt es nil, aber dann werden auch wenn ein spieler das spiel verlässt seine gebäude nicht gelöscht. Das könntest du aber auch manuell machen, über das callback. Gibt viele möglichkeiten, aber eig. Geht alles über die MultiplayerTools
Play4FuN
|
#5 29.08.2018 09:41 Beiträge: 704 |
Ich denke du suchst das hier:
Logic.PlayerGetGameState(_playerID)
Return:
0: none, invalid, not in game
1: playing
2: won
3: lost
4: left
Einfach auf 0 prüfen sollte also genügen denke ich.
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
BrokenSun
|
#6 29.08.2018 15:30 Beiträge: 73 |
Danke für die helfenden antworten, da ich ein eher weniger begabter skripter bin könnte mir jetzt jemand nochmal genau das an functionen schreiben, was ich in das GameCallBack() setzen muss?
1. Die Schauen ob Spieler besetzt ist.
2. Im Anschluss wenn spieler nicht besetzt ist, KI aktivieren.
If Logic.PlayerGetGameState(2) = false then
CreateKI()
Return true
End
wäre das ungefähr richtig?
mcb
|
#7 29.08.2018 18:35 Beiträge: 1472 |
Also der Callback bekommt als 1. Parameter den Spieler, der das das Spiel verlassen hat. Dann wird im Callback der Status neu gesetzt.
warrior1024
|
#8 29.08.2018 21:09 Beiträge: 345 |
Ob in der Lobby ein Spieler auf Position 2 gesetzt wurde, kann man mit
if XNetwork.GameInformation_IsHumanPlayerAttachedToPlayerID(2) == 1 then Message("Pos 2 wird besetzt von "..XNetwork.GameInformation_GetLogicPlayerUserName(2).." besetzt.") end
überprüfen. Natürlich kann es sein, dass der Spieler irgendwann das Spiel verlässt, aber wenn es dir nur darum geht, dass ein nicht vorhandener Spieler bei Spielstart durch eine KI ersetzt wird, sollte der obige Code reichen.
____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal
Seiten: 1