Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Бесконечные деньги в админ меню

Статус пользователя batonoid
сообщение 26.9.2014, 10:59
Сообщение #1


Стаж: 13 лет

Сообщений: 194
Благодарностей: 7
Полезность: < 0

Всем доброго времени суток. Недавно нашел в админ/вип меню недочет, а именно то, когда берешь деньги из админ меню, и при реконнекте, данная функция опять же работает. То есть деньги можно брать бесконечно через reconnect. Вот плагин :
Скрытый текст

Код:

#include <amxmodx>
#include <fun>
#include <cstrike>
#include <hamsandwich>
#include <nvault>
#include <fakemeta>
#tryinclude <playermodel>

/*---------------EDIT ME------------------*/
#define ACCESS_FLAG ADMIN_MAP
#define ROUNDS_WAIT_RESPAWN 10
#define ROUNDS_WAIT_DISGUISE 5
/*----------------------------------------*/

#define PLUGIN "[VIP] Menu"
#define VERSION "0.3"
#define AUTHOR "RaFA / Safety1st"

new g_NextRespawnRound[33], g_NextDisguiseRound[33]
new g_nvault
new g_used_lvl[33]

new g_round

// macro; %1 - variable being modified, %2 - player id
#define CheckFlag(%1,%2) (%1 & (1 << (%2 & 31)))
#define SetFlag(%1,%2) (%1 |= (1 << (%2 & 31)))
#define ClearFlag(%1,%2) (%1 &= ~(1 << (%2 & 31)))
new gbUsedGrens, gbUsedMoney, gbHasSpawned
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
const GRENADES_WEAPONS_BIT_SUM = (1<<CSW_HEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_SMOKEGRENADE)
#define PRIMARY_ONLY 1
#define SECONDARY_ONLY 2
#define PRIMARY_AND_SECONDARY 3
#define GRENADES_ONLY 4
const PDATA_SAFE = 2
const OFFSET_ACTIVE_ITEM = 373
#define TEAM_TT 1
#define TEAM_CT 2
enum _:INFO_GROUND
{
M4A1 = 0,
AK47,
AWP
};
new g_iRoundUse[33][INFO_GROUND]
new giResetSize

public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR )

register_event( "HLTV", "EventNewRound" , "a", "1=0", "2=0" )
register_logevent( "EventNewGame", 2, "0=World triggered", "1&Restart_Round_", "1=Game_Commencing" )

register_clcmd("adminmenu","vipmenu")
register_menucmd(register_menuid("Vip Menu"), 1023, "Action_VipMenu")
g_nvault = nvault_open("player_levels_2")

RegisterHam( Ham_Spawn, "player", "OnCBasePlayer_Spawn_Post", 1 )

giResetSize = get_maxplayers() + 1
}

public EventNewGame() {
g_round = 0

arrayset( g_NextRespawnRound, g_round, giResetSize )
arrayset( g_NextDisguiseRound, g_round, giResetSize )
}

public plugin_end()
nvault_close(g_nvault)

public save_lvl_used(id)
{
new key[64], data[256]
new name[33];
get_user_name(id,name,32)

formatex(key, 63, "%s", name) //name
formatex(data, 255, "%i#", g_used_lvl[id]) //сколько

nvault_set(g_nvault, key, data)
}

public client_putinserver(id) {
g_NextRespawnRound[id] = g_round
g_NextDisguiseRound[id] = g_round

if( get_user_flags(id) & ACCESS_FLAG )
load_lvl_used(id)
else
g_used_lvl[id] = 0;

ClearFlag( gbUsedGrens, id );
ClearFlag( gbUsedMoney, id );
ClearFlag( gbHasSpawned, id )
}

public load_lvl_used(id)
{
new key[64], data[256]
new name[33];
get_user_name(id,name,32)

formatex(key, 63, "%s", name)
formatex(data, 255, "%i#", g_used_lvl[id])

nvault_get(g_nvault, key, data, 255)
replace_all(data, 255, "#", " ")

new lvl_us[32]
parse(data, lvl_us, 31)
g_used_lvl[id] = str_to_num(lvl_us)
}

public EventNewRound() {
g_round++

gbUsedGrens = 0
gbUsedMoney = 0
gbHasSpawned = 0

for(new id = 1;id <= get_maxplayers(); id++)
{
g_iRoundUse[id][M4A1] = 0
g_iRoundUse[id][AK47] = 0
g_iRoundUse[id][AWP] = 0
}
}

public vipmenu(id) {
if( !( get_user_flags(id) & ACCESS_FLAG || !TeamCheck(id) ) )
return PLUGIN_HANDLED

new body[512], keys, len
len = formatex(body, charsmax(body), "\yАдмин-Меню^n^n" )

if(g_round > 1) {
keys |= MENU_KEY_1
len += formatex( body[len], charsmax(body) - len, "\r1. \wM4a1^n" )
}
else {
len += formatex( body[len], charsmax(body) - len, "\r1. \dM4a1^n" )
}

if(g_round > 1) {
keys |= MENU_KEY_2
len += formatex( body[len], charsmax(body) - len, "\r2. \wAk47^n" )
}
else {
len += formatex( body[len], charsmax(body) - len, "\r2. \dAk47^n" )
}

if(g_round > 1) {
keys |= MENU_KEY_3
len += formatex( body[len], charsmax(body) - len, "\r3. \wAwp^n" )
}
else {
len += formatex( body[len], charsmax(body) - len, "\r3. \dAwp^n" )
}

keys |= MENU_KEY_4
len += formatex( body[len], charsmax(body) - len, "\r4. \wБроня^n" )

if( g_round > 1 && !CheckFlag( gbUsedMoney, id ) ) {
keys |= MENU_KEY_5
len += formatex( body[len], charsmax(body) - len, "\r5. \w5000$^n" )
}
else if( g_round <= 1 ) {
len += formatex( body[len], charsmax(body) - len, "\r5. \d5000$^n" )
}
else
len += formatex( body[len], charsmax(body) - len, "\r5. \d5000$(\rуже брали\d)^n" )

if( !CheckFlag( gbUsedGrens, id ) ) {
keys |= MENU_KEY_6
len += formatex( body[len], charsmax(body) - len, "\r6. \wГранаты^n" )
}
else
len += formatex( body[len], charsmax(body) - len, "\r6. \dГранаты(\rуже брали\d)^n" )

keys |= MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
len += formatex( body[len], charsmax(body) - len, "\r7. \wВоскреснуть(1 раз в %d раундов)^n", ROUNDS_WAIT_RESPAWN )

#if defined _playermodel_included
keys |= MENU_KEY_8
len += formatex( body[len], charsmax(body) - len, "\r8. \wХамелеон(1 раз в %d раундов)^n", ROUNDS_WAIT_DISGUISE )
#else
len += add( body[len], charsmax(body) - len, "^n" )
#endif

keys |= MENU_KEY_9|MENU_KEY_0
formatex( body[len], charsmax(body) - len, "\r9. \wПолучить 35 lvl(3 раза)^n\r0. \wВыход" )

show_menu(id, keys, body, -1, "Vip Menu")

return PLUGIN_HANDLED
}

TeamCheck(id) {
switch( _:cs_get_user_team(id) ) {
case TEAM_TT, TEAM_CT : return 1
}

client_print( id, print_chat, "Запрещено: вы не в игре" )
return 0
}

public Action_VipMenu( id, key ) {
if( !TeamCheck(id) )
return PLUGIN_HANDLED

switch(key) {
case 0:
{
if(g_iRoundUse[id][M4A1] == 1)
{
client_print(id, print_chat, "Вы уже брали")
return PLUGIN_HANDLED
}
if(g_round > 1) {
strip_weapons(id, PRIMARY_ONLY)
give_item(id, "weapon_m4a1")
g_iRoundUse[id][M4A1]++
ExecuteHamB ( Ham_GiveAmmo, id, 90, "556nato", 90 )
}
else {
client_print(id, print_chat, "Доступно после 1 раунда")
return PLUGIN_HANDLED
}
}
case 1:
{
if(g_iRoundUse[id][AK47] == 1)
{
client_print(id, print_chat, "Вы уже брали")
return PLUGIN_HANDLED
}
if(g_round > 1) {
strip_weapons(id, PRIMARY_ONLY)
give_item(id, "weapon_ak47")
g_iRoundUse[id][AK47]++
ExecuteHamB ( Ham_GiveAmmo, id, 90, "762nato", 90 )
}
else {
client_print(id, print_chat, "Доступно после 1 раунда")
return PLUGIN_HANDLED
}
}
case 2:
{
if(g_iRoundUse[id][AWP] == 1)
{
client_print(id, print_chat, "Вы уже брали")
return PLUGIN_HANDLED
}
if(g_round > 1) {
strip_weapons(id, PRIMARY_ONLY)
give_item(id, "weapon_awp")
g_iRoundUse[id][AWP]++
ExecuteHamB ( Ham_GiveAmmo, id, 30, "338magnum", 30 )
}
else {
client_print(id, print_chat, "Доступно после 1 раунда")
return PLUGIN_HANDLED
}
}
case 3:
{
give_item(id, "item_assaultsuit")
}
case 4:
{
if(g_round > 1) {
cs_set_user_money(id, cs_get_user_money(id) + 5000)
SetFlag( gbUsedMoney, id )
}
else {
client_print(id, print_chat, "Доступно после 1 раунда")
return PLUGIN_HANDLED
}
}
case 5:
{
give_item(id, "weapon_hegrenade")
give_item(id, "weapon_flashbang")
give_item(id, "weapon_smokegrenade")
SetFlag( gbUsedGrens, id )
}
case 6: {
if( is_user_alive(id) ) {
client_print(id, print_chat, "Запрещено живым")
return PLUGIN_HANDLED
}

if( !CheckFlag( gbHasSpawned, id ) ) {
client_print(id, print_chat, "Запрещено: вы не играли в текущем раунде")
return PLUGIN_HANDLED
}

new iWait = g_NextRespawnRound[id] - g_round
if( iWait > 0 ) {
client_print( id, print_chat, "Возрождение будет доступно через %d раундов", iWait )
return PLUGIN_HANDLED
}
ExecuteHamB(Ham_CS_RoundRespawn, id)
g_NextRespawnRound[id] = g_round + ROUNDS_WAIT_RESPAWN
}
#if defined _playermodel_included
case 7:
{
new iWait = g_NextDisguiseRound[id] - g_round
if( iWait > 0 ) {
client_print( id, print_chat, "Хамелеон будет доступен через %d раундов", iWait )
return PLUGIN_HANDLED
}

static szModels[][][] = {
// list is ordered according to internal model indexes (but is doesn't matter here)
{ "terror", "leet", "arctic", "guerilla" },
{ "urban", "gsg9", "sas", "gign" }
}
static szTeams[][] = {
"террорист",
"CT"
}

new iRow = TEAM_CT - _:cs_get_user_team(id)
fm_set_user_model( id, szModels[iRow][ random( sizeof szModels[] ) ] )
g_NextDisguiseRound[id] = g_round + ROUNDS_WAIT_DISGUISE
client_print( id, print_chat, "До конца раунда вы выглядите как %s", szTeams[iRow] )
}
#endif
case 8:
{
if( !( get_user_flags(id) & ACCESS_FLAG ) )
client_print(id,print_chat, "Вы не администратор")
else
{
new User[32]; get_user_name(id, User, 31)
if(g_used_lvl[id] >= 3)
{
client_print(id, print_chat, "Эта команда больше вам недоступна")
return PLUGIN_HANDLED
}
g_used_lvl[id]++
save_lvl_used(id)
server_cmd("amx_givexp ^"%s^" 1825540", User)
}
}
}

return PLUGIN_HANDLED
}

public OnCBasePlayer_Spawn_Post(id) {
if( !is_user_alive(id) )
return

SetFlag( gbHasSpawned, id )
}
stock strip_weapons(id, stripwhat)
{
// Get user weapons
new weapons[32], num_weapons, index, weaponid
get_user_weapons(id, weapons, num_weapons)

// Loop through them and drop primaries or secondaries
for (index = 0; index < num_weapons; index++)
{
// Prevent re-indexing the array
weaponid = weapons[index]

if ((stripwhat == PRIMARY_ONLY && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
|| (stripwhat == SECONDARY_ONLY && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))
|| (stripwhat == GRENADES_ONLY && ((1<<weaponid) & GRENADES_WEAPONS_BIT_SUM)))
{
// Get weapon name
new wname[32]
get_weaponname(weaponid, wname, charsmax(wname))

// Strip weapon and remove bpammo
ham_strip_weapon(id, wname)
cs_set_user_bpammo(id, weaponid, 0)
}
}
}
stock ham_strip_weapon(index, const weapon[])
{
// Get weapon id
new weaponid = get_weaponid(weapon)
if (!weaponid)
return false;

// Get weapon entity
new weapon_ent = fm_find_ent_by_owner(-1, weapon, index)
if (!weapon_ent)
return false;

// If it's the current weapon, retire first
new current_weapon_ent = fm_cs_get_current_weapon_ent(index)
new current_weapon = pev_valid(current_weapon_ent) ? cs_get_weapon_id(current_weapon_ent) : -1
if (current_weapon == weaponid)
ExecuteHamB(Ham_Weapon_RetireWeapon, weapon_ent)

// Remove weapon from player
if (!ExecuteHamB(Ham_RemovePlayerItem, index, weapon_ent))
return false;

// Kill weapon entity and fix pev_weapons bitsum
ExecuteHamB(Ham_Item_Kill, weapon_ent)
set_pev(index, pev_weapons, pev(index, pev_weapons) & ~(1<<weaponid))
return true;
}
stock fm_find_ent_by_owner(entity, const classname[], owner)
{
while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && pev(entity, pev_owner) != owner) { /* keep looping */ }
return entity;
}
stock fm_cs_get_current_weapon_ent(id)
{
// Prevent server crash if entity's private data not initalized
if (pev_valid(id) != PDATA_SAFE)
return -1;

return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM);
}




Помогите поставить какую то проверку, чтобы нельзя было брать данную функцию после реконнекта, так как я в павне слаб)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя ex3m777
сообщение 26.9.2014, 11:26
Сообщение #2


Стаж: 13 лет
Город: Москва

Сообщений: 2037
Благодарностей: 1135
Полезность: 968

Меценат Меценат

А они сохраняются?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя batonoid
сообщение 26.9.2014, 12:01
Сообщение #3


Стаж: 13 лет

Сообщений: 194
Благодарностей: 7
Полезность: < 0

ex3m777,
Да нее в этом прикол, а в том, что деньги можно использовать, и перезайти на сервер и опять взять и потратить.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 26.9.2014, 12:29
Сообщение #4


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

batonoid, а смысл? Деньги то опять сбросятся, счет сбросится и т.д.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя batonoid
сообщение 28.9.2014, 9:53
Сообщение #5


Стаж: 13 лет

Сообщений: 194
Благодарностей: 7
Полезность: < 0

Bloo,
Поймите ребят на сервере war3ft мод в котором есть такой предмет tome с помощью которого можно получать XP за деньги. Так вот по этому я и хочу попросить вас поставить какую нибудь проверку.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 28.9.2014, 12:40
Сообщение #6


Стаж: 13 лет
Город: Москва

Сообщений: 2037
Благодарностей: 1135
Полезность: 968

Меценат Меценат

http://amxxmodx.ru/scripts/108-ogranicheni...nom-raunde.html
это? \
откуда плагин?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: