下网上载 发表于 2013-5-5 00:11
自己读出来在写的东西适应不了mod啊。。。庞大基数的mod需要一个可以偷懒的脚本
从config直接读啊。不管什么mod都要写入config的。所以只要从config读就不怕classname出问题
给你几个cfgWeapons的例子。
//[] call fnc_CfgWeapons_getAllWeapons;
//[_type] call fnc_CfgWeapons_getAllItems; //"Optics","Muzzles","Pointers","Hats","Uniforms","Vests","WeaponMods","All","Others"
//[] call fnc_cfgWeapons_getRifles;
//[] call fnc_cfgWeapons_getMachineGuns;
//[] call fnc_cfgWeapons_getLaunchers;
//[] call fnc_cfgWeapons_getPistols;
//[_wp] call fnc_cfgWeapons_getMags;
//[_wp,_itemType] call fnc_cfgWeapons_getItems; //"Optics","Muzzles","Pointers","All","Others"
//[] call fnc_cfgWeapons_getGrenades;
//[] call fnc_cfgWeapons_getExplosives
//[_type] call fnc_cfgWeapons_getPic;
//[_type] call fnc_cfgWeapons_getName;
//[_type] call fnc_cfgWeapons_getType; //1_primary,2_handgun,1+4_primaryAndSecondary,4_secondary
//[_type] call fnc_cfgWeapons_isWeapon;
//[_type] call fnc_cfgWeapons_isUniform;
//[_type] call fnc_cfgWeapons_isVest;
//[_type] call fnc_cfgWeapons_isHat;
//[_type] call fnc_cfgWeapons_isOptics;
//[_type] call fnc_cfgWeapons_isMuzzle;
//[_type] call fnc_cfgWeapons_isPointer;
//[_type] call fnc_cfgWeapons_isItem;
//[_type] call fnc_cfgWeapons_isExplosive;
//[_type] call fnc_cfgWeapons_isGrenade;
//[_type] call fnc_cfgWeapons_getContainerClass;
//[_type] call fnc_cfgWeapons_getSlotInfo;
//all personel weapons
fnc_CfgWeapons_getAllWeapons =
{
private ["_i","_list","_item"];
_list = [];
for "_i" from 0 to ((count (configFile >> "CfgWeapons"))-1) do
{
_item=((configFile >> "CfgWeapons") select _i);
if(isClass _item) then //is class
{
if (getNumber (_item >> "scope") == 2) then //scope: public
{
if (count(getArray (_item >> "magazines")) !=0 ) then //Weapon has magazine
{
if(getNumber(_item>>"type")!= 65536) then //weapon is not hardmounted on vehicle
{
_list set [count _list, configName _item];
};
};
};
};
};
_list
};
fnc_CfgWeapons_getAllItems =
{
private ["_i","_list","_item","_type","_optics","_muzzles","_pointers","_hats","_uniforms",
"_vests","_others","_infoType"];
_type = _this select 0;
_optics = [];
_muzzles = [];
_pointers = [];
_hats = [];
_uniforms = [];
_vests = [];
_others = [];
for "_i" from 0 to ((count (configFile >> "CfgWeapons"))-1) do
{
_item=((configFile >> "CfgWeapons") select _i);
if(isClass _item) then //is class
{
if (getNumber (_item >> "scope") == 2) then //scope: public
{
if(getNumber (_item >> "type") == 131072) then //is inherited from itemCore
{
if (isClass (_item>>"ItemInfo")) then //is an item
{
_infoType = (getNumber(_item>>"ItemInfo">>"Type"));
switch (_infoType) do
{
case 201: {_optics set [count _optics, configName _item];};
case 101: {_muzzles set [count _muzzles, configName _item];};
case 301: {_pointers set [count _pointers, configName _item];};
case 605: {_hats set [count _hats, configName _item];};
case 801: {_uniforms set [count _uniforms, configName _item];};
case 701: {_vests set [count _vests, configName _item];};
default {_others set [count _others, configName _item];};
};
};
};
};
};
};
_list = [];
switch (_type) do
{
case "Optics" : {_list = _optics;};
case "Muzzles" : {_list = _muzzles;};
case "Pointers" : {_list = _pointers;};
case "Hats" : {_list = _hats;};
case "Uniforms" : {_list = _uniforms;};
case "Vests" : {_list = _vests;};
case "All" : {_list = _optics+_muzzles+_pointers+_hats+_uniforms+_vests;};
case "WeaponMods" : {_list = _optics+_muzzles+_pointers;};
case "Others" : {_list = _others;};
default {};
};
_list
};
fnc_cfgWeapons_getRifles =
{
private ["_weapons","_list","_i","_item","_type"];
_weapons = [] call fnc_CfgWeapons_getAllWeapons;
_list = [];
for "_i" from 0 to ((count _weapons)-1) do
{
_item=(configFile >> "CfgWeapons" >> (_weapons select _i));
_type = getNumber (_item >> "type");
if(_type==1) then //primary slot weapon
{
_list set [count _list, configName _item];
};
};
_list
};
fnc_cfgWeapons_getMachineGuns =
{
private ["_weapons","_list","_i","_item","_type"];
_weapons = [] call fnc_CfgWeapons_getAllWeapons;
_list = [];
for "_i" from 0 to ((count _weapons)-1) do
{
_item=(configFile >> "CfgWeapons" >> (_weapons select _i));
_type = getNumber (_item >> "type");
if(_type==1+4) then //primary slot and secondary slot weapon
{
_list set [count _list, configName _item];
};
};
_list
};
fnc_cfgWeapons_getLaunchers =
{
private ["_weapons","_list","_i","_item","_type"];
_weapons = [] call fnc_CfgWeapons_getAllWeapons;
_list = [];
for "_i" from 0 to ((count _weapons)-1) do
{
_item=(configFile >> "CfgWeapons" >> (_weapons select _i));
_type = getNumber (_item >> "type");
if(_type==4) then //secondary slot weapon
{
_list set [count _list, configName _item];
};
};
_list
};
fnc_cfgWeapons_getPistols =
{
private ["_weapons","_list","_i","_item","_type"];
_weapons = [] call fnc_CfgWeapons_getAllWeapons;
_list = [];
for "_i" from 0 to ((count _weapons)-1) do
{
_item=(configFile >> "CfgWeapons" >> (_weapons select _i));
_type = getNumber (_item >> "type");
if(_type==2) then //handgun slot weapon
{
_list set [count _list, configName _item];
};
};
_list
};
//get magazine types of a specific weapon
fnc_cfgWeapons_getMags =
{
private ["_wp","_muzzles","_mags","_mags1"];
_wp = _this select 0; //classname of weapon
//primary mags
_mags = getArray (configFile >> "CfgWeapons" >> _wp >> "magazines");
_muzzles = getArray (configFile >> "CfgWeapons" >> _wp >> "muzzles");
//secondary magazines
{
_mags1 = getArray (configFile >> "CfgWeapons" >> _wp >> _x >> "magazines");
{
if(!(_x in _mags))then{
_mags set [count _mags,_x];
};
}forEach _mags1;
}forEach _muzzles;
//return magazines
_mags
};
//get weapon associated items
//(no checking on whether weapon actually have "WeaponSlotsInfo" class
fnc_cfgWeapons_getItems =
{
private ["_wp","_itemType","_optics","_muzzles","_pointers","_list"];
_wp = _this select 0; //weapon classname
_itemType = _this select 1; //"Optics","Muzzles","Pointers","All"
_optics = getArray(configFile>>"CfgWeapons">>_wp>>"WeaponSlotsInfo">>"CowsSlot">>"compatibleitems");
_muzzles = getArray(configFile>>"CfgWeapons">>_wp>>"WeaponSlotsInfo">>"MuzzleSlot">>"compatibleitems");
_pointers = getArray(configFile>>"CfgWeapons">>_wp>>"WeaponSlotsInfo">>"PointerSlot">>"compatibleitems");
_list = [];
switch(_itemType)do
{
case "Optics" : {_list = _optics;};
case "Muzzles" : {_list = _muzzles;};
case "Pointers" : {_list = _pointers;};
case "All" : {_list = _optics+_muzzles+_pointers;};
default {_list = _optics+_muzzles+_pointers;};
};
_list
};
//get all grenades
fnc_cfgWeapons_getGrenades =
{
private ["_list"];
_list = ["Throw"] call fnc_cfgWeapons_getMags;
_list
};
//get all explosives
fnc_cfgWeapons_getExplosives =
{
private ["_list"];
_list = ["Put"] call fnc_cfgWeapons_getMags;
_list
};
//get picture
fnc_cfgWeapons_getPic =
{
getText(configFile >> "CfgWeapons" >> (_this select 0) >> "picture")
};
//get name
fnc_cfgWeapons_getName =
{
getText(configFile >> "CfgWeapons" >> (_this select 0) >> "displayName")
};
//get weapon type
fnc_cfgWeapons_getType =
{
getNumber (configFile>>"CfgWeapons">>(_this select 0)>>"type")
};
//check if class is weapon (personel weapon)
fnc_cfgWeapons_isWeapon =
{
private ["_isWeapon","_listWeapon"];
_isWeapon = false;
_listWeapon = [] call fnc_CfgWeapons_getAllWeapons;
_isWeapon = (_this select 0) in _listWeapon;
_isWeapon
};
//check if class is uniforms
fnc_cfgWeapons_isUniform =
{
private ["_isUniform","_listUniform"];
_isUniform = false;
_listUniform = ["Uniforms"] call fnc_CfgWeapons_getAllItems;
_isUniform = (_this select 0) in _listUniform;
_isUniform
};
//check if class is Vests
fnc_cfgWeapons_isVest =
{
private ["_isVest","_listVest"];
_isVest = false;
_listVest = ["Vests"] call fnc_CfgWeapons_getAllItems;
_isVest = (_this select 0) in _listVest;
_isVest
};
//check if class is Hats
fnc_cfgWeapons_isHat =
{
private ["_isHat","_listHat"];
_isHat = false;
_listHat = ["Hats"] call fnc_CfgWeapons_getAllItems;
_isHat = (_this select 0) in _listHat;
_isHat
};
//check if class is item (excluding weapons, unitforms, vests, hats and weaponItems)
fnc_cfgWeapons_isItem =
{
private ["_isItem","_listWeaponMods","_listItems","_listAllItems"];
_isItem = false;
_listAllItems = ["Others"] call fnc_CfgWeapons_getAllItems;
_listWeaponMods = ["WeaponMods"] call fnc_CfgWeapons_getAllItems;
_listItems = _listAllItems + _listWeaponMods;
_isItem = (_this select 0) in _listItems;
_isItem
};
//check if class is optics
fnc_cfgWeapons_isOptics =
{
private ["_isOptics","_listOptics"];
_isOptics = false;
_listOptics = ["Optics"] call fnc_CfgWeapons_getAllItems;
_isOptics = (_this select 0) in _listOptics;
_isOptics
};
//check if class is Muzzle
fnc_cfgWeapons_isMuzzle =
{
private ["_isMuzzle","_listMuzzles"];
_isMuzzle = false;
_listMuzzles = ["Muzzles"] call fnc_CfgWeapons_getAllItems;
_isMuzzle = (_this select 0) in _listMuzzles;
_isMuzzle
};
//check if class is Pointer
fnc_cfgWeapons_isPointer =
{
private ["_isPointer","_listPointers"];
_isPointer = false;
_listPointers = ["Pointers"] call fnc_CfgWeapons_getAllItems;
_isPointer = (_this select 0) in _listPointers;
_isPointer
};
//check if class is Grenade
fnc_cfgWeapons_isGrenade =
{
private ["_isGrenade","_listGrenade"];
_isGrenade = false;
_listGrenade = ["Grenade"] call fnc_CfgWeapons_getGrenades;
_isGrenade = (_this select 0) in _listGrenade;
_isGrenade
};
//check if class is Explosive
fnc_cfgWeapons_isExplosive =
{
private ["_isExplosive","_listExplosive"];
_isExplosive = false;
_listExplosive = ["Explosive"] call fnc_CfgWeapons_getExplosives;
_isExplosive = (_this select 0) in _listExplosive;
_isExplosive
};
//get container class string of the class (vest or uniforms)
fnc_cfgWeapons_getContainerClass =
{
getText(configFile >> "CfgWeapons">>(_this select 0)>>"ItemInfo">>"containerclass")
};
//get slots info of the weapon
fnc_cfgWeapons_getSlotInfo =
{
getArray (configFile >> "CfgWeapons" >> (_this select 0) >> "WeaponSlotsInfo" >> "allowedslots")
}; |