GPS不再 - 在地图上禁用玩家位置

GPS不再 - 在地图上禁用玩家位置

在主区域地图上禁用玩家位置标记。

沉浸感

GPS 不再需要

尽管《巫师3》中的任务设计精良且故事情节引人入胜,
但由于大多数情况下你只是盲目地跟随小地图/地图上的任务标记从一个地点到另一个地点,
它们仍然让人感觉缺乏沉浸感。
关闭任务标记进行游戏也不可行,
因为大多数任务的描述不够精确,
在没有外部帮助的情况下无法找到指定区域。

所以我认为在沉浸感方面,下一个最好的办法就是去掉地图上当前位置的指示标记。这个模组正好实现了这一点。

免责声明: 这其实不是我的作品!Steam用户 DNSMorgan1712 在 6 月份应社区用户 m3k 的要求上传了这个模组,遗憾的是那个版本似乎与当前的 1.11 补丁不兼容。
我设法追踪了 DNSMorgan1712 所做的修改,并将其应用到 1.11 原版文件中,
说白了就是我笨拙地比较了两个文件,
然后复制了看起来重要的差异部分,直到成功为止。
正在运行。所以,就我所知,所有的功劳都属于 DNSMorgan1712!

另外,抱歉我的英语不好,请注意我没有足够的知识提供深入的支持,也无法保证这完全没有错误。

安装

使用 NMM 下载并激活。为了避免间接获取方向信息,您应开启 Roach 过滤器以移除其位置显示。由于该模组不影响小地图,建议您将其关闭。

我还建议使用一个可以调整默认地图缩放的模组,比如出色的 Friendly HUD
在 Friendly HUD 的配置文件(modFriendlyHUDConfig.ws)中,我将 mapZoomMaxCoef 改为 0.25 以缩小默认缩放比例。
同时我通过 compassMarkersEnabled = true 启用了 Friendly HUD 的 3D 指南针功能,
并设置 project3DMarkersOnCompass = false
还将其添加到了猎魔人感官界面中。

为了让 DNSMorgan1712 的模组兼容 1.11 版本,我所做的修改:

我将以下段落在原版 mapMenu.ws 中替换为:

private function UpdatePlayerPin( out flashArray : CScriptedFlashArray ) : void {
var l_flashObject : CScriptedFlashObject;
var position: Vector;
var playerRotation: EulerAngles;
var playerAngle: float;
var cameraAngle: float;
var commonMapManager : CCommonMapManager = theGame.GetCommonMapManager();
position = thePlayer.GetWorldPosition();
cameraAngle = theCamera.GetCameraHeading();
playerRotation = thePlayer.GetWorldRotation();
playerAngle = -playerRotation.Yaw;
如果 ( 玩家角度 < 0 )
{
玩家角度 += 360.0;
}
  l_flashObject = GetMenuFlashValueStorage().CreateTempFlashObject("red.game.witcher3.data.StaticMapPinData");
l_flashObject.SetMemberFlashUInt("id", NameToFlashUInt( '玩家' ) );
l_flashObject.SetMemberFlashInt("areaId", m_shownArea);
l_flashObject.SetMemberFlashInt( "journalAreaId", commonMapManager.GetJournalAreaByPosition( m_shownArea, position ) );
l_flashObject.SetMemberFlashNumber( "posX",  position.X );
l_flashObject.SetMemberFlashNumber( "posY",  position.Y );
l_flashObject.SetMemberFlashNumber( "posZ",  position.Z );
  l_flashObject.SetMemberFlashBool("enabled",  false ); //#P 无法通过世界地图标记点传送
如果((W3ReplacerCiri)thePlayer)
{
l_flashObject.SetMemberFlashString( "description", GetLocStringByKeyExt( "map_description_player_ciri"));
l_flashObject.SetMemberFlashString( "label", GetLocStringByKeyExt( "map_location_player_ciri"));
}
 否则
{
l_flashObject.SetMemberFlashString( "description", GetLocStringByKeyExt( "map_description_player"));
l_flashObject.SetMemberFlashString( "label", GetLocStringByKeyExt( "map_location_player"));
}
l_flashObject.SetMemberFlashString( "type",  NameToString( '玩家' ) );
l_flashObject.SetMemberFlashNumber( "radius",0 );
l_flashObject.SetMemberFlashBool("isQuest",  false );
l_flashObject.SetMemberFlashBool("isPlayer", true );
l_flashObject.SetMemberFlashNumber( "rotation", playerAngle );
flashArray.PushBackFlashObject(l_flashObject);
 }
 private function UpdateUserMapPin( out flashArray : CScriptedFlashArray ) : void
{
var manager : CCommonMapManager = theGame.GetCommonMapManager();
var l_flashObject : CScriptedFlashObject;
var area : int;
var position: Vector;
manager.GetUserMapPin(区域, position.X, position.Y);
如果(区域 == AN_序章_村庄_冬季)
{
区域 = AN_Prologue_Village;
}
l_flashObject = GetMenuFlashValueStorage().CreateTempFlashObject("red.game.witcher3.data.StaticMapPinData");
如果 (区域 != (int)m_shownArea)
{
position.X = -10000;
position.Y = -10000;
l_flashObject.SetMemberFlashBool( "hidden", true );
}
position.Z = 0;
l_flashObject.SetMemberFlashUInt("id", NameToFlashUInt( '用户' ) );
l_flashObject.SetMemberFlashNumber( "posX",  position.X );
l_flashObject.SetMemberFlashNumber( "posY",  position.Y );
l_flashObject.SetMemberFlashNumber( "posZ",  position.Z );
l_flashObject.SetMemberFlashBool("enabled",  false );
l_flashObject.SetMemberFlashString( "description", GetLocStringByKeyExt( "map_description_user"));
l_flashObject.SetMemberFlashString( "label", GetLocStringByKeyExt( "map_location_user"));
  l_flashObject.SetMemberFlashString( "type",  NameToString( '用户' ) );
l_flashObject.SetMemberFlashNumber( "radius",0 );
l_flashObject.SetMemberFlashBool("isQuest",  false );
l_flashObject.SetMemberFlashBool("isPlayer", false);
l_flashObject.SetMemberFlashNumber( "rotation", 0 );
flashArray.PushBackFlashObject(l_flashObject);
 }

用这个:

private function UpdatePlayerPin( out flashArray : CScriptedFlashArray ) : void {
var l_flashObject : CScriptedFlashObject;
var position: Vector;
var playerRotation: EulerAngles;
var playerAngle: float;
var cameraAngle: float;
position = thePlayer.GetWorldPosition();
cameraAngle = theCamera.GetCameraHeading();
playerRotation = thePlayer.GetWorldRotation();
playerAngle = -playerRotation.Yaw;
如果 (玩家角度 < 0)
{
playerAngle += 360.0;
}
l_flashObject = GetMenuFlashValueStorage().CreateTempFlashObject("red.game.witcher3.data.StaticMapPinData");
l_flashObject.SetMemberFlashUInt("id", NameToFlashUInt( '玩家' ) );
l_flashObject.SetMemberFlashNumber( "posX",  position.X );
l_flashObject.SetMemberFlashNumber( "posY",  position.Y );
l_flashObject.SetMemberFlashNumber( "posZ",  position.Z );
l_flashObject.SetMemberFlashBool("enabled",  false );
如果 ( (W3ReplacerCiri)玩家 )
{
l_flashObject.SetMemberFlashString( "description", GetLocStringByKeyExt( "map_description_player_ciri"));
l_flashObject.SetMemberFlashString( "label", GetLocStringByKeyExt( "map_location_player_ciri"));
}
 否则
{
l_flashObject.SetMemberFlashString( "description", GetLocStringByKeyExt( "map_description_player"));
l_flashObject.SetMemberFlashString( "label", GetLocStringByKeyExt( "map_location_player"));
  }
l_flashObject.SetMemberFlashString( "type",  NameToString( '玩家' ) );
l_flashObject.SetMemberFlashNumber( "radius",0 );
l_flashObject.SetMemberFlashBool("isQuest",  false );
l_flashObject.SetMemberFlashBool("isPlayer", true);
l_flashObject.SetMemberFlashNumber( "rotation", playerAngle );
flashArray.PushBackFlashObject(l_flashObject);
 }
private function UpdateUserMapPin( out flashArray : CScriptedFlashArray ) : void
{
var manager : CCommonMapManager = theGame.GetCommonMapManager();
var l_flashObject : CScriptedFlashObject;
var area : int;
  var position: Vector;
manager.GetUserMapPin(区域, position.X, position.Y);
如果(区域 == AN_Prologue_Village_Winter)
{
区域 = AN_序章_村庄;
}
如果 ( 区域 != (int)m_shownArea )
{
position.X = -10000;
position.Y = -10000;
}
position.Z = 0;
l_flashObject = GetMenuFlashValueStorage().CreateTempFlashObject("red.game.witcher3.data.StaticMapPinData");
l_flashObject.SetMemberFlashUInt("id", NameToFlashUInt( '用户' ) );
l_flashObject.SetMemberFlashNumber( "posX",  position.X );
l_flashObject.SetMemberFlashNumber( "posY",  position.Y );
l_flashObject.SetMemberFlashNumber( "posZ",  position.Z );
l_flashObject.SetMemberFlashBool("enabled",  false );
l_flashObject.SetMemberFlashString( "description", GetLocStringByKeyExt( "map_description_user"));
l_flashObject.SetMemberFlashString( "label", GetLocStringByKeyExt( "map_location_user"));
l_flashObject.SetMemberFlashString( "type",  NameToString( '用户' ) );
l_flashObject.SetMemberFlashNumber( "radius",0 );
l_flashObject.SetMemberFlashBool("isQuest", false);
l_flashObject.SetMemberFlashBool("isPlayer", false );
l_flashObject.SetMemberFlashNumber( "rotation", 0 );
flashArray.PushBackFlashObject(l_flashObject);
 }

并且还注释掉了这段内容:

if ( IsCurrentAreaShown() )  {
更新玩家密码(l_flashArray);
  }

对此:

/*if ( IsCurrentAreaShown() )  {
更新玩家PIN码(l_flashArray);
  }*/