evgeniy777 писал(а): Здравствуйте,вы можете написать плагин для ксс что бы можно было игроку не хорошему который играет и говорит не хорошие вещи про родных сломать хоят бы кс ?
Модераторы: Subb98, liFe iS GoOD
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague>
#include <nvault>
/*Messages*/
#define ALIVE_MSG "^1[^4DK|KN^1] ^3Только для живых!"
#define G_KNIFE "^1[^4DK|KN^1] Ты выбрал ^3%s!"
#define NO_ACCESS "^1[^4DK|KN^1] ^3Недостаточно прав!"
#define NO_EXP "^1[^4DK|KN^1] ^3Недостаточно опыта!"
/*Models*/
enum any:DATA {
NAME_KNIFE[32],
P_MODEL[32],
V_MODEL[32],
LEVEL_KNIFE
};
new g_eGameType[6][DATA] = {
{"Тесак", "models/zb_test/v_tesak.mdl", "models/zb_test/p_tesak.mdl", 0},
{"Бита", "models/zb_test/v_bita.mdl", "models/zb_test/p_bita.mdl", 2},
{"Кровавая катана", "models/zb_test/v_georgia.mdl", "", 4},
{"Топор", "models/zb_test/v_axe.mdl", "models/zb_test/p_axe.mdl", 6},
{"Фростморн", "models/zb_test/v_frostmorn.mdl", "models/zb_test/p_frostmorn.mdl", 8},
{"Кинжал", "models/zb_test/v_kinjal.mdl", "", 10}
};
/*Offsets*/
const linux_diff_weapon = 4;
const linux_diff_player = 5;
const m_pPlayer = 41;
const m_pActiveItem = 373;
//native zp_level(id);
new
g_pKnife[MAX_PLAYERS +1],
bool:g_bActiveKnife[MAX_PLAYERS +1],
g_pMenu,
g_pVault;
public plugin_init() {
register_plugin("Knife System", "1.0", "VVV");
register_clcmd("say /knife", "DISPAY_Menu");
register_clcmd("/knife", "DISPAY_Menu");
CREATE_Menu();
RegisterHam(Ham_Item_Deploy, "weapon_knife", "Ham_Item_Deploy_Post", 1);
if(nvault_open("knifes") == INVALID_HANDLE)
set_fail_state("Error opening nVault");
}
public plugin_precache() {
for(new i; i < sizeof g_eGameType; ++i) {
engfunc(EngFunc_PrecacheModel, g_eGameType[i][P_MODEL]);
if(!g_eGameType[i][V_MODEL][0])
continue;
engfunc(EngFunc_PrecacheModel, g_eGameType[i][V_MODEL]);
}
}
public DISPAY_Menu(const id) {
if(!is_user_alive(id)) {
client_print_color(id, id, ALIVE_MSG);
return PLUGIN_HANDLED;
}
if(zp_get_user_zombie(id))
return PLUGIN_HANDLED;
menu_display(id, g_pMenu);
return PLUGIN_HANDLED;
}
CREATE_Menu() {
g_pMenu = menu_create("Выбор ножа", "HANDLER_Menu")
for(new i, num[3]; i < sizeof g_eGameType; ++i) {
formatex(num, charsmax(num), "%i", i);
new lvl = g_eGameType[i][LEVEL_KNIFE];
if(lvl)
menu_additem(g_pMenu, fmt("%s \y[%i LVL]", g_eGameType[i][NAME_KNIFE], lvl), num);
else menu_additem(g_pMenu, g_eGameType[i][NAME_KNIFE], num);
}
menu_setprop(g_pMenu, MPROP_BACKNAME, "Назад");
menu_setprop(g_pMenu, MPROP_NEXTNAME, "Далее");
menu_setprop(g_pMenu, MPROP_EXITNAME, "Выход");
}
public HANDLER_Menu(const id, const pMenu, const item) {
if(item != MENU_EXIT) {
if(!is_user_alive(id)) {
client_print_color(id, id, ALIVE_MSG);
return;
}
if(zp_get_user_zombie(id))
return;
g_pKnife[id] = item;
new szBuffer[64];
copyc(szBuffer, charsmax(szBuffer), g_eGameType[item][NAME_KNIFE], '\');
client_print_color(id, id, G_KNIFE, szBuffer);
get_user_weapon(id) == CSW_KNIFE ?
ExecuteHamB(Ham_Item_Deploy, get_pdata_cbase(id, m_pActiveItem, linux_diff_player)) : engclient_cmd(id, "weapon_knife");
}
}
public Ham_Item_Deploy_Post(const pWeapon) {
if(pev_valid(pWeapon)) {
new id = get_pdata_cbase(pWeapon, m_pPlayer, linux_diff_weapon);
if(zp_get_user_zombie(id))
return HAM_IGNORED;
set_pev(id, pev_viewmodel2, g_eGameType[g_pKnife[id]][P_MODEL]);
set_pev(id, pev_weaponmodel2, g_eGameType[g_pKnife[id]][V_MODEL]);
g_bActiveKnife[id] = true;
}
return HAM_IGNORED;
}
public client_authorized(id, const szAuthid[]) {
if(!is_user_bot(id))
g_pKnife[id] = nvault_get(g_pVault, fmt("%kn", szAuthid));
}
public client_disconnected(id) {
if(!is_user_bot(id)) {
#define LEN_BUFFER 35
new szBuffer[LEN_BUFFER +1];
get_user_authid(id, szBuffer, LEN_BUFFER);
#undef LEN_BUFFER
nvault_set(g_pVault, fmt("%kn", szBuffer), fmt("%i", g_pKnife[id]));
g_pKnife[id] = 0;
g_bActiveKnife[id] = false;
}
}
public plugin_end()
nvault_close(g_pVault);
public zp_user_infected_post(id, infector, nemesis)
g_bActiveKnife[id] = false;
public plugin_natives() {
register_native("get_user_knife", "native_get_user_knife");
register_native("get_active_knife", "native_get_user_active");
}
public native_get_user_knife(id)
return g_pKnife[id];
public bool:native_get_user_active(id)
return g_bActiveKnife[id];
nemec21 писал(а):Слет сервера в начале карты?
Для чего тебе это?
- Код: Выделить всё
new cmd[2];
new access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new choice = str_to_num(cmd)
если 3 аргумент в public menu_handle(id, menu, item) нам даст тоже самое
Для чего тут второй параметр ?
- Код: Выделить всё
give_knife(id, choice);
Если ты пользуешся глобальной переменной везде g_knife[id]
nemec21 писал(а):Протестировал, модели брал выборочно с интернета, еще бы я все эти данные записал в фаил и их читал, а не через код
- Код: Выделить всё
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague>
#include <nvault>
/*Messages*/
#define ALIVE_MSG "^1[^4DK|KN^1] ^3Только для живых!"
#define G_KNIFE "^1[^4DK|KN^1] Ты выбрал ^3%s!"
#define NO_ACCESS "^1[^4DK|KN^1] ^3Недостаточно прав!"
#define NO_EXP "^1[^4DK|KN^1] ^3Недостаточно опыта!"
/*Models*/
enum any:DATA {
NAME_KNIFE[32],
P_MODEL[32],
V_MODEL[32],
LEVEL_KNIFE
};
new g_eGameType[6][DATA] = {
{"Тесак", "models/zb_test/v_tesak.mdl", "models/zb_test/p_tesak.mdl", 0},
{"Бита", "models/zb_test/v_bita.mdl", "models/zb_test/p_bita.mdl", 2},
{"Кровавая катана", "models/zb_test/v_georgia.mdl", "", 4},
{"Топор", "models/zb_test/v_axe.mdl", "models/zb_test/p_axe.mdl", 6},
{"Фростморн", "models/zb_test/v_frostmorn.mdl", "models/zb_test/p_frostmorn.mdl", 8},
{"Кинжал", "models/zb_test/v_kinjal.mdl", "", 10}
};
/*Offsets*/
const linux_diff_weapon = 4;
const linux_diff_player = 5;
const m_pPlayer = 41;
const m_pActiveItem = 373;
//native zp_level(id);
new
g_pKnife[MAX_PLAYERS +1],
bool:g_bActiveKnife[MAX_PLAYERS +1],
g_pMenu,
g_pVault;
public plugin_init() {
register_plugin("Knife System", "1.0", "VVV");
register_clcmd("say /knife", "DISPAY_Menu");
register_clcmd("/knife", "DISPAY_Menu");
CREATE_Menu();
RegisterHam(Ham_Item_Deploy, "weapon_knife", "Ham_Item_Deploy_Post", 1);
if(nvault_open("knifes") == INVALID_HANDLE)
set_fail_state("Error opening nVault");
}
public plugin_precache() {
for(new i; i < sizeof g_eGameType; ++i) {
engfunc(EngFunc_PrecacheModel, g_eGameType[i][P_MODEL]);
if(!g_eGameType[i][V_MODEL][0])
continue;
engfunc(EngFunc_PrecacheModel, g_eGameType[i][V_MODEL]);
}
}
public DISPAY_Menu(const id) {
if(!is_user_alive(id)) {
client_print_color(id, id, ALIVE_MSG);
return PLUGIN_HANDLED;
}
if(zp_get_user_zombie(id))
return PLUGIN_HANDLED;
menu_display(id, g_pMenu);
return PLUGIN_HANDLED;
}
CREATE_Menu() {
g_pMenu = menu_create("Выбор ножа", "HANDLER_Menu")
for(new i, num[3]; i < sizeof g_eGameType; ++i) {
formatex(num, charsmax(num), "%i", i);
new lvl = g_eGameType[i][LEVEL_KNIFE];
if(lvl)
menu_additem(g_pMenu, fmt("%s \y[%i LVL]", g_eGameType[i][NAME_KNIFE], lvl), num);
else menu_additem(g_pMenu, g_eGameType[i][NAME_KNIFE], num);
}
menu_setprop(g_pMenu, MPROP_BACKNAME, "Назад");
menu_setprop(g_pMenu, MPROP_NEXTNAME, "Далее");
menu_setprop(g_pMenu, MPROP_EXITNAME, "Выход");
}
public HANDLER_Menu(const id, const pMenu, const item) {
if(item != MENU_EXIT) {
if(!is_user_alive(id)) {
client_print_color(id, id, ALIVE_MSG);
return;
}
if(zp_get_user_zombie(id))
return;
g_pKnife[id] = item;
new szBuffer[64];
copyc(szBuffer, charsmax(szBuffer), g_eGameType[item][NAME_KNIFE], '\');
client_print_color(id, id, G_KNIFE, szBuffer);
get_user_weapon(id) == CSW_KNIFE ?
ExecuteHamB(Ham_Item_Deploy, get_pdata_cbase(id, m_pActiveItem, linux_diff_player)) : engclient_cmd(id, "weapon_knife");
}
}
public Ham_Item_Deploy_Post(const pWeapon) {
if(pev_valid(pWeapon)) {
new id = get_pdata_cbase(pWeapon, m_pPlayer, linux_diff_weapon);
if(zp_get_user_zombie(id))
return HAM_IGNORED;
set_pev(id, pev_viewmodel2, g_eGameType[g_pKnife[id]][P_MODEL]);
set_pev(id, pev_weaponmodel2, g_eGameType[g_pKnife[id]][V_MODEL]);
g_bActiveKnife[id] = true;
}
return HAM_IGNORED;
}
public client_authorized(id, const szAuthid[]) {
if(!is_user_bot(id))
g_pKnife[id] = nvault_get(g_pVault, fmt("%kn", szAuthid));
}
public client_disconnected(id) {
if(!is_user_bot(id)) {
#define LEN_BUFFER 35
new szBuffer[LEN_BUFFER +1];
get_user_authid(id, szBuffer, LEN_BUFFER);
#undef LEN_BUFFER
nvault_set(g_pVault, fmt("%kn", szBuffer), fmt("%i", g_pKnife[id]));
g_pKnife[id] = 0;
g_bActiveKnife[id] = false;
}
}
public plugin_end()
nvault_close(g_pVault);
public zp_user_infected_post(id, infector, nemesis)
g_bActiveKnife[id] = false;
public plugin_natives() {
register_native("get_user_knife", "native_get_user_knife");
register_native("get_active_knife", "native_get_user_active");
}
public native_get_user_knife(id)
return g_pKnife[id];
public bool:native_get_user_active(id)
return g_bActiveKnife[id];
Сейчас этот форум просматривают: Bing [Bot] и гости: 11