Передать массив нативом

Статус
В этой теме нельзя размещать новые ответы.

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
Допустим есть такой плагин, в котором хранятся монетки игроков:
C++:
#include <amxmodx>

new g_Coins[33]

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /get","GetCoin")
    register_clcmd("say /get20","GetCoin20")
    register_clcmd("say /check","CheckCoin")
}

public GetCoin(id)
{
    g_Coins[id]++
}

public GetCoin20(id)
{
    g_Coins[id] += 20
}

public CheckCoin(id)
{
    client_print_color(id, print_chat, "g_Coins = %d", g_Coins[id])
}
И есть другой плагин, в котором хотелось сделать, чтобы игроки покупали что-либо за эти монетки:

C++:
#include <amxmodx>
#include <cstrike>

new g_Coins[33]

#define Buy 5

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /buy","BuyByCoins")
}

public BuyByCoins(id)
{
    if(g_Coins[id] >= Buy)
    {
        g_Coins[id] -= Buy
        cs_set_user_money(id, cs_get_user_money(id)+10000)
    }
    else
    {
        client_print_color(id, print_chat, "Не достаточно средств. (%d/%d)", g_Coins[id], Buy)
    }
}
Как передать значения и вообще как это сделать? По гайдикам смог сделать натив с обычной переменной. А с массивом чет не вдупляю
 

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
1.217
Симпатии
304
Mandar1n,
PHP:
#include <amxmodx>

new g_Coins[33]

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /get","GetCoin")
    register_clcmd("say /get20","GetCoin20")
    register_clcmd("say /check","CheckCoin")
}

public plugin_natives()
    register_native("g_Coinsed", "g_CoinsNative", 1);
   
public g_CoinsNative(id)
    return g_Coins[id];

public GetCoin(id)
{
    g_Coins[id]++
}

public GetCoin20(id)
{
    g_Coins[id] += 20
}

public CheckCoin(id)
{
    client_print_color(id, print_chat, "g_Coins = %d", g_Coins[id])
}
PHP:
#include <amxmodx>
#include <cstrike>

#define Buy 5

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /buy","BuyByCoins")
}

native g_Coinsed(id);

public BuyByCoins(id)
{
    if(g_Coinsed[id] >= Buy)
    {
        g_Coinsed[id] -= Buy
        cs_set_user_money(id, cs_get_user_money(id)+10000)
    }
    else
    {
        client_print_color(id, print_chat, "Не достаточно средств. (%d/%d)", g_Coinsed[id], Buy)
    }
}

Попробуй вот так
 

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
To be or not to be, со вторым плагином трабла. Чет про массив
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
686
Симпатии
196
Пол
Мужской
ВКонтакте
e1337ace
Допустим есть такой плагин, в котором хранятся монетки игроков:
C++:
#include <amxmodx>

new g_Coins[33]

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /get","GetCoin")
    register_clcmd("say /get20","GetCoin20")
    register_clcmd("say /check","CheckCoin")
}

public GetCoin(id)
{
    g_Coins[id]++
}

public GetCoin20(id)
{
    g_Coins[id] += 20
}

public CheckCoin(id)
{
    client_print_color(id, print_chat, "g_Coins = %d", g_Coins[id])
}
И есть другой плагин, в котором хотелось сделать, чтобы игроки покупали что-либо за эти монетки:

C++:
#include <amxmodx>
#include <cstrike>

new g_Coins[33]

#define Buy 5

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /buy","BuyByCoins")
}

public BuyByCoins(id)
{
    if(g_Coins[id] >= Buy)
    {
        g_Coins[id] -= Buy
        cs_set_user_money(id, cs_get_user_money(id)+10000)
    }
    else
    {
        client_print_color(id, print_chat, "Не достаточно средств. (%d/%d)", g_Coins[id], Buy)
    }
}
Как передать значения и вообще как это сделать? По гайдикам смог сделать натив с обычной переменной. А с массивом чет не вдупляю
Это в самый конец первого плагина:
Код:
public plugin_natives()
    register_native("get_user_coins", "_get_user_coins", 1)

public _get_user_coins(id, bool:bCheckConnect)
{
    if (bCheckConnect && !is_user_connected(id))
        return -1
    return g_Coins[id]
}
Это после всех модулей во втором плагине:

Пример:
#include <amxmodx>
#include <fakemeta>

// Возвратит кол-во монеток. (+ тут проверка на коннект игрока)
native get_user_coins(index, bool:bCheckConnect = true)

Это сама функция будет!
get_user_coins(id)

Надеюсь все понятно?
 
Последнее редактирование:

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
Анатолий, не совсем понял как использовать get_user_coins(id) и это нормально что я объявил g_Coins[33] во втором плагине тоже?[DOUBLEPOST=1522098026][/DOUBLEPOST]Анатолий, error 021: symbol already defined: "get_user_coins"

C++:
#include <amxmodx>
#include <cstrike>

native get_user_coins(index, bool:bCheckConnect = true)

new g_Coins[33]

#define Buy 5

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /buy", "get_user_coins")
}

public get_user_coins(id)
{
    g_Coins[id]++
}
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
686
Симпатии
196
Пол
Мужской
ВКонтакте
e1337ace
Анатолий, не совсем понял как использовать get_user_coins(id) и это нормально что я объявил g_Coins[33] во втором плагине тоже?
new g_Coins[33] Это норма)
в первом плагине ты юзаешь g_Coins[id] а во втором плагине за место g_Coins[id] используешь get_user_coins(id) ясн??
 

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
Анатолий, error 022: must be lvalue (non-constant)
C++:
#include <amxmodx>
#include <cstrike>

native get_user_coins(index, bool:bCheckConnect = true)

//new g_Coins[33]

#define Buy 5

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /buy", "Hello")
}

public Hello(id)
{
    get_user_coins(id)++
}
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
686
Симпатии
196
Пол
Мужской
ВКонтакте
e1337ace
Анатолий, error 022: must be lvalue (non-constant)
C++:
#include <amxmodx>
#include <cstrike>

native get_user_coins(index, bool:bCheckConnect = true)

//new g_Coins[33]

#define Buy 5

public plugin_init()
{
    register_plugin("Ku", "1.0", "Mandarinovyi Nativ")
    register_clcmd("say /buy", "Hello")
}

public Hello(id)
{
    get_user_coins(id)++
}
не верно натив используешь просто
 

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
Анатолий, get_user_coins(id, true) так?[DOUBLEPOST=1522098712][/DOUBLEPOST]Анатолий, мне просто хотя бы убедится, что число изменяется в другом плагине
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
686
Симпатии
196
Пол
Мужской
ВКонтакте
e1337ace
Анатолий, get_user_coins(id, true) так?[DOUBLEPOST=1522098712][/DOUBLEPOST]Анатолий, мне просто хотя бы убедится, что число изменяется в другом плагине
Тогда так:
Нативы:
// Установит кол-во монеток.
native set_user_coins(index, set)

// Возвратит кол-во монеток.
native get_user_coins(index, bool:bCheckConnect = true)

Функции нативов:
get_user_coins(id)
set_user_coins(id)

Это в 1 плагин:
public plugin_natives()
{
register_native("get_user_coins", "_get_user_coins", 1)
register_native("set_user_coins", "_set_user_coins", 1)
}

public _set_user_coins(id, set)
{
g_Coins[id] = set
}

public _get_user_coins(id, bool:bCheckConnect)
{
if (bCheckConnect && !is_user_connected(id))
return -1
return g_Coins[id]
}

Это использовать во втором плагине: + добавить нативы!!!
set_user_coins(id, 5) // Установит нужное количество.
set_user_coins(id, get_user_coins(id) + 5) // Прибавит нужное количество к числу которое уже имеется.

get_user_coins(id) - Просто покажет число coins в формате %d
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу