{"name":"isKindOf","operator":null,"title":"isKindOf","type":"command","url":"https://community.bistudio.com/wiki/isKindOf","revid":341247,"updated":"2023-05-18T10:50:41Z","groups":["Object Manipulation"],"status":"ok","replaced_by":[],"games":[{"game":"ofpe","name":"Operation Flashpoint: Elite","version":"1.00"},{"game":"arma1","name":"Armed Assault","version":"1.00"},{"game":"arma2","name":"Arma 2","version":"1.00"},{"game":"arma2oa","name":"Arma 2: Operation Arrowhead","version":"1.50"},{"game":"tkoh","name":"Take On Helicopters","version":"1.00"},{"game":"arma3","name":"Arma 3","version":"0.50"}],"since":{"game":"ofpe","name":"Operation Flashpoint: Elite","version":"1.00"},"arma3_since":"0.50","branch":null,"locality":{"argument":null,"effect":null,"server_exec":false},"exec":null,"description":"Checks whether the given object or type is (a subtype) of the given type.\n\nWhile #Syntax 1 and #Syntax 2 only support **CfgVehicles**, Arma 2 v1.00**CfgAmmo** and **CfgNonAIVehicles**, #Syntax 3 can be used with any config, including the mission config.","syntaxes":[{"syntax":"object isKindOf typeName","since":null,"effect":null,"exec":null,"params":[{"name":"object","type":"Object","optional":false,"default":null,"description":null,"types":["Object"],"since":null,"text":"object: Object"},{"name":"typeName","type":"String","optional":false,"default":null,"description":null,"types":["String"],"since":null,"text":"typeName: String"}],"returns":{"type":"Boolean","types":["Boolean"],"description":null,"text":"Boolean"},"form":"binary","operator":null,"left":{"text":"object","types":["Object"]},"right":{"text":"typeName","types":["String"]}},{"syntax":"class1 isKindOf class2","since":null,"effect":null,"exec":null,"params":[{"name":"class1","type":"String","optional":false,"default":null,"description":null,"types":["String"],"since":null,"text":"class1: String"},{"name":"class2","type":"String","optional":false,"default":null,"description":null,"types":["String"],"since":null,"text":"class2: String"}],"returns":{"type":"Boolean","types":["Boolean"],"description":null,"text":"Boolean"},"form":"binary","operator":null,"left":{"text":"class1","types":["String"]},"right":{"text":"class2","types":["String"]}},{"syntax":"class1 isKindOf [class2, targetConfig]","since":"arma3 1.48","effect":null,"exec":null,"params":[{"name":"class1","type":"String","optional":false,"default":null,"description":null,"types":["String"],"since":null,"text":"class1: String"},{"name":"class2","type":"String","optional":false,"default":null,"description":null,"types":["String"],"since":null,"text":"class2: String"},{"name":"targetConfig","type":"Config","optional":false,"default":null,"description":null,"types":["Config"],"since":null,"text":"targetConfig: Config"}],"returns":{"type":"Boolean","types":["Boolean"],"description":null,"text":"Boolean"},"form":"binary","operator":null,"left":{"text":"class1","types":["String"]},"right":{"text":"[class2, targetConfig]","types":["Array"]}}],"examples":[{"text":"```sqf\nvehicle player isKindOf \"Tank\";\n```","code":["vehicle player isKindOf \"Tank\";"]},{"text":"```sqf\n\"BMP2\" isKindOf \"Tank\";\n```","code":["\"BMP2\" isKindOf \"Tank\";"]},{"text":"```sqf\ncurrentWeapon player isKindOf [\"Rifle\", configFile >> \"CfgWeapons\"];\n```","code":["currentWeapon player isKindOf [\"Rifle\", configFile >> \"CfgWeapons\"];"]},{"text":"```sqf\nprivate _isSoldier = player isKindOf \"CAManBase\";\n```","code":["private _isSoldier = player isKindOf \"CAManBase\";"]}],"multiplayer":null,"problems":null,"aliases":[],"see_also":["typeOf","countType","inheritsFrom","configHierarchy"],"notes":[{"user":"Kronzky","date":"2007-04-23T16:34:00Z","text":"This command can be used on the whole hierarchical class tree (i.e. when checking a HMMWV, one could test for \"HMMWV50\", \"Car\", \"LandVehicle\", etc., all of which would return true.)"},{"user":"James","date":"2015-06-16T17:54:00Z","text":"In case you cannot use isKindOf because of the reasons stated, just use BIS_fnc_returnParents with class names as return value:\n\n```sqf\n_isKindOf = \"Rifle\" in [configFile >> \"CfgWeapons\" >> \"BWA3_G36K\", true] call BIS_fnc_returnParents; // is true\n```"},{"user":"Basstard","date":"2015-09-06T22:21:00Z","text":"In Arma 3 isKindOf works well with CfgWeapons and CfgMagazines using the syntax from example 3.\n\nIt should be prefered to James' solution as it performs more than 25x faster. Tested in debug console with the following code snippets:\n\n```sqf\n\"CA_Magazine\" in ([configFile >> \"CfgMagazines\" >> \"HandGrenade\", true] call BIS_fnc_returnParents);    // 0.12111 ms\n\"HandGrenade\" isKindOf [\"CA_Magazine\", configFile >> \"CfgMagazines\"];                                    // 0.00439453 ms\n```\n\nWhen checking in CfgVehicles the syntax from #Example 2 performs a little faster."}],"categories":["ArmA: Armed Assault: Scripting Commands","Arma 2: Operation Arrowhead: Scripting Commands","Arma 2: Scripting Commands","Arma 3: Scripting Commands","Command Group: Object Manipulation","Introduced with Operation Flashpoint: Elite version 1.00","Operation Flashpoint: Elite: New Scripting Commands","Operation Flashpoint: Elite: Scripting Commands","Scripting Commands","Take On Helicopters: Scripting Commands"]}