local ENERGY_PENALTY_VALUE = -9999 local function energy_penalty_Apply(MapID, InstanceID, RoleID) local saved_flag = role.GetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_saved"]) if saved_flag ~= 1 then local current_vitality = role.GetRoleAttValue(MapID, InstanceID, RoleID, 25) -- ERA_Vitality local current_max_vitality = role.GetRoleAttValue(MapID, InstanceID, RoleID, 26) -- ERA_MaxVitality local current_vitality_regen = role.GetRoleAttValue(MapID, InstanceID, RoleID, 27) -- ERA_VitalityRegainRate role.SetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_vitality"], current_vitality or 0) role.SetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_max_vitality"], current_max_vitality or 0) role.SetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_vitality_regen"], current_vitality_regen or 0) role.SetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_saved"], 1) end unit.SetAttValue(MapID, InstanceID, RoleID, 25, ENERGY_PENALTY_VALUE) -- ERA_Vitality unit.SetAttValue(MapID, InstanceID, RoleID, 26, ENERGY_PENALTY_VALUE) -- ERA_MaxVitality unit.SetAttValue(MapID, InstanceID, RoleID, 27, ENERGY_PENALTY_VALUE) -- ERA_VitalityRegainRate end local function energy_penalty_Restore(MapID, InstanceID, RoleID) local saved_flag = role.GetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_saved"]) if saved_flag ~= 1 then return end local saved_vitality = role.GetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_vitality"]) local saved_max_vitality = role.GetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_max_vitality"]) local saved_vitality_regen = role.GetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_vitality_regen"]) if saved_vitality ~= nil then unit.SetAttValue(MapID, InstanceID, RoleID, 25, saved_vitality) end if saved_max_vitality ~= nil then unit.SetAttValue(MapID, InstanceID, RoleID, 26, saved_max_vitality) end if saved_vitality_regen ~= nil then unit.SetAttValue(MapID, InstanceID, RoleID, 27, saved_vitality_regen) end role.SetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_vitality"], 0) role.SetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_max_vitality"], 0) role.SetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_vitality_regen"], 0) role.SetRoleScriptData(RoleID, 1, RoleDataType["energy_penalty_saved"], 0) end function shouhuditu_OnPlayerEnter(MapID, InstanceID, RoleID) unit.SetCamp(MapID, InstanceID, RoleID, 2) energy_penalty_Apply(MapID, InstanceID, RoleID) end aux.RegisterMapEvent("dmap1",2, "shouhuditu_OnPlayerEnter") function shouhuditu_OnPlayerLeave(MapID, InstanceID, TargetID) local num = role.GetRoleItemNum(TargetID, 4810173) if num >= 1 then role.RemoveFromRole(MapID, InstanceID, TargetID, 4810173, num, 101) end unit.SetCamp(MapID, InstanceID, TargetID,0) energy_penalty_Restore(MapID, InstanceID, TargetID) end aux.RegisterMapEvent("dmap1",3, "shouhuditu_OnPlayerLeave") aux.RegisterMapEvent("dmap1",25, "shouhuditu_OnPlayerLeave")