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

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

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

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

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

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

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

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

Передача денег

Статус пользователя firante
сообщение 6.8.2014, 22:54
Сообщение #1


Стаж: 12 лет

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

Привет всем вообщем такая ситуация есть данный плагин:
Money_transfer.sma
Код:
#include <amxmodx>
#include <cstrike>
#include <colorchat>

#define PLUGIN "Money Transferer"
#define VERSION "1.3"
#define AUTHOR "kalash1k, Edit by sOynd"
#define PREFIX "^4[^3Money^4]"

#define MAX_MONEY 16000
#define BASE_MONEY_AMOUNT 1000.0 // Need to be a float for calculations
/*
If you have $800 menus will be:
1) $100 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
2) $200 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
3) $300 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
4) $500 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
5) your_current_money_amount ($800 in our case)
6) "Type your own number"
*/

new players_menu, money_menu, players[32], num, i
new accessmenu, sName[64], callback
new msg[128]

new money_coef, money_amount

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

register_clcmd("say /tm", "transfer_menu", ADMIN_ALL, "") // TM - Transfer Money
register_clcmd("say tm", "transfer_menu", ADMIN_ALL, "")
register_clcmd("say_team /tm", "transfer_menu", ADMIN_ALL, "")
register_clcmd("say_team tm", "transfer_menu", ADMIN_ALL, "")
register_clcmd("tm", "transfer_menu", ADMIN_ALL, "")

register_clcmd("transfer", "transfer_money", ADMIN_ALL, "") // Just for using messagemode
}

public transfer_menu(id)
{
get_players(players, num, "che", cs_get_user_team(id)==CS_TEAM_CT ? "CT" : "TERRORIST")

if (num <= 1)
{
ColorChat(id, DontChange, "%s Некому передавать деньги", PREFIX)
return PLUGIN_HANDLED
}
if (!is_user_alive(id))
{
ColorChat(id, DontChange, "%s Вы мертвы", PREFIX)
return PLUGIN_HANDLED;
}


players_menu = menu_create("Кому передать деньги?", "players_menu_handler")

new tempname[32], info[10], main[172]

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

get_user_name(players[i], tempname, 31)
num_to_str(players[i], info, 9)
formatex(main, charsmax(main), "\w%s \r[\y%i\r]", tempname, cs_get_user_money(players[i]) );
menu_additem(players_menu, main, info, 0)
}

menu_setprop(players_menu, MPROP_NEXTNAME, "Далее")
menu_setprop(players_menu, MPROP_BACKNAME, "Назад")
menu_setprop(players_menu, MPROP_EXITNAME, "Выход")
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)
client_cmd(id, "optionsmenu")
return PLUGIN_HANDLED
}

new sData[6], menuTitle[127] // target id

menu_item_getinfo(players_menu, item, accessmenu, sData, 5, sName, 63, callback)

new user_money = cs_get_user_money(id)
money_coef = floatround(float(user_money) / BASE_MONEY_AMOUNT)
formatex(menuTitle, charsmax(menuTitle), "\wПередать деньги^n\dУ вас \y%d$^n", user_money );
money_menu = menu_create(menuTitle, "money_menu_handler")

new str[6]

for (new i = 1; i < 5; i++)
{
if(i == 4)
money_amount = 500 * money_coef
else
money_amount = 100 * i * money_coef

num_to_str(money_amount, str, 5)
menu_additem(money_menu, str, sData, 0)
}

num_to_str(user_money, str, 5)
menu_additem(money_menu, str, sData, 0)

menu_additem(money_menu, "Ввести кол-во", sData, 0)

menu_setprop(money_menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(money_menu, MPROP_EXITNAME, "Назад")

menu_display(id, money_menu, 0)
return PLUGIN_CONTINUE
}

public money_menu_handler(id, money_menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(money_menu)
menu_display(id, players_menu, 0)
return PLUGIN_CONTINUE
}

new sData[6] //target id

menu_item_getinfo(money_menu, item, accessmenu, sData, 5, sName, 63, callback)

sData[0] = str_to_num(sData)

switch(item)
{
case 0:
{
new iName = str_to_num(sName) // money amount
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 1:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 2:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 3:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 4:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 5:
formatex(msg, 127, "messagemode ^"transfer %i^"", sData[0])
}

client_cmd(id, msg)

return PLUGIN_CONTINUE
}

public transfer_money(id)
{
new param[9]

read_argv(1, param, 5)

new player = str_to_num(param)
new names[2][32]

get_user_name(player, names[1], 31)

if(is_user_bot(player) || !is_user_connected(player))
{
ColorChat(id, DontChange, "%s Игрока ^3%s ^4нет на сервере", PREFIX, names[1])
return PLUGIN_HANDLED
}

if(player == id)
{
ColorChat(id, DontChange, "%s Нельзя передать деньги себе.", PREFIX)
return PLUGIN_HANDLED
}

read_argv(2, param, 5)

new p_len = strlen(param)

for (new x; x < p_len; x++)
{
if(!isdigit(param[x]))
{
ColorChat(id, DontChange, "%s Параметр должен быть числом", PREFIX)
return PLUGIN_HANDLED
}
}

new amount = str_to_num(param)
new money = cs_get_user_money(id)

if (money < amount)
{
ColorChat(id, DontChange, "%s У вас не хватает денег", PREFIX)
return PLUGIN_HANDLED
}

if(amount < 100)
{
ColorChat(id, DontChange, "%s Нельзя передать меньше ^3100^4$", PREFIX)
return PLUGIN_HANDLED
}

new player_money = cs_get_user_money(player)

if(player_money == MAX_MONEY)
{
ColorChat(id, DontChange, "%s У игрока ^3%s ^4уже ^3%^4$i", PREFIX, names[1], MAX_MONEY)
return PLUGIN_HANDLED
}

get_user_name(id, names[0], 31)

new maxmoney = MAX_MONEY - player_money

if(maxmoney >= amount)
{
cs_set_user_money(id, money - amount, 1)
cs_set_user_money(player, player_money + amount, 1)

ColorChat(0, DontChange, "^3%s ^4передал ^3%i^4$ игроку ^3%s", PREFIX, amount, names[1])
ColorChat(0, player, "^3%s ^4получил ^3%d^4$ от игрока ^3%s", PREFIX, amount, names[0])

return PLUGIN_HANDLED
}

cs_set_user_money(id, maxmoney, 1)
cs_set_user_money(player, MAX_MONEY, 1)

ColorChat(0, DontChange, "^3%s ^4передал ^3%i^4$ игроку ^3%s", PREFIX, maxmoney, names[1])
ColorChat(0, player, "^3%s ^4получил ^3%d^4$ от игрока ^3%s", PREFIX, maxmoney, names[0])

return PLUGIN_HANDLED
}

Почему при передачи денег тоесть при команде /tm пишет "Не кому передавать деньги" ? Проверял с ботами и реальным игроком!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Templar
сообщение 6.8.2014, 22:57
Сообщение #2
Иконка группы

Стаж: 18 лет

Сообщений: 2680
Благодарностей: 978
Полезность: 860

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

Попробуй этот...
Прикрепленные файлы:
Прикрепленный файл  donate.sma ( 7,11 килобайт ) Кол-во скачиваний: 59
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 6.8.2014, 23:00
Сообщение #3


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

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

тебе стоит для начала узнать что делает функция
Код:
get_players(players, num, "che", cs_get_user_team(id)==CS_TEAM_CT ? "CT" : "TERRORIST")


get_players с флагами che и cs_get_user_team(id)==CS_TEAM_CT ? "CT" : "TERRORIST"
получает кол-во игроков и не считает ботов, не считает HLTV, считает игроков в командой игрока

т.е. можно передать только своей команде и не боту и не hltv
очевидно твой игрок был в противоположной команде....

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя firante
сообщение 6.8.2014, 23:02
Сообщение #4


Стаж: 12 лет

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

Legenda,
Помогите сделать что-бы любому можно было передавать плз
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 6.8.2014, 23:19
Сообщение #5


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

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

Цитата(firante @ 7.8.2014, 1:02) *
Legenda,
Помогите сделать что-бы любому можно было передавать плз

любому это кому ?
кто такой "любой" ?


попробуй удалить
Код:
   if (num <= 1)
   {
      ColorChat(id, DontChange, "%s Некому передавать деньги", PREFIX)
      return PLUGIN_HANDLED
   }



ps твой плагин у меня вообще не компилируется....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 7.8.2014, 0:17
Сообщение #6


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

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

Код:
#include <amxmodx>
#include <cstrike>

#define PREFIX "^3[^4Информация^3]^1"
#define is_valid_team(%1) ( 0 < %1 < 3 )

new players_menu, money_menu, num, i, accessmenu, money_coef, money_amount, callback, players[32], sName[64], msg[128]

public plugin_init()
{
register_plugin("Money Transferer", "1.4", "kalash1k, Edit by sOynd, Last edit miRror")

register_clcmd("say /tm", "transfer_menu")
register_clcmd("say tm", "transfer_menu")
register_clcmd("say_team /tm", "transfer_menu")
register_clcmd("say_team tm", "transfer_menu")
register_clcmd("tm", "transfer_menu")

register_clcmd("transfer", "transfer_money")
}

public transfer_menu(id)
{
new iTeam = _:cs_get_user_team ( id )

if ( !is_valid_team ( iTeam ) )
{
ChatColor(id, "%s Зайдите за одну из команд, чтобы передать деньги!", PREFIX)
return PLUGIN_HANDLED
}

if (!is_user_alive(id))
{
ChatColor(id, "%s Вы мертвы", PREFIX)
return PLUGIN_HANDLED;
}

get_players(players, num, "ch")

if (num <= 1)
{
ChatColor(id, "%s Некому передавать деньги", PREFIX)
return PLUGIN_HANDLED
}

players_menu = menu_create("Кому передать деньги?", "players_menu_handler")

new tempname[32], info[10], main[172]

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)
formatex(main, charsmax(main), "\w%s \r[\y%i\r]", tempname, cs_get_user_money(players[i]) );
menu_additem(players_menu, main, info, 0)
}

menu_setprop(players_menu, MPROP_NEXTNAME, "Далее")
menu_setprop(players_menu, MPROP_BACKNAME, "Назад")
menu_setprop(players_menu, MPROP_EXITNAME, "Выход")
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 sData[6], menuTitle[127]

menu_item_getinfo(players_menu, item, accessmenu, sData, 5, sName, 63, callback)

new user_money = cs_get_user_money(id)

money_coef = floatround(float(user_money) / 1000.0)

formatex(menuTitle, charsmax(menuTitle), "\wПередать деньги^n\dУ вас \y%d$^n", user_money );
money_menu = menu_create(menuTitle, "money_menu_handler")

new str[6]

for (new i = 1; i < 5; i++)
{
if(i == 4)
money_amount = 500 * money_coef
else
money_amount = 100 * i * money_coef

num_to_str(money_amount, str, 5)
menu_additem(money_menu, str, sData, 0)
}

num_to_str(user_money, str, 5)
menu_additem(money_menu, str, sData, 0)

menu_additem(money_menu, "Ввести кол-во", sData, 0)

menu_setprop(money_menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(money_menu, MPROP_EXITNAME, "Назад")

menu_display(id, money_menu, 0)
return PLUGIN_CONTINUE
}

public money_menu_handler(id, money_menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(money_menu)
menu_display(id, players_menu, 0)

return PLUGIN_CONTINUE
}

new sData[6]

menu_item_getinfo(money_menu, item, accessmenu, sData, 5, sName, 63, callback)

sData[0] = str_to_num(sData)

switch(item)
{
case 0 .. 4:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}

default:
formatex(msg, 127, "messagemode ^"transfer %i^"", sData[0])
}

client_cmd(id, msg)

return PLUGIN_CONTINUE
}

public transfer_money(id)
{
new param[9]

read_argv(1, param, 5)

new player = str_to_num(param)
new names[2][32]

get_user_name(player, names[1], 31)

if(!is_user_connected(player))
{
ChatColor(id, "%s Игрока ^4%s нет на сервере", PREFIX, names[1])
return PLUGIN_HANDLED
}

if(player == id)
{
ChatColor(id, "%s Нельзя передать деньги себе.", PREFIX)
return PLUGIN_HANDLED
}

read_argv(2, param, 5)

new p_len = strlen(param)

for (new x; x < p_len; x++)
{
if(!isdigit(param[x]))
{
ChatColor(id, "%s Параметр должен быть числом", PREFIX)
return PLUGIN_HANDLED
}
}

new amount = str_to_num(param)
new money = cs_get_user_money(id)

if (money < amount)
{
ChatColor(id, "%s У вас не хватает денег", PREFIX)
return PLUGIN_HANDLED
}

if(amount < 100)
{
ChatColor(id, "%s Нельзя передать меньше 100 $", PREFIX)
return PLUGIN_HANDLED
}

new player_money = cs_get_user_money(player)

if(player_money == 16000)
{
ChatColor(id, "%s У игрока ^4%s ^3уже ^4$%i", PREFIX, names[1], 16000)
return PLUGIN_HANDLED
}

get_user_name(id, names[0], 31)

new maxmoney = 16000 - player_money

if(maxmoney >= amount)
{
cs_set_user_money(id, money - amount, 1)
cs_set_user_money(player, player_money + amount, 1)

ChatColor(id, "%s ^1Вы ^3передали ^4$%i ^3%s", PREFIX, amount, names[1])
ChatColor(player, "%s Вам пришло^4 %d$ ^1от игрока ^3%s", PREFIX, amount, names[0])

return PLUGIN_HANDLED
}

cs_set_user_money(id, money - maxmoney, 1)
cs_set_user_money(player, 16000, 1)

ChatColor(id, "%s ^1Вы ^3передали ^4$%i ^3%s", PREFIX, maxmoney, names[1])
ChatColor(player, "%s Вам пришло^4 %d$ ^1от игрока ^3%s", PREFIX, maxmoney, names[0])

return PLUGIN_HANDLED
}

stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]

vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!team", "^3")

if (id) players[0] = id
else get_players(players, count, "ch")

for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}

return PLUGIN_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 7.8.2014, 10:16
Сообщение #7


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

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

Не дочитал ночью до конца - исправил, чтобы всем можно было передать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя panda08
сообщение 20.3.2015, 16:34
Сообщение #8


Стаж: 12 лет

Сообщений: 116
Благодарностей: 23
Полезность: 130

[AMXX] Displaying debug trace (plugin "Money_Transferer.amxx")
[AMXX] Run time error 10: native error (native "menu_display")
[AMXX] [0] Money_Transferer.sma::money_menu_handler (line 123)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: