QQ登录

只需一步,快速开始

搜索

免费自助文章链接,禁止站外链接:一次最多7天

文视教程 DayZ服务器init.c基础配置教程(原作者:九幽)干货

DayZ服务器init.c基础配置教程(原作者:九幽)

由于作者特忙,由我代发:


  1. /*
  2.         该文件不可直接运行
  3.         该文件不可直接运行
  4.         该文件不可直接运行

  5.         init文件基础配置教程,希望给予新服主们一些帮助
  6.         希望dayz增增日上减少恶性竞争与互黑

  7.                 关于一些事情的看法:

  8.                         一些模组在没有征得发布者同意的情况下禁止放进自己的模组内二次发布
  9.                         一个模组功能很多,但是我只想要其中一个,非发布者允许的情况下禁止拆包
  10.                         一些私有模组的功能/道具/玩法,如果你喜欢可以联系那个服主进行沟通(发布者发布模组是客户端挂载的我建议发布者加密后发布,服务端别人也看不见代码无所谓了)
  11.                         购买模组是一个服务器使用,别我服务器不开了我就给别人当技术给其他服务器使用,所以当购买或者贩卖时一定要敲定好这类事件
  12.                         我从来不给别人打包国内作者发布的模组,也不修改除非很明确他这个模组是与发布者购买的,我如果个人喜欢我也会与发布者沟通,那些背后黑我的人你死妈了吗?
  13.        
  14.         本文件禁止贩卖 BY:九幽
  15. */
  16. //地图生成玩家自定义建筑物
  17. void SpawnObject( string type, vector position, vector orientation )
  18. {
  19.     auto obj = GetGame().CreateObject( type, position );
  20.     obj.SetPosition( position );
  21.     obj.SetOrientation( orientation );
  22.     obj.SetOrientation( obj.GetOrientation() ); //Collision fix
  23.     obj.Update();
  24.     obj.SetAffectPathgraph( true, false );
  25.     if( obj.CanAffectPathgraph() ) GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( GetGame().UpdatePathgraphRegionByObject, 100, false, obj );
  26. }
  27. void main()
  28. {
  29.         /*天气设置*/
  30.         Weather weather = g_Game.GetWeather();
  31.         weather.MissionWeather(false);
  32.         /*
  33.                 按理说如果设置weather.MissionWeather(true);
  34.                 下面的参数都改0 就可以自行设置天气并所锁定永远晴天和雨天
  35.                 但是有的服务器不生效

  36.                 weather.MissionWeather(true);    // false =使用weather.c中的天气控制器

  37.             weather.GetOvercast().Set( 0, 0, 0);        //阴
  38.                 weather.GetRain().Set( 0, 0, 0);        //雨
  39.                 weather.GetFog().Set( 0, 0, 0);                //雾
  40.                
  41.                 weather.GetOvercast().SetForecastChangeLimits( 0.0, 0.0 );
  42.                 weather.GetRain().SetForecastChangeLimits( 0.0, 0.0 );
  43.                 weather.GetFog().SetForecastChangeLimits( 0.0, 0.0 );

  44.                 weather.GetOvercast().SetForecastTimeLimits( 0 , 0 );
  45.                 weather.GetRain().SetForecastTimeLimits( 0 , 0 );
  46.                 weather.GetFog().SetForecastTimeLimits( 0 , 0 );

  47.                 weather.SetWindMaximumSpeed(0.1);
  48.                 weather.SetWindFunctionParams(0.0, 0.1, 1);

  49.                 然后删除下面关于开头是weather.的行
  50.         */
  51.         weather.GetOvercast().Set( Math.RandomFloatInclusive(0.4, 0.6), 1, 0);
  52.         weather.GetRain().Set( 0, 0, 1);
  53.         weather.GetFog().Set( Math.RandomFloatInclusive(0.05, 0.1), 1, 0);

  54.         /*初始化*/
  55.         Hive ce = CreateHive();
  56.         if ( ce )
  57.                 ce.InitOffline();

  58.         /*重启后日期设置*/
  59.         GetGame().GetWorld().SetDate(2020, 6, 1, 8, 30);        //天天都是儿童节 lol 2020年6月1日8:30

  60.         /*添加自定义建筑物*/
  61.         SpawnObject("建筑物名称1","建筑物坐标1","建筑物角度1");
  62.         SpawnObject("建筑物名称2","建筑物坐标2","建筑物角度2");
  63.         SpawnObject("建筑物名称3","建筑物坐标3","建筑物角度3");
  64.         /*
  65.                 演示 在地图雷峰塔 添加@banking模组的ATM机器
  66.                 SpawnObject("DC_BankingATM", "3706.7 402.012 5984.86", "90 0 0"); //Green Mountain ATM 1
  67.                 SpawnObject("DC_BankingATM", "3704.7 402.332 6003.1", "275 0 0"); //Green Mountain ATM 2
  68.         */
  69. }

  70. class CustomMission: MissionServer
  71. {
  72.         /*设置随机损坏程度*/
  73.         void SetRandomHealth(EntityAI itemEnt)
  74.         {
  75.                 if ( itemEnt )
  76.                 {
  77.                         float rndHlt = Math.RandomFloat( 0.45, 0.65 );
  78.                         itemEnt.SetHealth01( "", "", rndHlt );
  79.                 }
  80.         }
  81.         /*重生创建角色*/
  82.         override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
  83.         {
  84.                 Entity playerEnt;
  85.                 /*指定玩家每次重生复活*/

  86.                 /*玩家id*/string GUID = player.GetIdentity().GetPlainId();        //必须 获取玩家GUID 指定不同玩家根据此GUID判断

  87.                 if (GUID=="玩家1Guid")
  88.                 {
  89.                         pos="0 0 0";                //坐标顺序 横轴 高度 纵轴
  90.                 }
  91.                 if (GUID=="玩家2Guid")
  92.                 {
  93.                         pos="1 1 1";                //坐标顺序 横轴 高度 纵轴
  94.                 }
  95.                 if (GUID=="玩家3Guid")
  96.                 {
  97.                         pos="2 2 2";                //坐标顺序 横轴 高度 纵轴
  98.                 }

  99.                 playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player
  100.                 //Print("玩家GUID: "+identity.GetPlainId()+"   复活位置:"+pos);        //日志生成玩家重生后坐标
  101.                 Class.CastTo(m_player, playerEnt);
  102.                 GetGame().SelectPlayer(identity, m_player);
  103.                 return m_player;
  104.         }
  105.         /*重生后给予装备*/
  106.         override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
  107.     {
  108.                 /*对象类*/EntityAI itemEnt;                                                                        //非必须 只有在给道具附加配件时使用 例如枪械附加枪托/瞄具/护木
  109.                 /*物品类*/ItemBase itemBs;                                                                        //非必须 只有在设置物品数量已经物品损坏程度时才会使用
  110.                 /*玩家id*/string GUID = player.GetIdentity().GetPlainId();        //必须 获取玩家GUID 指定不同玩家根据此GUID判断

  111.                 /*
  112.                         下面两种绑定复活装备的方法
  113.                         不要让GUID重复
  114.                         例如玩家单独绑定了一套装备就不要在小队里再去添加该玩家
  115.                         也不要单独的装备绑定两次 (不懂代码的建议如此)
  116.                 */

  117.                 /*单个玩家绑定一套装备*/

  118.                 if (GUID=="玩家1Guid")                //给玩家1设置出生装备
  119.                 {
  120.                         player.RemoveAllItems();        //如果是需要单独装备的玩家必须执行该方法,先清理身上全部道具
  121.                         player.GetInventory().CreateInInventory("XXX");        //玩家库存中添加道具(崭新出厂)
  122.                         player.GetInventory().CreateInInventory("YYY");        //玩家库存中添加道具(崭新出厂)
  123.                         /*给玩家添加大量重复性道具 例如10个苹果*/
  124.                         for(int i = 0 ; i < 10 ; i++ )        //几个道具就设置i<几 比如5个就i<5
  125.                         {
  126.                                 player.GetInventory().CreateInInventory("apple");        //玩家库存中添加道具(崭新出厂)
  127.                         }
  128.                 }
  129.                 if (GUID=="玩家2Guid")                //给玩家2设置出生装备
  130.                 {
  131.                         player.RemoveAllItems();        //如果是需要单独装备的玩家必须执行该方法,先清理身上全部道具
  132.                         itemEnt = player.GetHumanInventory().CreateInHands("UMP45");                //玩家手中添加道具ump45 同时itemEnt等于玩家手中的这个道具
  133.                         itemEnt.GetInventory().CreateAttachment("BUISOptic");                                //给itemEnt对象添加瞄具
  134.                         itemEnt.GetInventory().CreateAttachment("PistolSuppressor");                //给itemEnt对象添加消音
  135.                         itemEnt = itemEnt.GetInventory().CreateAttachment("UniversalLight");//重新定义itemEnt对象=这把ump45上的手电
  136.                         itemEnt.GetInventory().CreateAttachment("Battery9V")                                //给itemEnt对象添加电池
  137.                         /*此类方法不可用于给枪械添加弹夹 否则会出现bug无法开枪 从0.63版本至今未修复*/
  138.                 }
  139.                 if (GUID=="玩家3Guid")                //给玩家3设置出生装备
  140.                 {
  141.                         player.RemoveAllItems();        //如果是需要单独装备的玩家必须执行该方法,先清理身上全部道具
  142.                         itemEnt = itemClothing.GetInventory().CreateInInventory( "Rag" );        //玩家库存添加道具布条 同时itemEnt等于玩家库存中的这个道具
  143.                         SetRandomHealth( itemEnt );                                                                                        //调用SetRandomHealth()方法 对itemEnt进行设置损坏程度
  144.                         if ( Class.CastTo( itemBs, itemEnt ) )                                                                //将itemEnt对象转换成物品类 EntityAI -> ItemBase
  145.                         {
  146.                                 itemBs.SetQuantity( 4 );                                                                                //设置物品类itemBs的数量=4
  147.                         }
  148.                 }

  149.                 /*多个玩家绑定同一套装备*/

  150.                 /*Cat小队*/ref array<string> team_Cat={"Cat队员1Guid","Cat队员2Guid","Cat队员3Guid","Cat队员4Guid"};
  151.                 /*Dog小队*/ref array<string> team_Dog={"Dog队员1Guid","Dog队员2Guid","Dog队员3Guid","Dog队员4Guid"};
  152.                 /*Abc小队*/ref array<string> team_Abc={"Abc队员1Guid","Abc队员2Guid","Abc队员3Guid","Abc队员4Guid"};

  153.                 if (team_Cat.Find(GUID)>-1)                //Cat小队复活道具
  154.                 {
  155.                         player.RemoveAllItems();        //如果是需要单独装备的玩家必须执行该方法,先清理身上全部道具
  156.                         player.GetInventory().CreateInInventory("AAA");        //Cat小队玩家库存中添加道具(崭新出厂)
  157.                         player.GetInventory().CreateInInventory("BBB");        //Cat小队玩家库存中添加道具(崭新出厂)
  158.                         /*具体其他操作方法请参照单独绑定的3中方法根据自己需要自行添加*/
  159.                 }
  160.                 if (team_Dog.Find(GUID)>-1)                //Dog小队复活道具
  161.                 {
  162.                         player.RemoveAllItems();        //如果是需要单独装备的玩家必须执行该方法,先清理身上全部道具
  163.                         player.GetInventory().CreateInInventory("DDD");        //Dog小队玩家库存中添加道具(崭新出厂)
  164.                         player.GetInventory().CreateInInventory("CCC");        //Dog小队玩家库存中添加道具(崭新出厂)
  165.                         /*具体其他操作方法请参照单独绑定的3中方法根据自己需要自行添加*/
  166.                 }
  167.                 if (team_Abc.Find(GUID)>-1)                //Abc小队复活道具
  168.                 {
  169.                         player.RemoveAllItems();        //如果是需要单独装备的玩家必须执行该方法,先清理身上全部道具
  170.                         player.GetInventory().CreateInInventory("EEE");        //Abc小队玩家库存中添加道具(崭新出厂)
  171.                         player.GetInventory().CreateInInventory("FFF");        //Abc小队玩家库存中添加道具(崭新出厂)
  172.                         /*具体其他操作方法请参照单独绑定的3中方法根据自己需要自行添加*/
  173.                 }

  174.                 /*所有玩家通用复活装备 绑定与没绑定的玩家都可以获得*/

  175.                 player.GetInventory().CreateInInventory("食物");
  176.                 player.GetInventory().CreateInInventory("食物");
  177.                 player.GetInventory().CreateInInventory("水壶");
  178.                 player.GetInventory().CreateInInventory("水壶");
  179.                 player.GetInventory().CreateInInventory("匕首");
  180.                 player.GetInventory().CreateInInventory("电池");
  181.                 player.GetInventory().CreateInInventory("地图");
  182.                 player.GetInventory().CreateInInventory("手表");
  183.                 player.GetInventory().CreateInInventory("指北针");

  184.                 /*所有玩家通用复活装备 绑定与没绑定的玩家都可以获得 随机列表中的一件*/
  185.                 /*定义随机物品这里用官方的 4种荧光棒举例子 一共是4个道具 下标为0~3 而不是 1~4 这个很重要*/
  186.                 string chemlightArray[] = { "Chemlight_White", "Chemlight_Yellow", "Chemlight_Green", "Chemlight_Red" };
  187.                 /*rndIndex = 随机获得一个 大于等于0 并且小与4 的整数类型*/
  188.                 int rndIndex = Math.RandomInt( 0, 4 );                                                                       
  189.                 /*给玩家库存中添加道具(崭新出厂) 道具是chemlightArray这列表中下标为rndIndex的道具 */
  190.                 player.GetInventory().CreateInInventory( chemlightArray[rndIndex] );       
  191.         }
  192. };

  193. Mission CreateCustomMission(string path)
  194. {
  195.         return new CustomMission();
  196. }
复制代码


大神点评4

xlsj4x 2020-12-11 15:17:36 显示全部楼层
66666666666优秀
回复 支持 反对

使用道具 举报

z122122606 2021-1-10 20:05:17 显示全部楼层
衣服如何绑定这个玩家?例如您设置的第一个单人绑定的那个,死后装备是不是被别人捡走了?如何才能让别人不能用呢?求教
回复 支持 反对

使用道具 举报

czf411075597 2021-1-26 21:19:49 显示全部楼层
        /*初始化*/
        Hive ce = CreateHive();
        if ( ce )
                ce.InitOffline();

        /*重启后日期设置*/
        GetGame().GetWorld().SetDate(2020, 6, 1, 8, 30);        //天天都是儿童节 lol 2020年6月1日8:30

设置完进入服务器,一进房间就显示高温!
回复 支持 反对

使用道具 举报

kermit 2021-2-21 16:34:35 显示全部楼层
普通玩家怎样衣服怎么加哪
回复 支持 反对

使用道具 举报