Skip to content

Presets overview

SaltyMonkey edited this page Feb 13, 2020 · 3 revisions

Presets is main part of FPS Manager functionality. Every preset is JSON formatted file with included information about settings and available behaviors.

All presets can be found <modfolder>/settings/presets/

Vocabulary

  • Preset - JSON formatted file, includes directives and modes for one class
  • Mode - set of setting
  • Directives - service part in every preset. Describes start point, and automation behavior if needed.

Basics:

FPS Manager must have at least 1 preset installed; if zero presets detected then mod will be not able to load, exception will be raised. By default preset with name common will be activated for all classes. YOU MUST KEEP THIS PRESET JUST AS FAILOVER AND/OR IF YOU WANT JUST BASIC USAGE FEATURES. Presets must be placed in folder <modfolder>/settings/presets/ and have proper file names (explained below) .

If FPS Manager configured in options to support class based presets it will try load preset for your class firstly, after, if failed, will use common one.

Example:

you have 2 presets in presets directory:

  • <modfolder>/settings/presets/common.json
  • <modfolder>/settings/presets/warrior.json

If setting classBasedPresets:true then your warrior will use warrior.json, another classes common.json

Naming:

FPS Manager using internal client data instead of hardcoded strings and it leads to some differences between known game classes and FPS Manager naming scheme . Presets MUST HAVE names from expected preset names list.

Expected preset name Game class
"warrior" "warrior"
"lancer" "lancer"
"slayer" "slayer"
"berserker" "berserker"
"sorcerer" "sorcerer"
"archer" "archer"
"priest" "priest"
"elementalist" "mystic"
"fighter" "brawler"
"engineer" "gunner"
"glaiver" "valk"
"soulless" "reaper"
"assassin" "ninja"

Preset structure

Preset structure MUST HAVE directives object and modes object.

Simplified example below:

{
	
	"directives": {

		...
	
	},
	"modes": {

		...
	
	}
}

directives structure

Every directives field except default can be removed or have value false - leads to "no jobs needed by event" state.

Value must be valid key from modes object.

Simplified example with explanation (WARNING: you can't place comments as below in real file).

{
	...
	"directives": {
		"default": "basicMode", //applies mode (NAME) after first login [REQUIRED]
		"triggerGuardians": "basicMode", //applies mode (NAME) as guardians detected [OPTIONAL]
		"triggerDungeons": { 
			"all": "basicMode", //applies mode (NAME) as any dungeon detected [OPTIONAL]
			"9000": "basicMode" //applies mode (NAME) as dungeon with specified id detected [OPTIONAL]
		},
		"triggerCU": "basicMode", //applies mode (NAME) as CU detected [OPTIONAL]
		"triggerBG": "basicMode", //applies mode (NAME) as battlegrounds detected [OPTIONAL]
		"triggerOW": "basicMode" //applies mode (NAME) as Open world location detected [OPTIONAL]
	}
	...

}

modes structure

Every field in mode explains MODE NAME and contains desired options as object. This name can be used in in-game commands to forcefully switch mode and can be added to directives as value for trigger options.

Simplified example below: (WARNING: you can't place comments as below in real file)

{	...

	"modes": {
		"basicMode": { //mode name, can be applied in directives (look example above)
			...
		},
		"myCustomModeName" : { //custom user mode name, called with commands as example: /8 fm m myCustomModeName)
			...
		}
	}

	...
}

mode structure

Every mode object in preset contains options for fps manager.

Detailed explanation for every option below:

P.S: same as presets, it using game internal names for classes.

{
			"throttleSomePackets": false, //blocks some packets if server spams them and they all same
			"blockCustomAppearanceChanges": false, //blocks custom appearance changes (as example marrow brooch)
			"blockUselessPackets": false, //block some unused packets which still gets send to client
			"blockAnnoyingScreenMessages": false, //block some spammy messages (as example guild quests)
			"blockNoctsEffect": false, //block shiny effect when used super nocts
			"blockActionScripts": false, //block special ingame events
			"blockNpcsDeathAnimations": false, //block animated death 
			"blockAchievementsInCombat": false, //block achievement packets while you in combat
			"blockInventoryInCombat": false, //block inventory packets while you in combat
			"blockShakeEffects": false, //block ALL shake effects 
			"blockGatherNode": false, //block useless gather nodes 
			"blockPetBaloons": false, //block pet messages 
			"blockHits": {
				"area": false, //block hits in area except you
				"me": false //block own hits effects but keep them from another players
			},
			"blockBuffs": {
				"area": false, //block all player buffs packets except your
				"huntRewards": false, //block exp/gold buffs
				"shapeChange": false, //block shape change buffs
				"effects": false //block on screen effects 
			},
			"blockNumbersPopups": {
				"hp": false, //block your hp change numbers
				"mp": false, //block your mp numbers 
				"damage": false //block damage numbers
			},
			"blockAdditionalSkillEffects": {
				"own": false, //block your skills additional effects when possible
				"players": false //block skills additional effects when possible from players near
			},
			"blockProjectiles": {
				"players": false //block players projectiles effects
			},
			"blockDropItems": {
				"all": false, //block ALL drop 
				"templateId": [] //block desired drop by templateId
			},
			"blockServants": {
				"area": false, //block servants from another players
			},
			"blockSummons": {
				"me": false, //block own summons
				"area": false //block  not your summons
			},
			"blockSkills": {
				"class": [], //block skills based on class
				"rawId": [], //block all skills with desired id
				"extended": { 

				}
			},
			"blockNpcs": {
				"templateId": [], //block npc by template Is
				"huntingZoneId": [] //block npc by hunting zone
			},
			"blockPlayers": {
				"all": false, //block all players near
				"keepParty": true, //keep party members from block
				"class": [], //block by class
				"name": [] //block by name
			}
		},