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

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

Impressum