Участник
Пользователь
- Сообщения
- 113
- Реакции
- 26
#include <amxmodx>
#include <reapi>
// log_to_file("addons\amxmodx\logs\test.txt" , "^nПродолжительность: %.2f^nКвар: %d^n", TaskGravity, anum);
// emit_sound(0, CHAN_BODY, SOUND_FLASH, 1.0, ATTN_NORM, 0, PITCH_HIGH);
//https://dev-cs.ru/threads/7222/page-2
#define GetCvarDesc(%0) fmt("%L", LANG_SERVER, %0)
//#define MSG_GIVE "^3Действие ^4%d сек."
//new const TASK_NORMAL = 101
new const iAmmoMode = 1;
enum _:WEAPONS_DATA { ITEM_CASE[10], ITEM_NAME[10], WEAPON_NAME[20], VALUE_AMMO };
new const g_ItemList[][WEAPONS_DATA] = {
{ "weapon", "Glock18", "weapon_glock18", 4 },
{ "weapon", "Usp", "weapon_usp", 4 },
{ "weapon", "Deagle", "weapon_deagle", 4 },
{ "weapon", "AK47", "weapon_ak47", 3 },
{ "weapon", "M4A1", "weapon_m4a1", 3 },
{ "weapon", "Famas", "weapon_famas", 3 },
{ "weapon", "AUG", "weapon_aug", 3 },
{ "weapon", "Scout", "weapon_scout", 5 },
{ "weapon", "AWP", "weapon_awp", 5 },
{ "nade", "HE", "weapon_hegrenade", 5 },
{ "nade", "Freeze", "weapon_flashbang", 3 },
{ "nade", "Frost", "weapon_smokegrenade", 2 }
};
public plugin_init() {
register_plugin("Testing", "1.0", "Admin");
// register_dictionary("test.txt");
register_clcmd("say /r", "@Test");
// new pCvarAmmoNumMin = create_cvar("rulya_ammo_num_min", "1", FCVAR_NONE, GetCvarDesc("RULYA_CVAR_AMMO_NUM_MIN"), true, 1.0);
// new pCvarAmmoNumMax = create_cvar("rulya_ammo_num_max", "5", FCVAR_NONE, GetCvarDesc("RULYA_CVAR_AMMO_NUM_MAX"));
// iAmmoNumMin = get_pcvar_num(pCvarAmmoNumMin);
// iAmmoNumMax = get_pcvar_num(pCvarAmmoNumMax);
}
@Test(id) {
new i = random(sizeof (g_ItemList));
GiveItem(id, g_ItemList[i][ITEM_CASE], g_ItemList[i][ITEM_NAME], g_ItemList[i][WEAPON_NAME], g_ItemList[i][VALUE_AMMO]);
}
GiveItem(id, szCase[], szName[], szItem[], iValue) {
new g_Ammo;
if(iAmmoMode) g_Ammo = random(iValue);
else g_Ammo = iValue;
switch(szCase[0]) {
case 'n': {
rg_give_item(id, szItem);
rg_set_user_bpammo(id, rg_get_weapon_info(szItem, WI_ID), g_Ammo);
if(g_Ammo > 0) log_to_file("addons\amxmodx\logs\nade.txt" , "^nИмя: %s^nПатроны: %d^n", szName, g_Ammo);
else log_to_file("addons\amxmodx\logs\no.txt" , "^nИмя: %s^nПатроны: %d^n", szName, g_Ammo);
}
case 'w': {
rg_remove_item(id, szItem, true);
new iWpn = rg_give_item(id, szItem);
set_member(iWpn, m_Weapon_iClip, g_Ammo);
log_to_file("addons\amxmodx\logs\w.txt" , "^nИмя: %s^nПатроны: %d^n", szName, g_Ammo);
}
}
}
rg_set_user_bpammo(id, rg_get_weapon_info(szItem, WI_ID), 0);
Функция rg_give_item() может вернуть -1 если выдача итема не увенчалось успехом.[ReAPI] set_member: invalid or uninitialized entity
new iWpn = rg_give_item(id, szItem);
if( is_nullent(iWpn) )
return; // fail
set_member(iWpn, m_Weapon_iClip, g_Ammo);
В коде проблем не вижу. Ну только если из-за рандома АВП просто напросто не попадается.А вот с АВП не пойму в чем причина ошибки.
https://dev-cs.ru/threads/222/#post-2173А на счет замены прочих функций, например подсветка или невидимость игрока, а также отлов игрока на лестнице, можешь подсказать замену из ReAPI?
MOVETYPE_FLY && no jumpа также отлов игрока на лестнице
new flags = pev(id, pev_flags);
if((flags & FL_ONGROUND) || (flags & FL_PARTIALGROUND)) {
entity_set_string(id, EV_SZ_viewmodel, "");
get_entvar(index, var_flags)
set_entvar(index, var_viewmodel, "")
Это флаги энтити.что это значит. Флаги доступа?
new Float:velocity[3];
// entity_get_vector(id, EV_VEC_velocity, velocity); // что заменял
get_entvar(id, var_origin, velocity); // правильно заменил?
// Далее аналогично
velocity[2] = 250.0;
// entity_set_vector(id, EV_VEC_velocity, velocity);
set_entvar(id, var_origin, velocity);
entity_set_int(id, EV_INT_gaitsequence, 6);
В 99% случаев можно просто взять последнюю часть, в этом случаеА вот эту функцию не знаю как заменить:entity_set_int(id, EV_INT_gaitsequence, 6);
gaitsequence
и добавить к var_
-> var_gaitsequence
Ващето 100В 99% случаев
#include <amxmodx>
#include <amxmisc>
#include <reapi>
#define get_player_money(%1) get_member(%1, m_iAccount)
new g_Bet[33], SelectPlayer[33];
new const g_iBets[] = {1, 2, 3, 4, 5, 6, 7, 8};
new const prefix[] = "^1[^4MULTY^1]"
public plugin_init() {
register_plugin("Multy Money", "1.0.0", "MirDobro777");
register_clcmd("say /multy", "Multy_Menu");
register_clcmd("say /r", "Multy_Menu");
register_concmd("my_bet", "ReceivingBet");
register_menu("BetMenu", 1023, "BetMenu_handler");
register_menu("NumberMenu", 1023, "NumberMenu_handler");
}
public Multy_Menu(const id) {
if(!is_user_connected(id)) return PLUGIN_HANDLED;
SetGlobalTransTarget(id);
new szMenu[MAX_MENU_LENGTH], iLen;
new keys = MENU_KEY_0;
if(get_player_money(id) < g_iBets[0]) {
iLen = formatex(szMenu[iLen], charsmax(szMenu), "\rУ Вас недостаточно денег для игры в рулетку^n\wМинимальная сумма для одной игры: \r$%d^n", g_iBets[0]);
} else {
iLen = formatex(szMenu[iLen], charsmax(szMenu), "\yПожалуйста, сделайте Вашу ставку^n\wВаши деньги: \r$%d^n", get_player_money(id));
}
for(new i, n = min(8, sizeof g_iBets); i < n; i++) {
if(get_player_money(id) < g_iBets[i]) {
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\d%i. $%i", i + 1, g_iBets[i]);
} else {
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r%i. \w$%i", i + 1, g_iBets[i]);
keys |= (1 << i);
}
}
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r9. \yСвоя ставка");
keys |= (1 << 8);
// log_to_file("addons\amxmodx\logs\bets.txt" , "^n%i %i^n", 1, g_iBets[0]);
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r0. Закрыть");
keys |= (1 << 9);
show_menu(id, keys, szMenu, -1, "Betmenu");
return PLUGIN_HANDLED;
}
public BetMenu_handler(const id, iKey) {
switch(iKey) {
case 8: {
client_cmd(id, "messagemode ^"my_bet^"");
client_print(id, print_center, "Введите целое число Вашей ставки");
return PLUGIN_HANDLED;
}
case 9: return PLUGIN_HANDLED;
default: {
if(g_iBets[iKey] <= get_player_money(id)) {
Select_Menu(id, g_iBets[iKey]);
} else {
Multy_Menu(id);
}
}
}
return PLUGIN_HANDLED;
}
public Select_Menu(const id, iBet) {
if(!is_user_connected(id)) return PLUGIN_HANDLED;
new szMenu[MAX_MENU_LENGTH], iLen;
new keys = MENU_KEY_0;
g_Bet[id] = iBet;
iLen = formatex(szMenu[iLen], charsmax(szMenu), "\yУгадайте совпадение числа^n\wВаши деньги: \r$%d \w| Ваша ставка: \r$%d^n", get_player_money(id), g_Bet[id]);
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r1. \wВыпадет число меньше 500 [ \yx2 \w]");
keys |= (1 << 0);
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r2. \wВыпадет число больше 500 [ \yx2 \w]");
keys |= (1 << 1);
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r3. Выпадет число 500 \w[ \yx10 \w]");
keys |= (1 << 2);
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r0. Отозвать ставку");
keys |= (1 << 9);
show_menu(id, keys, szMenu, -1, "Numbermenu");
return PLUGIN_HANDLED;
}
public NumberMenu_handler(const id, iKey) {
switch(iKey) {
case 0: SelectPlayer[id] = 1;
case 1: SelectPlayer[id] = 2;
case 2: SelectPlayer[id] = 3;
case 9: {
Multy_Menu(id);
return PLUGIN_HANDLED;
}
}
Roll(id);
return PLUGIN_HANDLED;
}
public Roll(const id) {
new iRandom = random_num(1, 1000), iReward;
if(iRandom < 500 && SelectPlayer[id] == 1) {
iReward = g_Bet[id] * 2;
rg_add_account(id, get_player_money(id) + iReward, AS_SET);
client_print_color(id, print_team_red, "%s ^4Поздравляем! На этот раз Вы угадали совпадение выпавшего числа: ^3%d", prefix, iRandom);
}
else if(iRandom == 500 && SelectPlayer[id] == 3) {
iReward = g_Bet[id] * 10;
rg_add_account(id, get_player_money(id) + iReward, AS_SET);
client_print_color(id, print_team_red, "%s ^4Поздравляем! На этот раз Вы угадали совпадение выпавшего числа: ^3%d", prefix, iRandom);
}
else if(iRandom > 500 && SelectPlayer[id] == 2) {
iReward = g_Bet[id] * 2;
rg_add_account(id, get_player_money(id) + iReward, AS_SET);
client_print_color(id, print_team_red, "%s ^4Поздравляем! На этот раз Вы угадали совпадение выпавшего числа: ^3%d", prefix, iRandom);
}
else {
client_print_color(id, print_team_red, "%s ^3Увы, но на этот раз Вы не угадали совпадение выпавшего числа: ^4%d", prefix, iRandom);
rg_add_account(id, get_player_money(id) - g_Bet[id], AS_SET);
}
Multy_Menu(id);
return PLUGIN_HANDLED;
}
public ReceivingBet(const id) {
new szParam[9];
read_argv(1, szParam, charsmax(szParam));
if(!is_str_num(szParam)) {
client_print_color(id, print_team_red, "%s ^3Необходимо ввести целое число", prefix);
return Multy_Menu(id);
}
new iBet = str_to_num(szParam);
if(get_player_money(id) < iBet) {
client_print_color(id, print_team_red, "%s ^3У Вас недостаточно денег для такой ставки", prefix);
return Multy_Menu(id);
}
if(iBet < g_iBets[0]) {
client_print_color(id, print_team_red, "%s ^3Своя ставка не может быть меньше первой ставки", prefix);
return Multy_Menu(id);
}
Select_Menu(id, iBet);
return PLUGIN_HANDLED;
}
show_menu
title должен быть абсолютно такой же, как при регистрации меню. В данном случае он чувствителен к регистру.#include <amxmodx>
#include <amxmisc>
#include <reapi>
#pragma semicolon 1
#define VERSION "1.0"
#define is_user_vip(%0) (get_user_flags(%0) & VIP_FLAG)
#define get_player_money(%1) get_member(%1, m_iAccount)
/* Настройки */
#define VIP_FLAG (ADMIN_IMMUNITY|ADMIN_LEVEL_H)
new const prefix[] = "^1[^4NADE^1]";
new const iTime = 20;
new const iCostRoll = 80;
new const iRoundLimitPlayer = 1;
new const iRoundLimitVip = 2;
new const iMapLimitPlayer = 10;
new const iMapLimitVip = 20;
new const iMinPlayers = 0;
enum _:WEAPONS_DATA { szMenuItemName[64], iWeaponID[20], iAmmo, iCost }
new const g_ItemList[][WEAPONS_DATA] = {
{ "HE", "weapon_hegrenade", 5, 50 },
{ "Flash", "weapon_flashbang", 3, 80 },
{ "Frost", "weapon_smokegrenade", 2, 110 }
};
new g_RoundCounter[MAX_PLAYERS+1], g_MapCounter[MAX_PLAYERS+1], g_NowUsed[MAX_PLAYERS+1], g_LastTry;
public plugin_init() {
register_plugin("Nade Shop", VERSION, "MIRDOBRO");
register_dictionary("nade_shop.txt");
register_clcmd("say /shop", "OpenMenu");
RegisterHookChain(RG_CSGameRules_RestartRound, "@refwd_NewRound_Post", true);
register_menu("NadesMenu", 1023, "NadesMenu_handler");
}
@refwd_NewRound_Post() {
for (new i = 1; i <= MAX_PLAYERS; i++) {
g_RoundCounter[i] = 0;
}
}
public OpenMenu(id) {
new sysTime = get_systime();
g_LastTry = g_NowUsed[id];
new TimeRemaining = iTime - (sysTime - g_LastTry);
new authid[32], name[32];
get_user_authid(id,authid,31);
get_user_name(id,name,31);
new TeamName:team = any:get_member(id, m_iTeam);
new iPlayerMoney = get_player_money(id);
new NumLimit;
if(!is_user_vip(id)) NumLimit = iMapLimitPlayer;
else NumLimit = iMapLimitVip;
if(!is_user_alive(id)) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_ONLY_ALIVE");
log_to_file("addons\amxmodx\logs\alive.txt" , "^nНик: %s, %s^nБаланс: $%d^n", name, authid, get_player_money(id));
return PLUGIN_HANDLED;
}
if(team == TEAM_CT) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_ONLY_TT");
log_to_file("addons\amxmodx\logs\team.txt" , "^nНик: %s, %s^nБаланс: $%d^n", name, authid, get_player_money(id));
return PLUGIN_HANDLED;
}
if(iMinPlayers > 0) {
new iNumPlayers = get_playersnum_ex(GetPlayers_ExcludeBots | GetPlayers_ExcludeHLTV);
new iNumSpectators = get_playersnum_ex(GetPlayers_ExcludeBots | GetPlayers_ExcludeHLTV | GetPlayers_MatchTeam, "SPECTATOR");
new iNumUnassingned = get_playersnum_ex(GetPlayers_ExcludeBots | GetPlayers_ExcludeHLTV | GetPlayers_MatchTeam, "UNASSIGNED");
if(iNumPlayers - (iNumSpectators + iNumUnassingned) < iMinPlayers) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_NEED_PLAYERS", iMinPlayers);
log_to_file("addons\amxmodx\logs\online.txt" , "^nНик: %s, %s^nБаланс: $%d, Число: %d^n", name, authid, get_player_money(id), iMinPlayers);
return PLUGIN_HANDLED;
}
}
if(g_RoundCounter[id] == iRoundLimitPlayer && !is_user_vip(id)) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_ROUND_LIMIT");
log_to_file("addons\amxmodx\logs\round_player.txt" , "^nНик: %s, %s^nБаланс: $%d, Лимит: %d/%d^n", name, authid, get_player_money(id), g_RoundCounter[id], iRoundLimitPlayer);
return PLUGIN_HANDLED;
}
else
if(g_RoundCounter[id] == iRoundLimitVip) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_ROUND_LIMIT");
log_to_file("addons\amxmodx\logs\round_vip.txt" , "^nНик: %s, %s^nБаланс: $%d, Лимит: %d/%d^n", name, authid, get_player_money(id), g_RoundCounter[id], iRoundLimitVip);
return PLUGIN_HANDLED;
}
if(g_MapCounter[id] == iMapLimitPlayer && !is_user_vip(id)) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_MAP_LIMIT");
log_to_file("addons\amxmodx\logs\map_player.txt" , "^nНик: %s, %s^nБаланс: $%d, Лимит: %d/%d^n", name, authid, get_player_money(id), g_MapCounter[id], iMapLimitPlayer);
return PLUGIN_HANDLED;
}
else
if(g_MapCounter[id] == iMapLimitVip) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_MAP_LIMIT");
log_to_file("addons\amxmodx\logs\map_vip.txt" , "^nНик: %s, %s^nБаланс: $%d, Лимит: %d/%d^n", name, authid, get_player_money(id), g_MapCounter[id], iMapLimitVip);
return PLUGIN_HANDLED;
}
if(iTime > (sysTime - g_LastTry)) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_TIME_WAIT", iTime, TimeRemaining);
log_to_file("addons\amxmodx\logs\time.txt" , "^nНик: %s, %s^nБаланс: $%d, Время: %d, Осталось: %d^n", name, authid, get_player_money(id), iTime, TimeRemaining);
return PLUGIN_HANDLED;
}
SetGlobalTransTarget(id);
new szMenu[MAX_MENU_LENGTH], iLen;
new keys = MENU_KEY_0;
iLen = formatex(szMenu[iLen], charsmax(szMenu), "%L^n", id, "MENU_TITLE", name, iPlayerMoney, g_MapCounter[id], NumLimit);
for(new i = 0; i < sizeof(g_ItemList); i++) {
if(iPlayerMoney < g_ItemList[i][iCost]) {
iLen = formatex(szMenu[iLen], charsmax(szMenu), "^n\d%i. %s \w[ \r$%d \w]", i+1, g_ItemList[i][szMenuItemName], g_ItemList[i][iCost]);
} else {
iLen = formatex(szMenu[iLen], charsmax(szMenu), "^n\r%i. \w%s [ \y$%d \w]", i+1, g_ItemList[i][szMenuItemName], g_ItemList[i][iCost]);
keys |= (1 << i);
}
}
if(iPlayerMoney < iCostRoll) {
iLen = formatex(szMenu[iLen], charsmax(szMenu), "^n\d9. %L", id, "MENU_ROLL1", iCostRoll);
} else {
iLen = formatex(szMenu[iLen], charsmax(szMenu), "^n\r9. \w%L", id, "MENU_ROLL2", iCostRoll);
keys |= (1 << 8);
}
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r0. \w%L", id, "MENU_EXIT");
keys |= (1 << 9);
show_menu(id, keys, szMenu, -1, "NadesMenu");
return PLUGIN_HANDLED;
}
public NadesMenu_handler(id, iKey) {
if(!is_user_alive(id)) return PLUGIN_HANDLED;
switch(iKey) {
case 8: {
new i = random(sizeof (g_ItemList));
RollItem(id, g_ItemList[i][szMenuItemName], g_ItemList[i][iWeaponID], g_ItemList[i][iAmmo]);
}
case 9: return PLUGIN_HANDLED;
default: GiveItem(id, g_ItemList[iKey][szMenuItemName], g_ItemList[iKey][iWeaponID], g_ItemList[iKey][iCost]);
}
return PLUGIN_HANDLED;
}
GiveItem(id, szName[], iItem[], szCost) {
new sysTime = get_systime();
new authid[32], name[32];
get_user_authid(id,authid,31);
get_user_name(id,name,31);
rg_give_item(id, iItem, GT_REPLACE);
rg_add_account(id, get_player_money(id) - szCost, AS_SET);
g_RoundCounter[id]++;
g_MapCounter[id]++;
g_NowUsed[id] = sysTime;
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_NADE1", szName);
log_to_file("addons\amxmodx\logs\nade.txt" , "^nНик: %s, %s^nБаланс: $%d, Цена: %d, %s^n", name, authid, get_player_money(id), szCost, szName);
}
RollItem(id, szName[], szItem[], iValue) {
new g_Ammo = random(iValue);
new sysTime = get_systime();
new authid[32], name[32];
get_user_authid(id,authid,31);
get_user_name(id,name,31);
rg_give_item(id, szItem);
rg_set_user_bpammo(id, rg_get_weapon_info(szItem, WI_ID), g_Ammo);
rg_add_account(id, get_player_money(id) - iCostRoll, AS_SET);
g_RoundCounter[id]++;
g_MapCounter[id]++;
g_NowUsed[id] = sysTime;
if(g_Ammo > 0) {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_NADE2", szName, g_Ammo);
log_to_file("addons\amxmodx\logs\nade_plus.txt" , "^nНик: %s, %s^nБаланс: $%d, Цена: %d, Число: %d, %s^n", name, authid, get_player_money(id), iCostRoll, g_Ammo, szName);
} else {
client_print_color(id, print_team_red, "%s %L", prefix, id, "MSG_NADE3", szName);
log_to_file("addons\amxmodx\logs\nade_minus.txt" , "^nНик: %s, %s^nБаланс: $%d, Цена: %d, Число: %d, %s^n", name, authid, get_player_money(id), iCostRoll, g_Ammo, szName);
}
}