Skip to content

Commit bcd9b0f

Browse files
committed
Impl CWAPI_Weapons_GetAbilityParams native
1 parent b88b486 commit bcd9b0f

4 files changed

Lines changed: 48 additions & 0 deletions

File tree

amxmodx/scripting/Cwapi/Core/CWeapons/Abilities.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ T_WAbility_Unit:WAbilityUnit_LoadFromJsonObject(const JSON:jAbilityUnit, const T
141141
Ability[WAbility_Params], jAbilityUnit, AbilityUnit[WAbilityUnit_Params],
142142
iErrType, sErrParamName, charsmax(sErrParamName)
143143
);
144+
TrieSetCell(AbilityUnit[WAbilityUnit_Params], CWAPI_ABILITY_HANDLER_PARAM_KEY, iAbility);
144145

145146
if (iErrType != ParamsReadError_None) {
146147
// TODO: Написать обёртку для вывода ошибки параметров c учётом её типа

amxmodx/scripting/Cwapi/Core/CWeapons/Natives.inc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ CWeapons_Natives_Reg() {
2121
// Natives_Reg("Weapons_GetAbilityParams");
2222
Natives_Reg("Weapons_GetAttribute");
2323
Natives_Reg("Weapons_EmitDamage");
24+
register_native("CWAPI_Weapons_GetAbilityParams", "@CWAPI_Weapons_GetAbilityParams");
2425
}
2526

2627
T_CustomWeapon:@_Weapons_Find() {
@@ -158,3 +159,12 @@ Float:@_Weapons_EmitDamage() {
158159
bool:get_param(Arg_IgnoreDamageMult)
159160
);
160161
}
162+
163+
Trie:@CWAPI_Weapons_GetAbilityParams() {
164+
enum {Arg_WeaponIndex = 1, Arg_Ability}
165+
166+
return CWeapons_GetAbilityParams(
167+
T_CustomWeapon:get_param(Arg_WeaponIndex),
168+
T_WeaponAbility:get_param(Arg_Ability)
169+
);
170+
}

amxmodx/scripting/Cwapi/Core/CustomWeapons.inc

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,35 @@ Float:CWeapons_EmitDamage(
347347
return res > 0 ? finalDamage : 0.0;
348348
}
349349

350+
Trie:CWeapons_GetAbilityParams(const T_CustomWeapon:weaponIndex, const T_WeaponAbility:ability) {
351+
static weaponObject[S_CustomWeapon];
352+
CWeapons_Get(weaponIndex, weaponObject);
353+
354+
if (weaponObject[CWeapon_Abilities] == Invalid_Array) {
355+
return Invalid_Trie;
356+
}
357+
358+
for (new i = 0, ii = ArraySize(weaponObject[CWeapon_Abilities]); i < ii; ++i) {
359+
new T_WAbility_Unit:unit = ArrayGetCell(weaponObject[CWeapon_Abilities], i);
360+
361+
if (unit == Invalid_WAbility_Unit) {
362+
continue;
363+
}
364+
365+
static unitObject[S_WAbility_Unit];
366+
WAbilityUnit_Get(unit, unitObject);
367+
368+
if (unitObject[WAbilityUnit_Ability] != ability) {
369+
continue;
370+
}
371+
372+
// todo стоит ли клонировать trie?
373+
return unitObject[WAbilityUnit_Params];
374+
}
375+
376+
return Invalid_Trie;
377+
}
378+
350379
T_CustomWeapon:CWeapons_LoadFromCfg(const sFile[], const bool:bAbsolutePath = false) {
351380
new JSON:jWeapon = CfgUtils_GetJson(sFile, true, bAbsolutePath);
352381

amxmodx/scripting/include/cwapi.inc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ stock const CWAPI_WEAPON_PARAM_TYPE_NAME[] = "CWAPI-Weapon";
4444
*/
4545
stock const CWAPI_GIVE_TYPE_PARAM_TYPE_NAME[] = "CWAPI-GiveType";
4646

47+
/**
48+
* Ключ параметра способности, в котором хранится хендлер этой способности.
49+
*/
50+
stock const CWAPI_ABILITY_HANDLER_PARAM_KEY[] = "_ability_handler";
51+
4752

4853
/**
4954
* Максимальная длина названия способности.
@@ -629,6 +634,9 @@ native Float:CWAPI_Weapons_EmitDamage(
629634
const bool:ignoreDamageMult = false
630635
);
631636

637+
// todo docs
638+
native CWAPI_Weapons_GetAbilityParams(const T_CustomWeapon:weaponIndex, const T_WeaponAbility:ability);
639+
632640
/**
633641
* Регистрация способности кастомного оружия.
634642
*

0 commit comments

Comments
 (0)