Knife Menu (За различни отбори)
-
Leonardo Da Vinci
Извън линия - Потребител
- Мнения: 67
- Регистриран на: 30 Мар 2018, 20:55
- Местоположение: #include <amxmodx>
Knife Menu (За различни отбори)
Привет. Нуждая се от knife menu. T и CT да имат различни модели ( да мога да променям директория от .sma ) и най-важното - да са на една команда. /knife например.
Betrayal stings like salt on a wound.
-
LoShIaA
Извън линия - Потребител
- Мнения: 323
- Регистриран на: 20 Окт 2016, 14:44
- Местоположение: Стара Загора
- Се отблагодари: 120 пъти
- Получена благодарност: 9 пъти
Knife Menu (За различни отбори)
viewtopic.php?f=21&t=1079 - разгледай това, предлага всичко, което искаш. Мислих, че има опция за избор кой отбор до кои скинове може да има достъп, но сега видях, че няма, но това може да се редактира от автора, ако прецени.
Едит: да усетих се ама късно, но не мога да си изтрия мнението, така че ако може някой да го премахне, защото е излишно.
Едит: да усетих се ама късно, но не мога да си изтрия мнението, така че ако може някой да го премахне, защото е излишно.
Последно промяна от LoShIaA на 19 Фев 2019, 16:34, променено общо 1 път.
-
Leonardo Da Vinci
Извън линия - Потребител
- Мнения: 67
- Регистриран на: 30 Мар 2018, 20:55
- Местоположение: #include <amxmodx>
Knife Menu (За различни отбори)
Именно за това съм подал заявка.LoShIaA написа: ↑19 Фев 2019, 16:03 viewtopic.php?f=21&t=1079 - разгледай това, предлага всичко, което искаш. Мислих, че има опция за избор кой отбор до кои скинове може да има достъп, но сега видях, че няма, но това може да се редактира от автора, ако прецени.
Betrayal stings like salt on a wound.
-
Bartian
Извън линия - Потребител
- Мнения: 280
- Регистриран на: 01 Сеп 2018, 14:43
- Се отблагодари: 65 пъти
- Получена благодарност: 78 пъти
Knife Menu (За различни отбори)
Предостави сма плъгина.
Думата "хакер" е неправилно използвана в смисъл на "компютърен хакер" от някои журналисти. Ние, хакерите, отказваме да приемем това тълкуване и продължаваме да означаваме с него смисъла на "някой, който обича да го програмира и да го ползва".
-
Leonardo Da Vinci
Извън линия - Потребител
- Мнения: 67
- Регистриран на: 30 Мар 2018, 20:55
- Местоположение: #include <amxmodx>
Knife Menu (За различни отбори)
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <crxknives_const>
#include <cromchat>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>
native crxranks_get_max_levels()
native crxranks_get_rank_by_level(level, buffer[], len)
native crxranks_get_user_level(id)
native crxranks_get_user_xp(id)
new const g_szNatives[][] =
{
"crxranks_get_max_levels",
"crxranks_get_rank_by_level",
"crxranks_get_user_level",
"crxranks_get_user_xp"
}
#if !defined m_pPlayer
const m_pPlayer = 41
#endif
#if !defined client_disconnected
#define client_disconnected client_disconnect
#endif
new const PLUGIN_VERSION[] = "3.0"
#if !defined MAX_AUTHID_LENGTH
const MAX_AUTHID_LENGTH = 35
#endif
#if !defined MAX_NAME_LENGTH
const MAX_NAME_LENGTH = 32
#endif
#if !defined MAX_PLAYERS
const MAX_PLAYERS = 32
#endif
enum
{
SOUND_NONE = 0,
SOUND_DEPLOY,
SOUND_HIT,
SOUND_HITWALL,
SOUND_SLASH,
SOUND_STAB
}
enum _:Knives
{
NAME[MAX_NAME_LENGTH],
V_MODEL[CRXKNIVES_MAX_SOUND_LENGTH],
P_MODEL[CRXKNIVES_MAX_SOUND_LENGTH],
DEPLOY_SOUND[CRXKNIVES_MAX_SOUND_LENGTH],
HIT_SOUND[CRXKNIVES_MAX_SOUND_LENGTH],
HITWALL_SOUND[CRXKNIVES_MAX_SOUND_LENGTH],
SLASH_SOUND[CRXKNIVES_MAX_SOUND_LENGTH],
STAB_SOUND[CRXKNIVES_MAX_SOUND_LENGTH],
SELECT_SOUND[CRXKNIVES_MAX_SOUND_LENGTH],
FLAG,
LEVEL,
XP,
SELECT_MESSAGES_NUM,
bool:SHOW_RANK,
bool:HAS_CUSTOM_SOUND,
Array:SELECT_MESSAGES,
Trie:ATTRIBUTES
}
enum _:CvarsReg
{
cvar_km_open_at_spawn,
cvar_km_save_choice,
cvar_km_only_dead,
cvar_km_select_message,
cvar_km_knife_only_skills
}
enum _:Cvars
{
km_open_at_spawn,
km_save_choice,
km_only_dead,
km_select_message,
km_knife_only_skills
}
new Array:g_aKnives,
bool:g_bFirstTime[MAX_PLAYERS + 1],
bool:g_bRankSystem,
bool:g_bGetLevel,
bool:g_bGetXP,
g_eCvars[Cvars],
g_eCvarsReg[CvarsReg],
g_eKnife[MAX_PLAYERS + 1][Knives],
g_szAuth[MAX_PLAYERS + 1][MAX_AUTHID_LENGTH],
g_iKnife[MAX_PLAYERS + 1],
g_fwdKnifeUpdated,
g_fwdAttemptChange,
g_iMenuFlags,
g_iKnivesNum,
g_iCallback,
g_iVault
public plugin_init()
{
register_plugin("Knife Models", PLUGIN_VERSION, "OciXCrom")
register_cvar("CRXKnifeModels", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
if(!g_iKnivesNum)
{
set_fail_state("No knives found in the configuration file.")
}
register_dictionary("KnifeModels.txt")
RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
register_forward(FM_EmitSound, "OnEmitSound")
RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnSelectKnife", 1)
register_clcmd("say /knife", "Cmd_Knife")
register_clcmd("say_team /knife", "Cmd_Knife")
register_clcmd("crxknives_select", "Cmd_Select", _, "<knife id>")
g_fwdKnifeUpdated = CreateMultiForward("crxknives_knife_updated", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL)
g_fwdAttemptChange = CreateMultiForward("crxknives_attempt_change", ET_STOP, FP_CELL, FP_CELL)
g_iCallback = menu_makecallback("CheckKnifeAccess")
g_eCvarsReg[cvar_km_open_at_spawn] = register_cvar("km_open_at_spawn", "0")
g_eCvarsReg[cvar_km_save_choice] = register_cvar("km_save_choice", "1")
g_eCvarsReg[cvar_km_only_dead] = register_cvar("km_only_dead", "0")
g_eCvarsReg[cvar_km_select_message] = register_cvar("km_select_message", "1")
g_eCvarsReg[cvar_km_knife_only_skills] = register_cvar("km_knife_only_skills", "1")
}
public plugin_precache()
{
if(LibraryExists("crxranks", LibType_Library))
{
g_bRankSystem = true
}
g_aKnives = ArrayCreate(Knives)
ReadFile()
}
public plugin_cfg()
{
g_eCvars[km_save_choice] = get_pcvar_num(g_eCvarsReg[cvar_km_save_choice])
g_eCvars[km_open_at_spawn] = get_pcvar_num(g_eCvarsReg[cvar_km_open_at_spawn])
g_eCvars[km_only_dead] = get_pcvar_num(g_eCvarsReg[cvar_km_only_dead])
g_eCvars[km_select_message] = get_pcvar_num(g_eCvarsReg[cvar_km_select_message])
g_eCvars[km_knife_only_skills] = get_pcvar_num(g_eCvarsReg[cvar_km_knife_only_skills])
if(g_eCvars[km_save_choice])
{
g_iVault = nvault_open("KnifeModels")
}
}
public plugin_end()
{
for(new eKnife[Knives], i; i < g_iKnivesNum; i++)
{
ArrayGetArray(g_aKnives, i, eKnife)
ArrayDestroy(eKnife[SELECT_MESSAGES])
TrieDestroy(eKnife[ATTRIBUTES])
}
ArrayDestroy(g_aKnives)
if(g_eCvars[km_save_choice])
{
nvault_close(g_iVault)
}
}
ReadFile()
{
new szFilename[256]
get_configsdir(szFilename, charsmax(szFilename))
add(szFilename, charsmax(szFilename), "/KnifeModels.ini")
new iFilePointer = fopen(szFilename, "rt")
if(iFilePointer)
{
new szData[160], szKey[32], szValue[128], szSound[128], iMaxLevels
new eKnife[Knives], bool:bCustom
if(g_bRankSystem)
{
iMaxLevels = crxranks_get_max_levels()
}
while(!feof(iFilePointer))
{
fgets(iFilePointer, szData, charsmax(szData))
trim(szData)
switch(szData[0])
{
case EOS, '#', ';': continue
case '[':
{
if(szData[strlen(szData) - 1] == ']')
{
if(g_iKnivesNum)
{
push_knife(eKnife)
}
g_iKnivesNum++
replace(szData, charsmax(szData), "[", "")
replace(szData, charsmax(szData), "]", "")
copy(eKnife[NAME], charsmax(eKnife[NAME]), szData)
eKnife[V_MODEL][0] = EOS
eKnife[P_MODEL][0] = EOS
eKnife[DEPLOY_SOUND][0] = EOS
eKnife[HIT_SOUND][0] = EOS
eKnife[HITWALL_SOUND][0] = EOS
eKnife[SLASH_SOUND][0] = EOS
eKnife[STAB_SOUND][0] = EOS
eKnife[SELECT_SOUND][0] = EOS
eKnife[FLAG] = ADMIN_ALL
eKnife[HAS_CUSTOM_SOUND] = false
eKnife[SELECT_MESSAGES_NUM] = 0
eKnife[SELECT_MESSAGES] = _:ArrayCreate(CRXKNIVES_MAX_MESSAGE_LENGTH)
eKnife[ATTRIBUTES] = _:TrieCreate()
if(g_bRankSystem)
{
eKnife[LEVEL] = 0
eKnife[SHOW_RANK] = false
eKnife[XP] = 0
}
static const ATTRIBUTE_NAME[] = "NAME"
TrieSetString(eKnife[ATTRIBUTES], ATTRIBUTE_NAME, szData)
}
else continue
}
default:
{
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
trim(szKey); trim(szValue)
bCustom = true
TrieSetString(eKnife[ATTRIBUTES], szKey, szValue)
if(equal(szKey, "FLAG"))
{
eKnife[FLAG] = read_flags(szValue)
g_iMenuFlags |= eKnife[FLAG]
}
else if(equal(szKey, "LEVEL") && g_bRankSystem)
{
eKnife[LEVEL] = clamp(str_to_num(szValue), 0, iMaxLevels)
if(!g_bGetLevel)
{
g_bGetLevel = true
}
}
else if(equal(szKey, "SHOW_RANK") && g_bRankSystem)
{
eKnife[SHOW_RANK] = _:clamp(str_to_num(szValue), false, true)
}
else if(equal(szKey, "XP") && g_bRankSystem)
{
eKnife[XP] = _:clamp(str_to_num(szValue), 0)
if(!g_bGetXP)
{
g_bGetXP = true
}
}
else if(equal(szKey, "V_MODEL"))
{
copy(eKnife[V_MODEL], charsmax(eKnife[V_MODEL]), szValue)
}
else if(equal(szKey, "P_MODEL"))
{
copy(eKnife[P_MODEL], charsmax(eKnife[P_MODEL]), szValue)
}
else if(equal(szKey, "DEPLOY_SOUND"))
{
copy(eKnife[DEPLOY_SOUND], charsmax(eKnife[DEPLOY_SOUND]), szValue)
}
else if(equal(szKey, "HIT_SOUND"))
{
copy(eKnife[HIT_SOUND], charsmax(eKnife[HIT_SOUND]), szValue)
}
else if(equal(szKey, "HITWALL_SOUND"))
{
copy(eKnife[HITWALL_SOUND], charsmax(eKnife[HITWALL_SOUND]), szValue)
}
else if(equal(szKey, "SLASH_SOUND"))
{
copy(eKnife[SLASH_SOUND], charsmax(eKnife[SLASH_SOUND]), szValue)
}
else if(equal(szKey, "STAB_SOUND"))
{
copy(eKnife[STAB_SOUND], charsmax(eKnife[STAB_SOUND]), szValue)
}
else if(equal(szKey, "SELECT_SOUND"))
{
bCustom = false
copy(eKnife[SELECT_SOUND], charsmax(eKnife[SELECT_SOUND]), szValue)
}
else if(equal(szKey, "SELECT_MESSAGE"))
{
ArrayPushString(eKnife[SELECT_MESSAGES], szValue)
eKnife[SELECT_MESSAGES_NUM]++
}
else continue
static const szModelArg[] = "_MODEL"
static const szSoundArg[] = "_SOUND"
if(contain(szKey, szModelArg) != -1)
{
if(!file_exists(szValue))
{
log_amx("ERROR: model ^"%s^" not found!", szValue)
}
else
{
precache_model(szValue)
}
}
else if(contain(szKey, szSoundArg) != -1)
{
formatex(szSound, charsmax(szSound), "sound/%s", szValue)
if(!file_exists(szSound))
{
log_amx("ERROR: sound ^"%s^" not found!", szSound)
}
else
{
precache_sound(szValue)
}
if(bCustom)
{
eKnife[HAS_CUSTOM_SOUND] = true
}
}
}
}
}
if(g_iKnivesNum)
{
push_knife(eKnife)
}
fclose(iFilePointer)
}
}
public client_connect(id)
{
g_bFirstTime[id] = true
ArrayGetArray(g_aKnives, 0, g_eKnife[id])
g_iKnife[id] = 0
new iReturn
ExecuteForward(g_fwdKnifeUpdated, iReturn, id, g_iKnife[id], true)
if(g_eCvars[km_save_choice])
{
get_user_authid(id, g_szAuth[id], charsmax(g_szAuth[]))
use_vault(id, false)
}
}
public client_disconnected(id)
{
if(g_eCvars[km_save_choice])
{
use_vault(id, true)
}
}
public OnEmitSound(id, iChannel, const szSample[])
{
if(!is_user_connected(id) || !g_eKnife[id][HAS_CUSTOM_SOUND] || !is_knife_sound(szSample))
{
return FMRES_IGNORED
}
switch(detect_knife_sound(szSample))
{
case SOUND_DEPLOY: if(g_eKnife[id][DEPLOY_SOUND][0]) { play_knife_sound(id, g_eKnife[id][DEPLOY_SOUND][0]); return FMRES_SUPERCEDE; }
case SOUND_HIT: if(g_eKnife[id][HIT_SOUND][0]) { play_knife_sound(id, g_eKnife[id][HIT_SOUND][0]); return FMRES_SUPERCEDE; }
case SOUND_HITWALL: if(g_eKnife[id][HITWALL_SOUND][0]) { play_knife_sound(id, g_eKnife[id][HITWALL_SOUND][0]); return FMRES_SUPERCEDE; }
case SOUND_SLASH: if(g_eKnife[id][SLASH_SOUND][0]) { play_knife_sound(id, g_eKnife[id][SLASH_SOUND][0]); return FMRES_SUPERCEDE; }
case SOUND_STAB: if(g_eKnife[id][STAB_SOUND][0]) { play_knife_sound(id, g_eKnife[id][STAB_SOUND][0]); return FMRES_SUPERCEDE; }
}
return FMRES_IGNORED
}
public Cmd_Knife(id)
{
if(g_eCvars[km_only_dead] && is_user_alive(id))
{
CC_SendMessage(id, "%l %l", "KM_CHAT_PREFIX", "KM_ONLY_DEAD")
return PLUGIN_HANDLED
}
static eKnife[Knives]
new szTitle[128], szItem[128], iLevel, iXP
formatex(szTitle, charsmax(szTitle), "%L", id, "KM_MENU_TITLE")
if(g_bGetLevel)
{
iLevel = crxranks_get_user_level(id)
}
if(g_bGetXP)
{
iXP = crxranks_get_user_xp(id)
}
new iMenu = menu_create(szTitle, "MenuHandler")
for(new iFlags = get_user_flags(id), i; i < g_iKnivesNum; i++)
{
ArrayGetArray(g_aKnives, i, eKnife)
copy(szItem, charsmax(szItem), eKnife[NAME])
if(g_bRankSystem)
{
if(eKnife[LEVEL] && iLevel < eKnife[LEVEL])
{
if(eKnife[SHOW_RANK])
{
static szRank[32]
crxranks_get_rank_by_level(eKnife[LEVEL], szRank, charsmax(szRank))
format(szItem, charsmax(szItem), "%s %L", szItem, id, "KM_MENU_RANK", szRank)
}
else
{
format(szItem, charsmax(szItem), "%s %L", szItem, id, "KM_MENU_LEVEL", eKnife[LEVEL])
}
}
if(eKnife[XP] && iXP < eKnife[XP])
{
format(szItem, charsmax(szItem), "%s %L", szItem, id, "KM_MENU_XP", eKnife[XP])
}
}
if(eKnife[FLAG] != ADMIN_ALL && !(iFlags & eKnife[FLAG]))
{
format(szItem, charsmax(szItem), "%s %L", szItem, id, "KM_MENU_VIP_ONLY")
}
if(g_iKnife[id] == i)
{
format(szItem, charsmax(szItem), "%s %L", szItem, id, "KM_MENU_SELECTED")
}
menu_additem(iMenu, szItem, eKnife[NAME], eKnife[FLAG], g_iCallback)
}
if(menu_pages(iMenu) > 1)
{
formatex(szItem, charsmax(szItem), "%s%L", szTitle, id, "KM_MENU_TITLE_PAGE")
menu_setprop(iMenu, MPROP_TITLE, szItem)
}
menu_display(id, iMenu)
return PLUGIN_HANDLED
}
public Cmd_Select(id, iLevel, iCid)
{
if(!cmd_access(id, iLevel, iCid, 2))
{
return PLUGIN_HANDLED
}
if(g_eCvars[km_only_dead] && is_user_alive(id))
{
CC_SendMessage(id, "%l %l", "KM_CHAT_PREFIX", "KM_ONLY_DEAD")
return PLUGIN_HANDLED
}
new szKnife[4]
read_argv(1, szKnife, charsmax(szKnife))
new iKnife = str_to_num(szKnife)
if(!is_knife_valid(iKnife))
{
console_print(id, "%l", "KM_INVALID_KNIFE", g_iKnivesNum - 1)
return PLUGIN_HANDLED
}
if(!has_knife_access(id, iKnife))
{
console_print(id, "%l", "KM_NO_ACCESS")
return PLUGIN_HANDLED
}
select_knife(id, iKnife)
return PLUGIN_HANDLED
}
public MenuHandler(id, iMenu, iItem)
{
if(g_eCvars[km_only_dead] && is_user_alive(id))
{
CC_SendMessage(id, "%l %l", "KM_CHAT_PREFIX", "KM_ONLY_DEAD")
goto @MENU_DESTROY
}
if(!is_user_connected(id))
{
goto @MENU_DESTROY
}
if(iItem != MENU_EXIT)
{
select_knife(id, iItem)
}
@MENU_DESTROY:
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
select_knife(id, iKnife)
{
new iReturn
ExecuteForward(g_fwdAttemptChange, iReturn, id, iKnife)
if(iReturn == PLUGIN_HANDLED)
{
return
}
g_iKnife[id] = iKnife
ArrayGetArray(g_aKnives, iKnife, g_eKnife[id])
ExecuteForward(g_fwdKnifeUpdated, iReturn, id, iKnife, false)
if(is_user_alive(id) && get_user_weapon(id) == CSW_KNIFE)
{
refresh_knife_model(id)
}
if(g_eCvars[km_select_message])
{
CC_SendMessage(id, "%l %l", "KM_CHAT_PREFIX", "KM_CHAT_SELECTED", g_eKnife[id][NAME])
}
if(g_eKnife[id][SELECT_MESSAGES_NUM])
{
for(new i; i < g_eKnife[id][SELECT_MESSAGES_NUM]; i++)
{
CC_SendMessage(id, "%a", ArrayGetStringHandle(g_eKnife[id][SELECT_MESSAGES], i))
}
}
if(g_eKnife[id][SELECT_SOUND][0])
{
play_knife_sound(id, g_eKnife[id][SELECT_SOUND])
}
}
public CheckKnifeAccess(id, iMenu, iItem)
{
return ((g_iKnife[id] == iItem) || !has_knife_access(id, iItem)) ? ITEM_DISABLED : ITEM_ENABLED
}
public OnPlayerSpawn(id)
{
if(is_user_alive(id) && g_eCvars[km_open_at_spawn] && !g_iKnife[id] && g_bFirstTime[id] && (g_iMenuFlags & ADMIN_USER || get_user_flags(id) & g_iMenuFlags))
{
g_bFirstTime[id] = false
Cmd_Knife(id)
}
}
public OnSelectKnife(iEnt)
{
new id = get_pdata_cbase(iEnt, m_pPlayer, 4)
if(is_user_connected(id))
{
refresh_knife_model(id)
}
}
refresh_knife_model(const id)
{
set_pev(id, pev_viewmodel2, g_eKnife[id][V_MODEL])
set_pev(id, pev_weaponmodel2, g_eKnife[id][P_MODEL])
}
push_knife(eKnife[Knives])
{
if(!eKnife[V_MODEL][0])
{
copy(eKnife[V_MODEL], charsmax(eKnife[V_MODEL]), CRXKNIVES_DEFAULT_V)
}
if(!eKnife[P_MODEL][0])
{
copy(eKnife[P_MODEL], charsmax(eKnife[P_MODEL]), CRXKNIVES_DEFAULT_P)
}
if(!eKnife[FLAG])
{
g_iMenuFlags |= ADMIN_USER
}
ArrayPushArray(g_aKnives, eKnife)
}
bool:has_knife_access(const id, const iKnife)
{
static eKnife[Knives]
ArrayGetArray(g_aKnives, iKnife, eKnife)
if(g_bRankSystem)
{
if(eKnife[LEVEL] && crxranks_get_user_level(id) < eKnife[LEVEL])
{
return false
}
if(eKnife[XP] && crxranks_get_user_xp(id) < eKnife[XP])
{
return false
}
}
if(eKnife[FLAG] != ADMIN_ALL && !(get_user_flags(id) & eKnife[FLAG]))
{
return false
}
return true
}
bool:is_knife_sound(const szSample[])
{
return bool:equal(szSample[8], "kni", 3)
}
detect_knife_sound(const szSample[])
{
static iSound
iSound = SOUND_NONE
if(equal(szSample, "weapons/knife_deploy1.wav"))
{
iSound = SOUND_DEPLOY
}
else if(equal(szSample[14], "hit", 3))
{
iSound = szSample[17] == 'w' ? SOUND_HITWALL : SOUND_HIT
}
else if(equal(szSample[14], "sla", 3))
{
iSound = SOUND_SLASH
}
else if(equal(szSample[14], "sta", 3))
{
iSound = SOUND_STAB
}
return iSound
}
use_vault(const id, const bool:bSave)
{
if(bSave)
{
new szData[4]
num_to_str(g_iKnife[id], szData, charsmax(szData))
nvault_set(g_iVault, g_szAuth[id], szData)
}
else
{
new iKnife
iKnife = nvault_get(g_iVault, g_szAuth[id])
if(!is_knife_valid(iKnife))
{
iKnife = 0
}
else if(has_knife_access(id, iKnife))
{
g_iKnife[id] = iKnife
new iReturn
ArrayGetArray(g_aKnives, iKnife, g_eKnife[id])
ExecuteForward(g_fwdKnifeUpdated, iReturn, id, iKnife, false)
if(is_user_alive(id) && get_user_weapon(id) == CSW_KNIFE)
{
refresh_knife_model(id)
}
}
}
}
play_knife_sound(const id, const szSound[])
{
engfunc(EngFunc_EmitSound, id, CHAN_AUTO, szSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
bool:is_knife_valid(const iKnife)
{
return 0 <= iKnife < g_iKnivesNum
}
public plugin_natives()
{
register_library("crxknives")
register_native("crxknives_can_use_skill", "_crxknives_can_use_skill")
register_native("crxknives_get_attribute_int", "_crxknives_get_attribute_int")
register_native("crxknives_get_attribute_float", "_crxknives_get_attribute_float")
register_native("crxknives_get_attribute_str", "_crxknives_get_attribute_str")
register_native("crxknives_get_knives_num", "_crxknives_get_knives_num")
register_native("crxknives_get_user_knife", "_crxknives_get_user_knife")
register_native("crxknives_has_knife_access", "_crxknives_has_knife_access")
register_native("crxknives_is_knife_valid", "_crxknives_is_knife_valid")
set_native_filter("native_filter")
}
public native_filter(const szNative[], id, iTrap)
{
if(!iTrap)
{
static i
for(i = 0; i < sizeof(g_szNatives); i++)
{
if(equal(szNative, g_szNatives[i]))
{
return PLUGIN_HANDLED
}
}
}
return PLUGIN_CONTINUE
}
public bool:_crxknives_can_use_skill(iPlugin, iParams)
{
return !g_eCvars[km_knife_only_skills] || (get_user_weapon(get_param(1)) == CSW_KNIFE)
}
public bool:_crxknives_get_attribute_int(iPlugin, iParams)
{
static szAttribute[MAX_NAME_LENGTH], szValue[CRXKNIVES_MAX_ATTRIBUTE_LENGTH], id
get_string(2, szAttribute, charsmax(szAttribute))
id = get_param(1)
if(!get_param(4))
{
if(!is_knife_valid(id))
{
return false
}
static eKnife[Knives]
ArrayGetArray(g_aKnives, id, eKnife)
if(!TrieKeyExists(eKnife[ATTRIBUTES], szAttribute))
{
return false
}
TrieGetString(eKnife[ATTRIBUTES], szAttribute, szValue, charsmax(szValue))
goto @SET_ATTRIBUTE
}
if(!TrieKeyExists(g_eKnife[id][ATTRIBUTES], szAttribute))
{
return false
}
TrieGetString(g_eKnife[id][ATTRIBUTES], szAttribute, szValue, charsmax(szValue))
@SET_ATTRIBUTE:
set_param_byref(3, str_to_num(szValue))
return true
}
public bool:_crxknives_get_attribute_float(iPlugin, iParams)
{
static szAttribute[MAX_NAME_LENGTH], szValue[CRXKNIVES_MAX_ATTRIBUTE_LENGTH], id
get_string(2, szAttribute, charsmax(szAttribute))
id = get_param(1)
if(!get_param(4))
{
if(!is_knife_valid(id))
{
return false
}
static eKnife[Knives]
ArrayGetArray(g_aKnives, id, eKnife)
if(!TrieKeyExists(eKnife[ATTRIBUTES], szAttribute))
{
return false
}
TrieGetString(eKnife[ATTRIBUTES], szAttribute, szValue, charsmax(szValue))
goto @SET_ATTRIBUTE
}
if(!TrieKeyExists(g_eKnife[id][ATTRIBUTES], szAttribute))
{
return false
}
TrieGetString(g_eKnife[id][ATTRIBUTES], szAttribute, szValue, charsmax(szValue))
@SET_ATTRIBUTE:
set_float_byref(3, str_to_float(szValue))
return true
}
public bool:_crxknives_get_attribute_str(iPlugin, iParams)
{
static szAttribute[MAX_NAME_LENGTH], szValue[CRXKNIVES_MAX_ATTRIBUTE_LENGTH], id
get_string(2, szAttribute, charsmax(szAttribute))
id = get_param(1)
if(!get_param(5))
{
if(!is_knife_valid(id))
{
return false
}
static eKnife[Knives]
ArrayGetArray(g_aKnives, id, eKnife)
if(!TrieKeyExists(eKnife[ATTRIBUTES], szAttribute))
{
return false
}
TrieGetString(eKnife[ATTRIBUTES], szAttribute, szValue, charsmax(szValue))
goto @SET_ATTRIBUTE
}
if(!TrieKeyExists(g_eKnife[id][ATTRIBUTES], szAttribute))
{
return false
}
TrieGetString(g_eKnife[id][ATTRIBUTES], szAttribute, szValue, charsmax(szValue))
@SET_ATTRIBUTE:
set_string(3, szValue, get_param(4))
return true
}
public _crxknives_get_knives_num(iPlugin, iParams)
{
return g_iKnivesNum
}
public _crxknives_get_user_knife(iPlugin, iParams)
{
return g_iKnife[get_param(1)]
}
public bool:_crxknives_has_knife_access(iPlugin, iParams)
{
return has_knife_access(get_param(1), get_param(2))
}
public bool:_crxknives_is_knife_valid(iPlugin, iParams)
{
return is_knife_valid(get_param(1))
}
Betrayal stings like salt on a wound.
-
OciXCrom
Извън линия - Администратор
- Мнения: 7206
- Регистриран на: 06 Окт 2016, 19:20
- Местоположение: /resetscore
- Се отблагодари: 117 пъти
- Получена благодарност: 1295 пъти
- Обратна връзка:
Knife Menu (За различни отбори)
Реално този плъгин е най-добрият който можеш да намериш, или поне аз не съм виждал друг подобен. Евентуално ще добавя опция за слагане на отбор, обаче не знам кога ще стане, тъй като е малко по-сложно да се измисли самият начин по който може да се направи.
-
Leonardo Da Vinci
Извън линия - Потребител
- Мнения: 67
- Регистриран на: 30 Мар 2018, 20:55
- Местоположение: #include <amxmodx>
Knife Menu (За различни отбори)
Разбирам. Ами добре тогава, може темата да се заключи.
Betrayal stings like salt on a wound.
-
- Подобни теми
- Отговори
- Преглеждания
- Последно мнение
-
- 1 Отговори
- 2277 Преглеждания
-
Последно мнение от erra1881
-
- 11 Отговори
- 3395 Преглеждания
-
Последно мнение от summertime vibes
-
- 0 Отговори
- 780 Преглеждания
-
Последно мнение от L.O.F.I
-
- 7 Отговори
- 1193 Преглеждания
-
Последно мнение от Amine
-
- 12 Отговори
- 4410 Преглеждания
-
Последно мнение от K!lLAlL
-
- 3 Отговори
- 1746 Преглеждания
-
Последно мнение от OciXCrom
-
- 0 Отговори
- 1104 Преглеждания
-
Последно мнение от tom1k
Кой е на линия
Потребители разглеждащи този форум: 0 регистрирани и 25 госта