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

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

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

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

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

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

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

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

Баг с donate

, Передача аммо
Статус пользователя Zhenya123
сообщение 19.8.2013, 2:42
Сообщение #1
Стаж: 12 лет

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

как убрать баг чтобы игроки через консоль не могли передать аммо самим себе?

Вот исходник: http://rghost.ru/48216246
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
eckoecko
сообщение 19.8.2013, 8:57
Сообщение #2
Стаж: 14 лет

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

Цитата(Zhenya123 @ 19.8.2013, 2:42) *
как убрать баг чтобы игроки через консоль не могли передать аммо самим себе?

Вот исходник: http://rghost.ru/48216246

скачать нельзя, выложи под спойлер
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Gani97Kz
сообщение 19.8.2013, 10:06
Сообщение #3


Стаж: 12 лет
Город: Харьков

Сообщений: 418
Благодарностей: 218
Полезность: 449

Вот исходник для ленивых


Код
#include <amxmodx>
#include <cstrike>
#include <zombieplague>
#include <dhudmessage>

#define    PLUGIN    "ammo donate/dhud"
#define    VERSION    "1.5"
#define    AUTHOR    "user/zobie-dead bug fix/phantom fix"

new players_menu, players[32], num, i
new accessmenu, iName[64], callback
public plugin_init()
{    
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /donate", "transfer_menu", ADMIN_ALL, "")    //  команды для вызова меню


register_clcmd("transfer", "transfer_ammo", ADMIN_ALL, "")
}
public transfer_menu(id)
{  
get_players(players, num, "h")      
if (num <= 1)  
{      
set_dhudmessage(0, 155, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)                
show_dhudmessage(id,"Некому передать аммо")      
return PLUGIN_HANDLED    
}  
    
new tempname[32], info[10]  
  
players_menu = menu_create("Игроки", "players_menu_handler")  

for(i = 0; i < num; i++)
{      
if(players[i] == id)          
continue  
            
get_user_name(players[i], tempname, 31)      
num_to_str(players[i], info, 9)      
menu_additem(players_menu, tempname, info, 0)    
}      
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL)  

menu_display(id, players_menu, 0)  
return PLUGIN_CONTINUE
}

public players_menu_handler(id, players_menu, item)
{
if(item == MENU_EXIT)  
{      
menu_destroy(players_menu)      
return PLUGIN_HANDLED  
}    
  
new data[6]  

menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)

new player = str_to_num(data)  
      
client_cmd(id, "messagemode ^"transfer %i^"", player)  

return PLUGIN_CONTINUE
}

public transfer_ammo(id)
{    
new param[6]    
read_argv(2, param, charsmax(param))

for (new x; x < strlen(param); x++)    
{      
if(!isdigit(param[x]))      
{            
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)            
show_dhudmessage(id,"Параметр должен быть числом")            
return 0        
}    
}    
  
new amount = str_to_num(param)  
    
new ammo = zp_get_user_ammo_packs(id)

if (ammo < amount)    
{            
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)            
show_dhudmessage(id,"У  вас не хватает аммо")        
return 0    
}
      
read_argv(1, param, charsmax(param))  
new player = str_to_num(param)
      
new player_ammo = zp_get_user_ammo_packs(player)

zp_set_user_ammo_packs(id, ammo - amount)    
zp_set_user_ammo_packs(player, player_ammo + amount)    
  
new names[2][32]        

get_user_name(id, names[0], 31)    
get_user_name(player, names[1], 31)        

set_dhudmessage(0, 125, 200, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)    
show_dhudmessage(0,"Игрок %s передал %i аммо %s", names[0], amount, names[1])        
return 0
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE*{\ rtf1\ ansi\ deff0{\ fonttbl{\ f0\ fnil Tahoma;}}n\ viewkind4\ uc1\ pard\ lang1049\ f0\ fs16 n\ par }*/


Отредактировал: Gani97Kz, - 19.8.2013, 10:07
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sky Cat
сообщение 19.8.2013, 10:28
Сообщение #4
Стаж: 13 лет
Город: Белгород

Сообщений: 1179
Благодарностей: 734
Полезность: 1056

ADMIN_ALL - Поменяй на какой-либо другой флаг доступа

ADMIN_ALL - это для всех доступно.


я знаю, что я ничего не знаю
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 19.8.2013, 10:31
Сообщение #5


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Цитата(insamez @ 19.8.2013, 11:28) *
ADMIN_ALL - Поменяй на какой-либо другой флаг доступа

ADMIN_ALL - это для всех доступно.

Вопрос к чему это ты написал?

Цитата
как убрать баг чтобы игроки через консоль не могли передать аммо самим себе?

на всякий случай


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sky Cat
сообщение 19.8.2013, 10:35
Сообщение #6
Стаж: 13 лет
Город: Белгород

Сообщений: 1179
Благодарностей: 734
Полезность: 1056

Цитата(vovan4ik1997 @ 19.8.2013, 12:31) *
Вопрос к чему это ты написал?


на всякий случай

я не проснулся:)


я знаю, что я ничего не знаю
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
eckoecko
сообщение 19.8.2013, 10:35
Сообщение #7
Стаж: 14 лет

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

Zhenya123,
Скрытый текст
Код:
#include <amxmodx>
#include <cstrike>
#include <zombieplague>
#include <dhudmessage>

#define PLUGIN "ammo donate/dhud"
#define VERSION "1.5"
#define AUTHOR "user/zobie-dead bug fix/phantom fix"

new players_menu, players[32], num, i
new accessmenu, iName[64], callback
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /donate", "transfer_menu", ADMIN_IMMUNITY, "") // команды для вызова меню


register_clcmd("transfer", "transfer_ammo", ADMIN_IMMUNITY, "")
}
public transfer_menu(id)
{
get_players(players, num, "h")
if (num <= 1)
{
set_dhudmessage(0, 155, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"Некому передать аммо")
return PLUGIN_HANDLED
}

new tempname[32], info[10]

players_menu = menu_create("Игроки", "players_menu_handler")

for(i = 0; i < num; i++)
{
if(players[i] == id)
continue

get_user_name(players[i], tempname, 31)
num_to_str(players[i], info, 9)
menu_additem(players_menu, tempname, info, 0)
}
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL)

menu_display(id, players_menu, 0)
return PLUGIN_CONTINUE
}

public players_menu_handler(id, players_menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(players_menu)
return PLUGIN_HANDLED
}

new data[6]

menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)

new player = str_to_num(data)

client_cmd(id, "messagemode ^"transfer %i^"", player)

return PLUGIN_CONTINUE
}

public transfer_ammo(id)
{
new param[6]
read_argv(2, param, charsmax(param))

for (new x; x < strlen(param); x++)
{
if(!isdigit(param[x]))
{
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"Параметр должен быть числом")
return 0
}
}

new amount = str_to_num(param)

new ammo = zp_get_user_ammo_packs(id)

if (ammo < amount)
{
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"У вас не хватает аммо")
return 0
}

read_argv(1, param, charsmax(param))
new player = str_to_num(param)

new player_ammo = zp_get_user_ammo_packs(player)

zp_set_user_ammo_packs(id, ammo - amount)
zp_set_user_ammo_packs(player, player_ammo + amount)

new names[2][32]

get_user_name(id, names[0], 31)
get_user_name(player, names[1], 31)

set_dhudmessage(0, 125, 200, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(0,"Игрок %s передал %i аммо %s", names[0], amount, names[1])
return 0
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE*{\ rtf1\ ansi\ deff0{\ fonttbl{\ f0\ fnil Tahoma;}}n\ viewkind4\ uc1\ pard\ lang1049\ f0\ fs16 n\ par }*/
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Zhenya123
сообщение 19.8.2013, 12:34
Сообщение #8
Стаж: 12 лет

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

eckoecko,
Баг все равно есть

Пишешь в консоль status
потом transfer id 100
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Zhenya123
сообщение 19.8.2013, 12:54
Сообщение #9
Стаж: 12 лет

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

insamez,
если поменять флаг доступа игроки не смогут передавать аммо
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 19.8.2013, 14:05
Сообщение #10


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

Zhenya123, а что происходит при передаче? Ошибки появляются в логах или дублируется аммо? Банк на сервере есть?
Честно говоря это полный быдлокод, какой то школьник на коленке писал явно.
Замени это в коде:
Часть 1
Код:
new players_menu, players[32], num, i

--->

Код:
new players_menu, players[32], num, i, player


Часть 2
Код:
new player = str_to_num(data)

client_cmd(id, "messagemode ^"transfer %i^"", player)

--->

Код:
player = str_to_num(data)

if(id != player)
{
client_cmd(id, "messagemode ^"transfer %i^"", player)
}

Часть 3
Код:

public transfer_ammo(id)
{
new param[6]

--->

Код:

public transfer_ammo(id)
{
if(!is_user_connected(id) || !is_user_connected(player) || id == player)
return PLUGIN_HANDLED

new param[6]


Отредактировал: Fintok, - 19.8.2013, 14:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя YodL
сообщение 19.8.2013, 15:03
Сообщение #11
Стаж: 15 лет

Сообщений: 93
Благодарностей: 47
Полезность: 205

А что будет если пока клиентская команда идет клиенту и обратно, кто-то еще раз что-то выберет в меню?


Цитата
как убрать баг чтобы игроки через консоль не могли передать аммо самим себе?
Там же все-равно вычтется из твоих аммо и столько же прибавится, то есть ничего не изменится, или я не прав?

Я бы вставил в код это:
Цитата
read_argv(1, param, charsmax(param))
new player = str_to_num(param)

if(player == id)
{
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"Нельзя передавать аммо самому себе")
return 0
}


new player_ammo = zp_get_user_ammo_packs(player)

zp_set_user_ammo_packs(id, ammo - amount)
zp_set_user_ammo_packs(player, player_ammo + amount)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Zhenya123
сообщение 19.8.2013, 16:16
Сообщение #12
Стаж: 12 лет

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

YodL,
Нет там добавляется сумма которую ты передал
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя John1994
сообщение 19.8.2013, 18:40
Сообщение #13
Стаж: 13 лет

Сообщений: 374
Благодарностей: 97
Полезность: 183

найдите в коде это:

register_clcmd("transfer", "transfer_ammo", ADMIN_IMMUNITY, "")

И меняйте команду "transfer" на свою.Допустим donatsa___ .
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 19.8.2013, 18:51
Сообщение #14
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

if(player == id) return 0

Этого достаточно и не нужно ничего выдумывать.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Butterfly
сообщение 18.12.2014, 21:02
Сообщение #15


Стаж: 11 лет

Сообщений: 49
Благодарностей: 1
Полезность: 18

Thank)

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