d38c50c...f202506
commit f20250657eda223fddacf812a477727b1a2b507b Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Wed Mar 20 16:50:39 2019 +0200 Ending a campaign round by talking to watchman doesn't require any special permissions. Closes #1313
This commit is contained in:
@@ -92,8 +92,7 @@ namespace Barotrauma
|
|||||||
if (endWatchman != null) { InitializeWatchman(endWatchman); }
|
if (endWatchman != null) { InitializeWatchman(endWatchman); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected override void WatchmanInteract(Character watchman, Character interactor)
|
protected override void WatchmanInteract(Character watchman, Character interactor)
|
||||||
{
|
{
|
||||||
if ((watchman.Submarine == Level.Loaded.StartOutpost && !Submarine.MainSub.AtStartPosition) ||
|
if ((watchman.Submarine == Level.Loaded.StartOutpost && !Submarine.MainSub.AtStartPosition) ||
|
||||||
@@ -107,8 +106,7 @@ namespace Barotrauma
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GameMain.Client != null && interactor == Character.Controlled &&
|
if (GameMain.Client != null && interactor == Character.Controlled)
|
||||||
(GameMain.Client.HasPermission(ClientPermissions.ManageRound) || GameMain.Client.HasPermission(ClientPermissions.ManageCampaign)))
|
|
||||||
{
|
{
|
||||||
var msgBox = new GUIMessageBox("", TextManager.Get("CampaignEnterOutpostPrompt")
|
var msgBox = new GUIMessageBox("", TextManager.Get("CampaignEnterOutpostPrompt")
|
||||||
.Replace("[locationname]", Submarine.MainSub.AtStartPosition ? Map.CurrentLocation.Name : Map.SelectedLocation.Name),
|
.Replace("[locationname]", Submarine.MainSub.AtStartPosition ? Map.CurrentLocation.Name : Map.SelectedLocation.Name),
|
||||||
@@ -122,8 +120,7 @@ namespace Barotrauma
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
msgBox.Buttons[0].OnClicked += msgBox.Close;
|
msgBox.Buttons[0].OnClicked += msgBox.Close;
|
||||||
msgBox.Buttons[1].OnClicked += msgBox.Close;
|
msgBox.Buttons[1].OnClicked += msgBox.Close;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,27 @@ namespace Barotrauma
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool AllowedToEndRound(Character interactor)
|
||||||
|
{
|
||||||
|
if (interactor == null || Level.Loaded?.StartOutpost == null || Level.Loaded?.EndOutpost == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (interactor.Submarine == Level.Loaded.StartOutpost &&
|
||||||
|
interactor.CanInteractWith(startWatchman))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (interactor.Submarine == Level.Loaded.EndOutpost &&
|
||||||
|
interactor.CanInteractWith(endWatchman))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void WatchmanInteract(Character watchman, Character interactor)
|
protected override void WatchmanInteract(Character watchman, Character interactor)
|
||||||
{
|
{
|
||||||
if ((watchman.Submarine == Level.Loaded.StartOutpost && !Submarine.MainSub.AtStartPosition) ||
|
if ((watchman.Submarine == Level.Loaded.StartOutpost && !Submarine.MainSub.AtStartPosition) ||
|
||||||
@@ -85,8 +106,7 @@ namespace Barotrauma
|
|||||||
if (GameMain.Server != null)
|
if (GameMain.Server != null)
|
||||||
{
|
{
|
||||||
var client = GameMain.Server.ConnectedClients.Find(c => c.Character == interactor);
|
var client = GameMain.Server.ConnectedClients.Find(c => c.Character == interactor);
|
||||||
hasPermissions = client != null &&
|
hasPermissions = client != null;
|
||||||
(client.HasPermission(ClientPermissions.ManageRound) || client.HasPermission(ClientPermissions.ManageCampaign));
|
|
||||||
CreateDialog(new List<Character> { watchman }, hasPermissions ? "WatchmanInteract" : "WatchmanInteractNotAllowed", 1.0f);
|
CreateDialog(new List<Character> { watchman }, hasPermissions ? "WatchmanInteract" : "WatchmanInteractNotAllowed", 1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -995,7 +995,17 @@ namespace Barotrauma.Networking
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sender.HasPermission(command))
|
//clients are allowed to end the round by talking with the watchman in multiplayer
|
||||||
|
//campaign even if they don't have the special permission
|
||||||
|
if (command == ClientPermissions.ManageRound && inc.PeekBoolean() &&
|
||||||
|
GameMain.GameSession?.GameMode is MultiPlayerCampaign mpCampaign)
|
||||||
|
{
|
||||||
|
if (!mpCampaign.AllowedToEndRound(sender.Character))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!sender.HasPermission(command))
|
||||||
{
|
{
|
||||||
Log("Client \"" + sender.Name + "\" sent a server command \"" + command + "\". Permission denied.", ServerLog.MessageType.ServerMessage);
|
Log("Client \"" + sender.Name + "\" sent a server command \"" + command + "\". Permission denied.", ServerLog.MessageType.ServerMessage);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user