Дополнение плагина zpshop

deniska21233

Пользователь
Регистрация
28 Июн 2017
Сообщения
99
Симпатии
3
Пол
Мужской
Код:
#include amxmodx
#include cstrike

/***********************************************************************
    Позволяет без проблем добавить оружия или предметы из Zombie модов
    Команда zpshop открывает меню с добавленными оружиями,
    оружия добавляются автоматически.
    Плагин регистрирует основные нативы ZP, при желании можете добавить
    свои, если знаете как. Вам не нужно формировать меню, достаточно в
    своих новых оружиях изменить цены или оставить такими как есть и
    вперед играть на сервере.
    Можете легко добавить новые функции "allFuncForwards" и регистрировать
    native в функции "array_registrs"
***********************************************************************/
new Array:ZP_ItemName, Array:ZP_ItemCost, Array:ZP_ItemTeam, ZP_ItemResult
/***********************************************************************
    CreateMultiForward - не буду описывать долго, и скажу кратко,
    это отлов функции в другом плагине, например в другом плагине
    есть функция zp_extra_item_selected(id, itemid) и мы его отлавливаем
    В zp 5.0 почему то отлавливались zp_fw_items_select_pre и zp_fw_items_select_post
    Решил перестраховаться и сюда добавил :))))
    О новых функциях прошу сообщить мне, поможем остальным vk.com/fixlink
***********************************************************************/
new const allFuncForwards[] = {
    "zp_extra_item_selected",
    "zp_fw_items_select_pre",
    "zp_fw_items_select_post"
}
const sizeforward = sizeof allFuncForwards
/**************Нативы для регистрации Extra Item***************/
new const array_registrs[] = {
    "zp_register_extra_item",
    "zm_register_extra_item"
}
const sizeregistrs = sizeof array_registrs

new ZP_ItemForward[sizeforward]
public plugin_init()
{
    register_plugin("ZP EXTRA SHOP", "0.1", "pro100web")
    register_clcmd("say /zpshop", "ZP_extrashop")
    register_clcmd("say zpshop", "ZP_extrashop")
    register_clcmd("say_team /zpshop", "ZP_extrashop")
    for(new i = 0; i < sizeforward; i++){
        ZP_ItemForward[i] = CreateMultiForward(allFuncForwards[i], ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL)
    }
}
 
public ZP_extrashop(id, page){
    new ZPMenu[96], szName[64], ZPKey[3]
    new zpextra_sz = ArraySize(ZP_ItemName)
    if(zpextra_sz<=0){
        ChatColor(id, "^3[^4Extra Items^3] ^1Магазин пуст");
        return 0
    }
    format(ZPMenu, charsmax(ZPMenu), "ZP Extra Items")
    new sz_ExtraMenu = menu_create(ZPMenu, "ZP_extrashop_func")
    for(new i = 0; i < zpextra_sz; i++){
        format(ZPKey, charsmax(ZPKey),"%i",i)
        ArrayGetString(ZP_ItemName, i, szName, charsmax(szName))
        formatex(ZPMenu, charsmax(ZPMenu), "%s \y[%i$]", szName, ArrayGetCell(ZP_ItemCost, i))
        menu_additem(sz_ExtraMenu, ZPMenu, ZPKey)
    }
    menu_setprop(sz_ExtraMenu, MPROP_NEXTNAME, "Дальше")
    menu_setprop(sz_ExtraMenu, MPROP_BACKNAME, "Назад")
    menu_setprop(sz_ExtraMenu, MPROP_EXITNAME, "Выход")
    menu_display(id, sz_ExtraMenu, page)
    return 1
}

public ZP_extrashop_func(id, ZPMenu, szItem)
{
    if(szItem == MENU_EXIT)
        return menu_destroy(ZPMenu)
    new szData[3]
    new szDummy
    new szCost, szMoney = cs_get_user_money(id)
    menu_item_getinfo(ZPMenu, szItem, szDummy, szData, charsmax(szData), _, _, szDummy)
    szItem = str_to_num(szData)
    szCost = ArrayGetCell(ZP_ItemCost, szItem)
    menu_destroy(ZPMenu)
    cs_set_user_money(id, szMoney - szCost, 1)
    extrabuyitem(id, szItem)
    return 1
}

extrabuyitem(id, szItem, ignorecost = 0){ // Если не покупается оружие, то сообщите мне vk.com/fixlink или добавьте форвард в ZP_ItemForward
    for(new i = 0; i < sizeforward; i++){
        ExecuteForward(ZP_ItemForward[i], ZP_ItemResult, id, szItem, ignorecost)
        if(ZP_ItemResult>=1) break;
    }
}

public plugin_precache(){
    ZP_ItemName = ArrayCreate(64, 1)
    ZP_ItemCost = ArrayCreate(1, 1)
    ZP_ItemTeam = ArrayCreate(1, 1)
}

public plugin_natives(){
    for(new i = 0; i < sizeregistrs; i++) register_native(array_registrs[i], "nativezp_register_extra_item", 1);
    register_native("zp_get_user_zombie", "native_zp_get_user_zombie", 1);
    register_native("zp_get_user_survivor", "native_zp_get_user_survivor", 1);
    return 1;
}

public nativezp_register_extra_item(const Name[], const Cost, const Team){
    param_convert(1)
    ArrayPushString(ZP_ItemName, Name)
    ArrayPushCell(ZP_ItemCost, Cost)
    ArrayPushCell(ZP_ItemTeam, Team)
    return (ArraySize(ZP_ItemName) - 1)
}

public native_zp_get_user_zombie(id) return 0;

public native_zp_get_user_survivor(id) return 0;

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") // Green Color
    replace_all(msg, 190, "!y", "^1") // Default Color
    replace_all(msg, 190, "!team", "^3") // Team Color
    replace_all(msg, 190, "!team2", "^0") // Team2 Color
  
    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();
            }
        }
    }
}

Здравствуйте , помоигите пожалуйста дополнить плагин
1Й Если закончились деньги то плагин выдает стволы бесплатно и дает деньги от их цены (Надо бы исправить чтобы плагин не давал стволы бесплатно)
2Й Чтобы магазин закрывался и не открывался если игрок мёртв
 

Molodoi

Команда форума
Модератор
Регистрация
14 Июн 2017
Сообщения
608
Симпатии
126
deniska21233, в исходнике я заметил контакты автора даного скрипта. Думаю верным решением нужно было обратится к нему чтоб он профиксил баги. Но раз уж вы сюда написали думаю надётся человек который вам поможет.
 

deniska21233

Пользователь
Регистрация
28 Июн 2017
Сообщения
99
Симпатии
3
Пол
Мужской
deniska21233, в исходнике я заметил контакты автора даного скрипта. Думаю верным решением нужно было обратится к нему чтоб он профиксил баги. Но раз уж вы сюда написали думаю надётся человек который вам поможет.
Автор не заходит в вк надеюсь тут помогут
 

deniska21233

Пользователь
Регистрация
28 Июн 2017
Сообщения
99
Симпатии
3
Пол
Мужской
Помогите плз )
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский

StockX

Скриптер
Регистрация
8 Июн 2017
Сообщения
168
Симпатии
132
Пол
Мужской
Код:
public ZP_extrashop(id, page){
    new ZPMenu[96], szName[64], ZPKey[3]
->

Код:
public ZP_extrashop(id, page){
    if(!is_user_alive(id))
        return;
    new ZPMenu[96], szName[64], ZPKey[3]
По первому пункту не совсем понял.
 

deniska21233

Пользователь
Регистрация
28 Июн 2017
Сообщения
99
Симпатии
3
Пол
Мужской
Код:
public ZP_extrashop(id, page){
    new ZPMenu[96], szName[64], ZPKey[3]
->

Код:
public ZP_extrashop(id, page){
    if(!is_user_alive(id))
        return;
    new ZPMenu[96], szName[64], ZPKey[3]
По первому пункту не совсем понял.
Если деньги закончились то он дает бесплатно ствол + бабки которые он стоит
А именно если ствол стоил 2000 тысячи то он даст его бесплатно и эти же 2000 тысячи закинет при его покупке и что странно будет докидывать без понижения в начислении[DOUBLEPOST=1554978288][/DOUBLEPOST]
Код:
public ZP_extrashop(id, page){
    new ZPMenu[96], szName[64], ZPKey[3]
->

Код:
public ZP_extrashop(id, page){
    if(!is_user_alive(id))
        return;
    new ZPMenu[96], szName[64], ZPKey[3]
По первому пункту не совсем понял.
Может там проверку какую нибудь чтобы без денег не давал а то получается он уходит в минус начисляя бабки
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
Diff:
public ZP_extrashop_func(id, ZPMenu, szItem)
{
    if(szItem == MENU_EXIT)
        return menu_destroy(ZPMenu)
    new szData[3]
    new szDummy
    new szCost, szMoney = cs_get_user_money(id)
    menu_item_getinfo(ZPMenu, szItem, szDummy, szData, charsmax(szData), _, _, szDummy)
    szItem = str_to_num(szData)
    szCost = ArrayGetCell(ZP_ItemCost, szItem)
    menu_destroy(ZPMenu)
+    if(szMoney < szCost)
+    {
+        ChatColor(id, "^3[^4Extra Items^3] ^1Недостаточнно средств");
+        return 0;
+    }
    cs_set_user_money(id, szMoney - szCost, 1)
    extrabuyitem(id, szItem)
    return 1
}
 

deniska21233

Пользователь
Регистрация
28 Июн 2017
Сообщения
99
Симпатии
3
Пол
Мужской
Код:
#include amxmodx
#include cstrike

/***********************************************************************
    Позволяет без проблем добавить оружия или предметы из Zombie модов
    Команда zpshop открывает меню с добавленными оружиями,
    оружия добавляются автоматически.
    Плагин регистрирует основные нативы ZP, при желании можете добавить
    свои, если знаете как. Вам не нужно формировать меню, достаточно в
    своих новых оружиях изменить цены или оставить такими как есть и
    вперед играть на сервере.
    Можете легко добавить новые функции "allFuncForwards" и регистрировать
    native в функции "array_registrs"
***********************************************************************/
new Array:ZP_ItemName, Array:ZP_ItemCost, Array:ZP_ItemTeam, ZP_ItemResult
/***********************************************************************
    CreateMultiForward - не буду описывать долго, и скажу кратко,
    это отлов функции в другом плагине, например в другом плагине
    есть функция zp_extra_item_selected(id, itemid) и мы его отлавливаем
    В zp 5.0 почему то отлавливались zp_fw_items_select_pre и zp_fw_items_select_post
    Решил перестраховаться и сюда добавил :))))
    О новых функциях прошу сообщить мне, поможем остальным vk.com/fixlink
***********************************************************************/
new const allFuncForwards[] = {
    "zp_extra_item_selected",
    "zp_fw_items_select_pre",
    "zp_fw_items_select_post"
}
const sizeforward = sizeof allFuncForwards
/**************Нативы для регистрации Extra Item***************/
new const array_registrs[] = {
    "zp_register_extra_item",
    "zm_register_extra_item"
}
const sizeregistrs = sizeof array_registrs

new ZP_ItemForward[sizeforward]
public plugin_init()
{
    register_plugin("ZP EXTRA SHOP", "0.1", "pro100web")
    register_clcmd("say /zpshop", "ZP_extrashop")
    register_clcmd("say zpshop", "ZP_extrashop")
    register_clcmd("say_team /zpshop", "ZP_extrashop")
    for(new i = 0; i < sizeforward; i++){
        ZP_ItemForward[i] = CreateMultiForward(allFuncForwards[i], ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL)
    }
}
 
public ZP_extrashop(id, page){
    if(!is_user_alive(id))
        return;
    new ZPMenu[96], szName[64], ZPKey[3]
    new zpextra_sz = ArraySize(ZP_ItemName)
    if(zpextra_sz<=0){
        ChatColor(id, "^3[^4Extra Items^3] ^1Магазин пуст");
        return 0
    }
    format(ZPMenu, charsmax(ZPMenu), "ZP Extra Items")
    new sz_ExtraMenu = menu_create(ZPMenu, "ZP_extrashop_func")
    for(new i = 0; i < zpextra_sz; i++){
        format(ZPKey, charsmax(ZPKey),"%i",i)
        ArrayGetString(ZP_ItemName, i, szName, charsmax(szName))
        formatex(ZPMenu, charsmax(ZPMenu), "%s \y[%i$]", szName, ArrayGetCell(ZP_ItemCost, i))
        menu_additem(sz_ExtraMenu, ZPMenu, ZPKey)
    }
    menu_setprop(sz_ExtraMenu, MPROP_NEXTNAME, "Дальше")
    menu_setprop(sz_ExtraMenu, MPROP_BACKNAME, "Назад")
    menu_setprop(sz_ExtraMenu, MPROP_EXITNAME, "Выход")
    menu_display(id, sz_ExtraMenu, page)
    return 1
}

public ZP_extrashop_func(id, ZPMenu, szItem)
{
    if(szItem == MENU_EXIT)
        return menu_destroy(ZPMenu)
    new szData[3]
    new szDummy
    new szCost, szMoney = cs_get_user_money(id)
    menu_item_getinfo(ZPMenu, szItem, szDummy, szData, charsmax(szData), _, _, szDummy)
    szItem = str_to_num(szData)
    szCost = ArrayGetCell(ZP_ItemCost, szItem)
    menu_destroy(ZPMenu)
    if(szMoney < szCost)
    {
        ChatColor(id, "^3[^4Extra Items^3] ^1Недостаточнно средств");
        return 0;
    }
    cs_set_user_money(id, szMoney - szCost, 1)
    extrabuyitem(id, szItem)
    return 1
}

extrabuyitem(id, szItem, ignorecost = 0){ // Если не покупается оружие, то сообщите мне vk.com/fixlink или добавьте форвард в ZP_ItemForward
    for(new i = 0; i < sizeforward; i++){
        ExecuteForward(ZP_ItemForward[i], ZP_ItemResult, id, szItem, ignorecost)
        if(ZP_ItemResult>=1) break;
    }
}

public plugin_precache(){
    ZP_ItemName = ArrayCreate(64, 1)
    ZP_ItemCost = ArrayCreate(1, 1)
    ZP_ItemTeam = ArrayCreate(1, 1)
}

public plugin_natives(){
    for(new i = 0; i < sizeregistrs; i++) register_native(array_registrs[i], "nativezp_register_extra_item", 1);
    register_native("zp_get_user_zombie", "native_zp_get_user_zombie", 1);
    register_native("zp_get_user_survivor", "native_zp_get_user_survivor", 1);
    return 1;
}

public nativezp_register_extra_item(const Name[], const Cost, const Team){
    param_convert(1)
    ArrayPushString(ZP_ItemName, Name)
    ArrayPushCell(ZP_ItemCost, Cost)
    ArrayPushCell(ZP_ItemTeam, Team)
    return (ArraySize(ZP_ItemName) - 1)
}

public native_zp_get_user_zombie(id) return 0;

public native_zp_get_user_survivor(id) return 0;

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") // Green Color
    replace_all(msg, 190, "!y", "^1") // Default Color
    replace_all(msg, 190, "!team", "^3") // Team Color
    replace_all(msg, 190, "!team2", "^0") // Team2 Color
 
    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();
            }
        }
    }
}
Ещё не проверял но спасибо за помощь
Ошибка при компиляции с проблемой что макарон помогал решить


// C:\═ютр яряър\amxmodx\scripting\zpshop.sma(51) : warning 209: function "ZP_extrashop" should return a value
// C:\═ютр яряър\amxmodx\scripting\zpshop.sma(56) : error 078: function uses both "return" and "return <value>"
// C:\═ютр яряър\amxmodx\scripting\zpshop.sma(70) : error 078: function uses both "return" and "return <value>"
 

deniska21233

Пользователь
Регистрация
28 Июн 2017
Сообщения
99
Симпатии
3
Пол
Мужской
Первый пункт решен спасибо огромное georgeml
А вот второй пункт ещё нет (
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
Diff:
if(!is_user_alive(id))
-    return;
+    return 0;
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
Такие правки г-кода только растирают его, а не вытирают)
Diff:
public ZP_extrashop_func(id, ZPMenu, szItem)
{
-    if(szItem == MENU_EXIT)
+    if(szItem == MENU_EXIT || !is_user_alive(id))
        return menu_destroy(ZPMenu)
 

deniska21233

Пользователь
Регистрация
28 Июн 2017
Сообщения
99
Симпатии
3
Пол
Мужской
Такие правки г-кода только растирают его, а не вытирают)
Diff:
public ZP_extrashop_func(id, ZPMenu, szItem)
{
-    if(szItem == MENU_EXIT)
+    if(szItem == MENU_EXIT || !is_user_alive(id))
        return menu_destroy(ZPMenu)
Спасибо позже отпишу результат[DOUBLEPOST=1555043310][/DOUBLEPOST]
Такие правки г-кода только растирают его, а не вытирают)
Diff:
public ZP_extrashop_func(id, ZPMenu, szItem)
{
-    if(szItem == MENU_EXIT)
+    if(szItem == MENU_EXIT || !is_user_alive(id))
        return menu_destroy(ZPMenu)
С открытым меню пишу килл в консоли оно не закрывается
Или будет как надо работать если игрок убьет ?
 

deniska21233

Пользователь
Регистрация
28 Июн 2017
Сообщения
99
Симпатии
3
Пол
Мужской
Меню не закроется, но для мертвого игрока действия с ним не будут выполнены.
Проблема в том что у меня ксдм сервер
и при возрождении оно торчит
Получается во время мясца надо закрыть его а потом уже брать с мода стволы и как то не очень удобно когда везде маслины летят )
 
Сверху Снизу