123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- #include "$mission:Scripts/CustomRevivalSuit/config.c"
- void main()
- {
- Hive ce = CreateHive();
- if ( ce )
- ce.InitOffline();
- int year, month, day, hour, minute;
- int reset_month = 9, reset_day = 20;
- GetGame().GetWorld().GetDate(year, month, day, hour, minute);
- if ((month == reset_month) && (day < reset_day))
- {
- GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute);
- }
- else
- {
- if ((month == reset_month + 1) && (day > reset_day))
- {
- GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute);
- }
- else
- {
- if ((month < reset_month) || (month > reset_month + 1))
- {
- GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute);
- }
- }
- }
- }
- class CustomMission: MissionServer
- {
- //------------------------------------------------------------------
- // 初始化方法:在服务器启动时调用
- // 功能:加载复活套装配置并打印加载状态
- //------------------------------------------------------------------
- override void OnInit()
- {
- super.OnInit();
- GetCustomRevivalSuitCfg();
- if ( g_CustomRevivalSuitCfg )
- Print( "[复活套装]: 已加载" );
- }
- //------------------------------------------------------------------
- // 创建角色方法:在玩家首次加入或重生时调用
- // 参数:
- // identity - 玩家身份信息
- // pos - 出生位置
- // ctx - 上下文参数
- // characterName - 角色名称
- // 返回:PlayerBase - 创建的角色对象
- //------------------------------------------------------------------
- override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
- {
- Entity playerEnt;
- playerEnt = GetGame().CreatePlayer( identity, characterName, pos, 0, "NONE" );
- Class.CastTo( m_player, playerEnt );
- GetGame().SelectPlayer( identity, m_player );
- return m_player;
- }
- //------------------------------------------------------------------
- // 初始装备设置方法:在玩家重生时调用
- // 功能:根据玩家身份加载VIP装备,并设置默认装备, 如果玩家不是VIP,则使用
- // 默认的系统装备, 注意如果你要添加非VIP玩家的装备,
- // 请在 DefaultPlayerEquipment 方法中添加.
- // 参数:
- // player - 玩家对象
- // clothesChosen - 是否已选择服装
- //------------------------------------------------------------------
- override void StartingEquipSetup( PlayerBase player, bool clothesChosen )
- {
- GetCustomRevivalSuitCfg();
- if ( !player || !player.GetIdentity() ) return;
-
- string steamid = player.GetIdentity().GetPlainId();
- ref PlayerRevivalEquipmentData rev = g_CustomRevivalSuitCfg.GetPlayerRevivalEquipmentData( steamid );
- bool isVIP = false;
- if ( rev )
- {
- isVIP = true;
- ProcessVIPEquipment( player, rev );
- }
- DefaultPlayerEquipment( player, clothesChosen, isVIP );
- }
- //------------------------------------------------------------------
- // 处理VIP装备方法:为VIP玩家设置自定义装备
- // 参数:
- // player - 玩家对象
- // equ_data - VIP装备数据
- // VIP玩家的出生装备处理方法, 这里根据josn配置的来生成, 不懂,请勿改动
- //------------------------------------------------------------------
- void ProcessVIPEquipment( PlayerBase player, ref PlayerRevivalEquipmentData equ_data )
- {
- if ( !equ_data ) return;
- player.RemoveAllItems();
- ItemBase equipment;
- foreach ( string equ : equ_data.Equipments )
- player.GetInventory().CreateInInventory( equ );
- foreach ( string item : equ_data.ItemList )
- player.GetInventory().CreateInInventory( item );
- if ( !equ_data.WeaponData || equ_data.WeaponData.WeaponName == "" ) return;
- Weapon_Base weapon = Weapon_Base.Cast( player.GetInventory().CreateInInventory( equ_data.WeaponData.WeaponName ) );
- if ( !weapon ) return
- foreach ( string attachment : equ_data.WeaponData.WeaponComponents )
- {
- if ( String( attachment ).ToType().IsInherited( Magazine ) )
- {
- Magazine wpn_mag = weapon.SpawnAttachedMagazine( attachment );
- if ( wpn_mag )
- wpn_mag.SetSynchDirty();
- continue;
- }
- if ( weapon.GetInventory() )
- ItemBase.Cast( weapon.GetInventory().CreateInInventory( attachment ) );
- }
- }
- //------------------------------------------------------------------
- // 设置随机健康值方法:为物品设置随机的健康值
- // 参数:
- // itemEnt - 物品实体
- //------------------------------------------------------------------
- void SetRandomHealth(EntityAI itemEnt)
- {
- if (itemEnt)
- {
- float rndHlt = Math.RandomFloat( 0.50, 0.85 );
- itemEnt.SetHealth01( "", "", rndHlt );
- }
- }
- //------------------------------------------------------------------
- // 默认装备设置方法:为玩家设置默认的初始装备
- // 参数:
- // player - 玩家对象
- // clothesChosen - 是否已选择服装
- // isVIP - 是否为VIP玩家
- // 这里的代码是原版init.c中 StartingEquipSetup 方法中的内容, 只是换了个方法名字
- //------------------------------------------------------------------
- void DefaultPlayerEquipment( PlayerBase player, bool clothesChosen, bool isVIP )
- {
- EntityAI itemClothing;
- EntityAI itemEnt;
- ItemBase itemBs;
- float rand;
- if ( !isVIP )
- {
- // TODO: 这里给普通玩家创建装备. 以前在StartingEquipSetup中如何给玩家创建新的装备这里就如何写
- // player.RemoveAllItems(); // 移除所有默认装备
- // itemEnt = player.GetInventory().CreateInInventory( "" /*这里写服装代码 */ );
- }
-
- itemClothing = player.FindAttachmentBySlotName( "Body" );
- if ( itemClothing )
- {
- SetRandomHealth( itemClothing );
-
- itemEnt = itemClothing.GetInventory().CreateInInventory( "BandageDressing" );
- if ( Class.CastTo( itemBs, itemEnt ) )
- itemBs.SetQuantity( 2 );
- string chemlightArray[] = { "Chemlight_White", "Chemlight_Yellow", "Chemlight_Green", "Chemlight_Red" };
- int rndIndex = Math.RandomInt( 0, 4 );
- itemEnt = itemClothing.GetInventory().CreateInInventory( chemlightArray[rndIndex] );
- SetRandomHealth( itemEnt );
- ItemBase itemTop;
- rand = Math.RandomFloatInclusive( 0.0, 1.0 );
- if ( rand < 0.35 )
- {
- itemEnt = player.GetInventory().CreateInInventory( "Rag" );
- itemTop = ItemBase.Cast( itemEnt );
- itemTop.RemoveAllAgentsExcept(eAgents.BRAIN | eAgents.SALMONELLA | eAgents.CHOLERA);
- itemTop.SetCleanness(1);
- }
- else if ( rand > 0.65 )
- {
- itemEnt = player.GetInventory().CreateInInventory( "Rag" );
- itemTop = ItemBase.Cast( itemEnt );
- itemTop.RemoveAllAgentsExcept(eAgents.BRAIN | eAgents.SALMONELLA | eAgents.CHOLERA);
- itemTop.SetCleanness(1);
- }
- else
- itemEnt = player.GetInventory().CreateInInventory( "Rag" );
- // SetRandomHealth( itemEnt );
- }
-
- itemClothing = player.FindAttachmentBySlotName( "Legs" );
- if ( itemClothing )
- SetRandomHealth( itemClothing );
-
- itemClothing = player.FindAttachmentBySlotName( "Feet" );
- }
- };
- Mission CreateCustomMission(string path)
- {
- return new CustomMission();
- }
|