Sziasztok  Megtaláltam az oldalon ezt a knife módot:
Kód: #include <amxmodx> #include <fakemeta> #include <hamsandwich>
new const KNIFE_VERSION[] = "2.2" new const KNIFE_FILE[] = "addons/amxmodx/configs/knifes.ini"
#define KNIFE_NAME 0 #define KNIFE_P_MODEL 1 #define KNIFE_V_MODEL 2 #define KNIFE_ACCESS 12
new const g_TypeList[][] = { "NAME", "P_MODEL", "V_MODEL", "DEPLOY", "HIT1", "HIT2", "HIT3", "HIT4",\ "HITWALL", "SLASH1", "SLASH2", "STAB", "ACCESS" }
new const g_Default_Knife[][] = { "Default", "models/p_knife.mdl", "models/v_knife.mdl", "weapons/knife_deploy1.wav",\ "weapons/knife_hit1.wav", "weapons/knife_hit2.wav", "weapons/knife_hit3.wav", "weapons/knife_hit4.wav",\ "weapons/knife_hitwall1.wav", "weapons/knife_slash1.wav", "weapons/knife_slash2.wav",\ "weapons/knife_stab.wav", "" }
new Array:gx_InfoData[13] new Array:gx_InfoCommands new g_PlrModelNum[33]
new bool:g_bIsAlive[33]
#define m_pPlayer 41 #define IsValidPlr(%1) ( 1 <= %1 <= g_iMaxPlayers )
new g_cvar_menu_drop, g_cvar_enable, g_cvar_menuname[64], g_cvar_no4you[32], g_cvar_current[32] new g_iMaxPlayers
public plugin_precache() { register_plugin("Knife Selector", KNIFE_VERSION, "ReymonARG") register_cvar("knife_selector", KNIFE_VERSION, FCVAR_SPONLY | FCVAR_SERVER) g_iMaxPlayers = get_maxplayers() static i for( i = 0; i < 13; i++) { gx_InfoData[i] = ArrayCreate(128, 1) } gx_InfoCommands = ArrayCreate(32, 1) load_knifes_list() register_clcmd("say", "Hook_Say") register_clcmd("say_team", "Hook_Say") RegisterHam(Ham_Item_Deploy, "weapon_knife", "weapon_change", 1) RegisterHam(Ham_CS_Item_CanDrop, "weapon_knife", "weapon_drop", 1) RegisterHam(Ham_Spawn, "player", "fw_Spawn_post", 1) RegisterHam(Ham_Killed, "player", "fw_Killed_post", 1) register_forward(FM_EmitSound, "fw_EmitSound") register_forward(FM_ClientPutInServer, "fw_ClientPutInServer") register_forward(FM_ClientDisconnect, "fw_Killed_post") }
/*================================================================================================== [Stock`s & Some Func`s :D] ==================================================================================================*/ stock load_knifes_list() { static StrData[150], StrLeft[32], StrRight[128], i, InfoNum, len, len2 static f, bool:IsInSettings; IsInSettings = true if( !(f = fopen(KNIFE_FILE, "rt") ) ) return set_fail_state("Plugin can´t Found Knife File") for( i = 0; i < 13; i++) ArrayPushString(gx_InfoData[i], g_Default_Knife[i]) while( !feof(f) ) { fgets(f, StrData, 149) if( StrData[0] == '/' && StrData[1] == '/' || StrData[0] == ';' || StrData[0] == ' ' || StrData[0] == '^n') continue replace(StrData, 149, "^n", "") if( StrData[0] != '[' && IsInSettings ) { strtok(StrData, StrLeft, 31, StrRight, 127, '=') trim(StrLeft); trim(StrRight) if( equali(StrLeft, "ENABLE") ) { g_cvar_enable = str_to_num(StrRight) } else if( equali(StrLeft, "MENU_IN_DROP") ) { g_cvar_menu_drop = str_to_num(StrRight) } else if( equali(StrLeft, "MENU_NAME") ) { copy(g_cvar_menuname, 63, StrRight) remove_quotes(g_cvar_no4you) replace_menu_colors(g_cvar_menuname, 63) } else if( equali(StrLeft, "NO_FOR_YOU") ) { copy(g_cvar_no4you, 31, StrRight) remove_quotes(g_cvar_no4you) replace_menu_colors(g_cvar_no4you, 31) } else if( equali(StrLeft, "CURRENT") ) { copy(g_cvar_current, 31, StrRight) remove_quotes(g_cvar_current) replace_menu_colors(g_cvar_current, 31) } else if( equali(StrLeft, "COMMANDS") ) { while( StrRight[0] != 0 && strtok(StrRight, StrLeft, 31, StrRight, 127, ',') ) { trim(StrLeft); trim(StrRight); remove_quotes(StrLeft) ArrayPushString(gx_InfoCommands, StrLeft) } } continue } else if( StrData[0] == '[' && StrData[1] == '/' && IsInSettings ) { IsInSettings = false } else if( !IsInSettings ) { if( StrData[0] == '[' ) { len = ArraySize(gx_InfoData[KNIFE_NAME]) for( i = 1; i < 13; i++) { len2 = ArraySize(gx_InfoData[i] ) while( len > len2 ) { ArrayPushCell(gx_InfoData[i], 0) len2++ } while( len < len2 ) { ArrayDeleteItem(gx_InfoData[i], --len2) } } replace(StrData, 149, "]", "") ArrayPushString(gx_InfoData[0], StrData[1]) continue } else { strtok(StrData, StrLeft, 31, StrRight, 127, '=') trim(StrLeft); trim(StrRight); remove_quotes(StrRight) InfoNum = search_array_num(StrLeft) if( InfoNum != -1 ) { ArrayPushString(gx_InfoData[InfoNum], StrRight) } continue } } } len = ArraySize(gx_InfoData[KNIFE_NAME]) for( i = 1; i < 13; i++) { len2 = ArraySize(gx_InfoData[i] ) while( len > len2 ) { ArrayPushCell(gx_InfoData[i], 0) len2++ } while( len < len2 ) { ArrayDeleteItem(gx_InfoData[i], --len2) } } precache_knifes() return len }
stock search_array_num( const StrData[] ) { static i for( i = 1; i < sizeof(g_TypeList); i++) { if( equali(g_TypeList[i], StrData) ) return i } return -1 }
stock precache_knifes() { static i, j, R, StrData[128], len; len = ArraySize(gx_InfoData[KNIFE_NAME]) for( i = 0; i < len; i++) { for( j = 1; j < 12; j++) { ArrayGetString(gx_InfoData[j], i, StrData, 127) if( StrData[0] ) { R = knifes_file_exists(j, StrData) if( R != -1 ) { engfunc(R, StrData) } else { ArraySetCell(gx_InfoData[j], i, 0) } } } ArrayGetString(gx_InfoData[KNIFE_ACCESS], i, StrData, 127) ArraySetCell(gx_InfoData[KNIFE_ACCESS], i, read_flags(StrData)) } return 1 }
stock knifes_file_exists(const num, const DIR[]) { static R, Buffer[135] if( num != KNIFE_V_MODEL && num != KNIFE_P_MODEL ) { formatex(Buffer, 134, "sound/") R = EngFunc_PrecacheSound } else { Buffer[0] = '^0' // Reset Because is a static R = EngFunc_PrecacheModel } add(Buffer, 134, DIR) if( file_exists(Buffer) ) return R return -1 }
stock knifes_set_models(id) { static StrData[128]
ArrayGetString(gx_InfoData[KNIFE_P_MODEL], g_PlrModelNum[id], StrData, 127) set_pev(id, pev_weaponmodel2, StrData[0] ? StrData : g_Default_Knife[KNIFE_P_MODEL]) ArrayGetString(gx_InfoData[KNIFE_V_MODEL], g_PlrModelNum[id], StrData, 127) set_pev(id, pev_viewmodel2, StrData[0] ? StrData : g_Default_Knife[KNIFE_V_MODEL]) return 1 }
stock replace_menu_colors(string[], len) { replace_all(string, len, "!r", "\r") replace_all(string, len, "!y", "\y") replace_all(string, len, "!w", "\w") replace_all(string, len, "!d", "\d") return 1 }
/*================================================================================================== [ForWard`s CallBack`s :D] ==================================================================================================*/ public weapon_change( iEnt ) { if( !pev_valid(iEnt) ) return HAM_IGNORED static id; id = get_pdata_cbase(iEnt, m_pPlayer, 4) knifes_set_models(id) return HAM_IGNORED }
public weapon_drop( iEnt ) { if( !pev_valid(iEnt) || !g_cvar_menu_drop || !g_cvar_enable ) return HAM_IGNORED static id; id = get_pdata_cbase(iEnt, m_pPlayer, 4) main_menu(id) return HAM_IGNORED }
public fw_Spawn_post( id ) { g_bIsAlive[id] = true }
public fw_Killed_post( id ) { g_bIsAlive[id] = false }
public fw_ClientPutInServer( id ) { g_PlrModelNum[id] = 0 }
public fw_EmitSound(iEnt, iChannel, const Sound[] ) { if( !IsValidPlr(iEnt) || !g_bIsAlive[iEnt] || ( iChannel != 1 && iChannel != 3 ) ) return FMRES_IGNORED static i, StrData[128] for( i = 3; i < 13; i++ ) { if( equali(g_Default_Knife[i], Sound) ) { ArrayGetString(gx_InfoData[i], g_PlrModelNum[iEnt], StrData, 127) if( StrData[0] ) { engfunc(EngFunc_EmitSound, iEnt, CHAN_WEAPON, StrData, 1.0, ATTN_NORM, 0, PITCH_NORM) return FMRES_SUPERCEDE } else { return FMRES_IGNORED } } } return FMRES_IGNORED }
public Hook_Say( id ) { static i, StrData[32], StrSay[32], len read_args(StrSay, 31); len = ArraySize(gx_InfoCommands) remove_quotes(StrSay) for( i = 0; i < len; i++) { ArrayGetString(gx_InfoCommands, i, StrData, 31) if( equali(StrData, StrSay) ) { main_menu(id) return PLUGIN_HANDLED } } return PLUGIN_CONTINUE }
/*================================================================================================== [Menu Settings Part :D] ==================================================================================================*/ stock main_menu(id, page=0) { if( !g_cvar_enable ) return PLUGIN_HANDLED static menu; menu = menu_create(g_cvar_menuname, "main_menu_func") static i, StrData[64], len, PlrFlags, Flags len = ArraySize(gx_InfoData[KNIFE_NAME]); PlrFlags = get_user_frags(id) for( i = 0; i < len; i++) { ArrayGetString(gx_InfoData[KNIFE_NAME], i, StrData, 63) Flags = ArrayGetCell(gx_InfoData[KNIFE_ACCESS], i) if( !(PlrFlags & Flags) && Flags ) { format(StrData, 63, "\d%s \R%s", StrData, g_cvar_no4you) } else if( i == g_PlrModelNum[id] ) { format(StrData, 63, "\d%s \R%s", StrData, g_cvar_current) } menu_additem(menu, StrData) } menu_display(id, menu, page) return PLUGIN_HANDLED }
/*================================================================================================== [Menu Exec Settings Part :D] ==================================================================================================*/ public main_menu_func(id, menu, item) { if( item == MENU_EXIT ) { return PLUGIN_HANDLED } static Flags Flags = ArrayGetCell(gx_InfoData[KNIFE_ACCESS], item) if( (get_user_frags(id) & Flags || !Flags) && item != g_PlrModelNum[id] ) { g_PlrModelNum[id] = item } else { main_menu(id, item/7) } if( get_user_weapon(id) == CSW_KNIFE ) { knifes_set_models(id) } return PLUGIN_HANDLED }
Ami még kéne nekem: Beleszerkeszteni az sma-ba hogy az knifes.ini-be lehessen állítani az árát és a sebzését igy képzelném el: [Kard1] P_MODEL = models/Kesek/kard1/p_kard1.mdl V_MODEL = models/Kesek/kard1/v_kard1.mdl DEPLOY = weapons/knife_deploy1.wav HIT1 = knife_hit1.wav HIT2 = knife_hit2.wav HIT3 = knife_hit3.wav HIT4 = knife_hit5.wav HITWALL = knife_hitwall1.wav SLASH1 = knife_slash1.wav SLASH2 = knife_slash2.wav STAB = knife_stab.wav Cost = 7000 Damage = 1.3 ACCESS =
Előre is kössz  az ini-t feltöltöttem
Csatolmányok: |
knifes.rar [490bájt]
Letöltve 46 alkalommal.
|
|