// Unit behaviors
// Behavior categories
const int c_unitBehaviorFlagPermanent = 0;
const int c_unitBehaviorFlagRestorable = 1;
const int c_unitBehaviorFlagTemporary = 2;
// Behavior buff flags
const int c_unitBehaviorFlagChanneled = 3;
const int c_unitBehaviorFlagChanneling = 4;
const int c_unitBehaviorFlagCountdown = 5;
const int c_unitBehaviorFlagExtend = 6;
const int c_unitBehaviorFlagDisableBuilding = 7;
const int c_unitBehaviorFlagRemoveDamageResponseExhausted = 8;
const int c_unitBehaviorFlagRefreshStack = 9;
// Behavior info flags
const int c_unitBehaviorFlagHidden = 10;
// Behavior count
const int c_unitBehaviorCountAll = -1;
native void UnitBehaviorAdd (unit inUnit, string inBehavior, unit inCaster, int inCount);
native void UnitBehaviorAddPlayer (unit inUnit, string inBehavior, int inPlayer, int inCount);
native int UnitBehaviorCountAll (unit inUnit);
native int UnitBehaviorCount (unit inUnit, string inBehavior);
native fixed UnitBehaviorDuration (unit inUnit, string inBehavior);
native void UnitBehaviorSetDuration (unit inUnit, string inBehavior, fixed inDuration);
native bool UnitBehaviorEnabled (unit inUnit, string inBehavior);
native string UnitBehaviorGet (unit inUnit, int inIndex);
native bool UnitHasBehavior (unit inUnit, string inBehavior);
native void UnitBehaviorRemove (unit inUnit, string inBehavior, int inCount);
native void UnitBehaviorRemovePlayer (unit inUnit, string inBehavior, int inPlayer, int inCount);
native void UnitBehaviorTransfer (unit inSource, unit inDest, string inBehavior, int inCount);
native bool UnitBehaviorHasFlag (string inBehavior, int inCategory);
native void UnitBehaviorRemoveCategory (unit inUnit, int inCategory);
native void UnitBehaviorAddChargeRegen (unit inUnit, string inBehavior, string inCharge, fixed inVal);
native fixed UnitBehaviorGetChargeRegen (unit inUnit, string inBehavior, string inCharge);
native void UnitBehaviorAddChargeUsed (unit inUnit, string inBehavior, string inCharge, fixed inVal);
native fixed UnitBehaviorGetChargeUsed (unit inUnit, string inBehavior, string inCharge);
native void UnitBehaviorAddCooldown (unit inUnit, string inBehavior, string inCooldown, fixed inVal);
native fixed UnitBehaviorGetCooldown (unit inUnit, string inBehavior, string inCooldown);
native void UnitXPGainEnable (unit inUnit, string inBehavior, bool inEnable);
// Unit markers
native marker UnitMarker (unit inUnit, int inIndex);
native void UnitMarkerAdd (unit inUnit, marker inMarker);
native int UnitMarkerCount (unit inUnit, marker inMarker);
native void UnitMarkerRemove (unit inUnit, marker inMarker);