Версия: 1.0
Описание:
Плагин позволяет передавать кредиты двумя способами: через меню и через чат.
- Чтобы открыть меню, используйте команду в чат /donate.
- Чтобы передать через чат, пишите так: /donate <ник> <количество кредитов>.
Идет подробное логирование, в нем пишется: ник передающего, ник получателя, количество паков и способ, которым они были отправлены (меню или чат).
В меню возможна передача кредитов всем игрокам (кредиты распределяются между ними).
Настройки:
/donate - меню передачи
/donate <ник> <кол-во кредитов> - передача через чат
Плагин, который я писал для своего сервера. По моему мнению, неплохо оформлен и добавлено несколько фич, которых нет в старой версии не моего плагина. Скидываю сюда, т.к. отпала необходимость в его использовании.
Исходник:
[pawn]
- #include <amxmodx>
- #include <amxmisc>
- #include <colorchat>
- #include <zombieplague>
- #define PLUGIN "[ZP] Donate Ammo"
- #define VERSION "1.0"
- #define AUTOR "Erasus"
- new gPlayer[33]
- new gNum
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTOR)
- register_clcmd("say", "HandleSay")
- register_clcmd("say_team", "HandleSay")
- register_clcmd("donate_number", "MessageModeGive")
- register_clcmd("donateall_number", "MessageModeAll")
- }
- public HandleSay(id)
- {
- new iArgs[64]
- read_args(iArgs, charsmax(iArgs))
- remove_quotes(iArgs)
- new iCmd[16]
- new iOther[32]
- strbreak(iArgs, iCmd, charsmax(iCmd), iOther, charsmax(iOther))
- if(equal(iCmd, "/donate", 7))
- {
- if(equal(iOther, ""))
- ShowMenu(id)
- else
- Donate(id, iOther)
- }
- }
- public ShowMenu(id)
- {
- new iMenu = menu_create("Кому передаем \rкредиты\y?", "MenuHandler")
- menu_additem(iMenu, "Распределить между всеми", "1", 0)
- new s_Players[32], i_Num, i_Player
- new s_Name[32], s_Player[10]
- get_players(s_Players, i_Num)
- for (new i; i < i_Num; i++)
- {
- i_Player = s_Players[i]
- get_user_name(i_Player, s_Name, charsmax(s_Name))
- num_to_str(i_Player+1, s_Player, charsmax(s_Player))
- menu_additem(iMenu, s_Name, s_Player, 0)
- }
- menu_setprop(iMenu , MPROP_NEXTNAME, "Далее")
- menu_setprop(iMenu , MPROP_BACKNAME, "Назад")
- menu_setprop(iMenu , MPROP_EXITNAME, "Выход")
- menu_setprop(iMenu , MPROP_EXIT, MEXIT_ALL)
- menu_display(id, iMenu, 0)
- }
- public MenuHandler(id, menu, item)
- {
- if (item == MENU_EXIT)
- {
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- new s_Data[6], s_Name[64], i_Access, i_Callback
- menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
- new iChoose = str_to_num(s_Data)
- if(iChoose == 1)
- DonateAll(id)
- else
- DonatePlayer(id, iChoose)
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- public Donate(id, arg[])
- {
- if(!is_user_connected(id))
- return PLUGIN_CONTINUE
- new iTargetString[32], iCountString[10]
- strbreak(arg, iTargetString, charsmax(iTargetString), iCountString, charsmax(iCountString))
- if (!iTargetString[0] || !iCountString[0])
- {
- ColorChat(id, RED, "^1[^4ZP^1] Для передачи кредитов используйте ^4/donate часть_ника кол-во паков^1.")
- return PLUGIN_CONTINUE
- }
- new iCount = str_to_num(iCountString)
- new iTarget = cmd_target(id, iTargetString, (CMDTARGET_ALLOW_SELF))
- if(!iTarget)
- {
- ColorChat(id, RED, "^1[^4ZP^1] Игрок с данным ником ^3не найден^1!")
- return PLUGIN_CONTINUE
- }
- if(iTarget == id)
- {
- ColorChat(id, RED, "^1[^4ZP^1] Вы ^3не можете ^1передать кредиты ^3себе^1!")
- return PLUGIN_CONTINUE
- }
- new iAmmo
- iAmmo = iCount
- if(zp_get_user_ammo_packs(id) < iCount)
- {
- if(zp_get_user_ammo_packs(id) == 0)
- {
- ColorChat(id, RED, "^1[^4ZP^1] У вас ^3нет ^1кредитов.")
- return PLUGIN_CONTINUE
- }
- iAmmo = zp_get_user_ammo_packs(id)
- }
- if(iAmmo < 0 || iAmmo == 0)
- {
- ColorChat(id, RED, "^1[^4ZP^1] Кол-во кредитов для передачи должно быть ^3больше нуля^1.")
- return PLUGIN_CONTINUE
- }
- if(iTarget == 0)
- return PLUGIN_CONTINUE
- zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - iAmmo)
- zp_set_user_ammo_packs(iTarget, zp_get_user_ammo_packs(iTarget) + iAmmo)
- new iName[32], iNameTarget[32]
- get_user_name(id, iName, charsmax(iName))
- get_user_name(iTarget, iNameTarget, charsmax(iNameTarget))
- ColorChat(0, BLUE, "^1[^4ZP^1] ^4%s ^1передал ^4%s ^3%d ^1кредитов.", iName, iNameTarget, iAmmo)
- log_amx("[Donate] %s sent %s %d packs via chat", iName, iNameTarget, iAmmo)
- return PLUGIN_CONTINUE
- }
- public DonateAll(id)
- {
- if(!is_user_connected(id))
- return PLUGIN_CONTINUE
- new iPlayers[32]
- get_players(iPlayers, gNum)
- if(gNum < 2)
- {
- ColorChat(id, RED, "^1[^4ZP^1] ^3Недостаточно игроков^1 для этой функции!")
- return PLUGIN_CONTINUE
- }
- client_cmd(id, "messagemode donateall_number")
- return PLUGIN_CONTINUE
- }
- public DonatePlayer(id, player)
- {
- gPlayer[id] = player - 1
- if(!is_user_connected(id))
- return PLUGIN_CONTINUE
- if(gPlayer[id] == id)
- {
- ColorChat(id, RED, "^1[^4ZP^1] Вы ^3не можете ^1передать кредиты ^3себе^1!")
- return PLUGIN_CONTINUE
- }
- if(!is_user_connected(gPlayer[id]))
- {
- ColorChat(id, RED, "^1[^4ZP^1] Выбранный игрок ^3вышел с сервера^1.")
- return PLUGIN_CONTINUE
- }
- client_cmd(id,"messagemode donate_number")
- return PLUGIN_CONTINUE
- }
- public MessageModeGive(id)
- {
- new iArgs[16]
- read_args(iArgs, charsmax(iArgs)) //
- if(!iArgs[0])
- {
- ColorChat(id, RED, "^1[^4ZP^1] В ^3появившейся строке ^1нужно ввести ^3кол-во кредитов для передачи^1.")
- return PLUGIN_CONTINUE
- }
- remove_quotes(iArgs)
- new iAmmo = str_to_num(iArgs)
- if(iAmmo == 0 || iAmmo < 0)
- {
- ColorChat(id, RED, "^1[^4ZP^1] ^3Число кредитов ^1для передачи должно быть ^3больше нуля^1!")
- iAmmo = 0
- return PLUGIN_CONTINUE
- }
- if(iAmmo > zp_get_user_ammo_packs(id))
- iAmmo = zp_get_user_ammo_packs(id)
- new iName1[32], iName2[32]
- get_user_name(id, iName1, charsmax(iName1))
- get_user_name(gPlayer[id], iName2, charsmax(iName2))
- ColorChat(0, BLUE, "^1[^4ZP^1] ^4%s ^1передал ^4%s ^3%d ^1кредитов.", iName1, iName2, iAmmo) //
- if(gPlayer[id] == 0)
- return PLUGIN_CONTINUE
- zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - iAmmo)
- zp_set_user_ammo_packs(gPlayer[id], zp_get_user_ammo_packs(gPlayer[id]) + iAmmo)
- log_amx("[Donate] %s sent %s %d packs via menu", iName1, iName2, iAmmo)
- return PLUGIN_CONTINUE
- }
- public MessageModeAll(id)
- {
- new iArgs[16]
- read_args(iArgs, charsmax(iArgs)) //
- if(!iArgs[0])
- {
- ColorChat(id, RED, "^1[^4ZP^1] В ^3появившейся строке ^1нужно ввести ^3кол-во кредитов для передачи^1.")
- return PLUGIN_CONTINUE
- }
- remove_quotes(iArgs)
- new iAmmo = str_to_num(iArgs)
- if(iAmmo == 0 || iAmmo < 0)
- {
- ColorChat(id, RED, "^1[^4ZP^1] ^3Число кредитов ^1для передачи должно быть ^3больше нуля^1!")
- iAmmo = 0
- return PLUGIN_CONTINUE
- }
- if(iAmmo < gNum)
- {
- ColorChat(id, RED, "^1[^4ZP^1] ^3Минимум ^1передачи - по^3 1 кредиту ^1каждому.")
- return PLUGIN_CONTINUE
- }
- if(iAmmo > zp_get_user_ammo_packs(id))
- iAmmo = zp_get_user_ammo_packs(id)
- new Float:iAttitude, Attitude
- iAttitude = float(iAmmo) / (float(gNum) - 1.0)
- Attitude = floatround(iAttitude, floatround_floor)
- new iName[32]
- get_user_name(id, iName, charsmax(iName))
- ColorChat(0, BLUE, "^1[^4ZP^1] ^4%s ^1подарил ^4всем ^1по^3 %d ^1кредитов.", iName, Attitude)
- log_amx("[Donate] %s sent all %d packs via menu", iName, Attitude)
- zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - iAmmo)
- for(new i=1; i <= gNum; i++)
- {
- if(!is_user_connected(i))
- continue
- if(i == id)
- continue
- zp_set_user_ammo_packs(i, zp_get_user_ammo_packs(i) + Attitude)
- }
- return PLUGIN_CONTINUE
- }