Помогите с нативами

Сообщения
3
Реакции
0
public _lrs_get_user_skill(id)
return g_user_skill[id][Skill]

public _lrs_set_user_skill(id, Float:num)
g_user_skill[id][Skill] = num

Нужно правильно записать эти 2 натива.
На получение дробного числа
 
Сообщения
507
Реакции
453
Предупреждения
17
Помог
8 раз(а)
Напиши что хочешь сделать.
 
Последнее редактирование модератором:
Сообщения
3
Реакции
0
Vaqtincha,
Код:
#include <amxmodx>
#include <lrs_main>

#if AMXX_VERSION_NUM < 183
#define client_disconnected client_disconnect
#endif

new g_FWD_Result
new bool:gBlockMaps
new g_Cvar[13], LEVELS[22]
new PlayerBN[33], PlayerXP[33], PlayerLevel[33], levelUp[33]
new const g_skill_letters[][] = {"L-", "L", "L+", "M-", "M", "M+", "H-", "H", "H+", "P-", "P", "P+", "G"}
new Float:g_skill_opt[sizeof g_skill_letters]
enum _:SKILL_DATA {KILLS, Float:Skill}
new g_user_skill[33][SKILL_DATA + 1]
new const CLASSES[][] =
{
"I_1", "I_1", "I_2", "I_3", "I_4", "I_5", "I_6", "I_7", "I_8", "I_9", "I_10",
"I_11", "I_12", "I_13", "I_14", "I_15", "I_16", "I_17", "I_18", "I_19", "I_20", "I_21"
}

public plugin_init()
{
register_plugin("LRS Main", "1.0", "AcE")
register_dictionary("lrs_main.txt")
register_event("DeathMsg", "EventDeath", "a", "1>0")
g_Cvar[1] = register_cvar("lrs_add_exp", "2")
g_Cvar[2] = register_cvar("lrs_add_exp_hs", "3")
g_Cvar[3] = register_cvar("lrs_bonus", "0")
g_Cvar[4] = register_cvar("lrs_add_bon", "1")
g_Cvar[5] = register_cvar("lrs_add_bon_hs", "2")
g_Cvar[6] = register_cvar("lrs_add_bon_max", "1000")
g_Cvar[7] = register_cvar("lrs_add_bon_lvl_up", "5")
g_Cvar[8] = register_cvar("lrs_levels", "0 20 40 60 100 150 200 300 400 600 1000 1500 2100 2700 3400 4200 5100 5900 7000 10000 15000")
g_Cvar[9] = register_cvar("lrs_user_skill", "60.0 75.0 85.0 100.0 115.0 130.0 140.0 150.0 165.0 180.0 195.0 210.0")
g_Cvar[10] = CreateMultiForward("lrs_save_base", ET_CONTINUE, FP_CELL)
g_Cvar[11] = CreateMultiForward("lrs_check_base", ET_CONTINUE, FP_CELL)
g_Cvar[12] = CreateMultiForward("lrs_level_up", ET_CONTINUE, FP_CELL)
}

public plugin_cfg()
{
new levelString[512], stPos, ePos, rawPoint[20], cnt
get_pcvar_string(g_Cvar[9], levelString, charsmax(levelString))

do {
ePos = strfind(levelString[stPos], " ")
formatex(rawPoint, ePos, levelString[stPos])
g_skill_opt[cnt] = str_to_float(rawPoint)
stPos += ePos + 1
cnt++
if (cnt > sizeof g_skill_letters - 1)
break
} while (ePos != -1)
server_cmd("exec addons/amxmodx/configs/lrs_main.cfg")
set_task(1.0, "LoadSettings")
}

lrs_get_skill_id(Float:skill)
{
for (new i ; i < sizeof g_skill_opt ; i++)
{
if (skill < g_skill_opt)
{
return i
}
}
return (sizeof g_skill_opt - 1)
}

public plugin_precache()
{
if (IsBlockMap())
{
gBlockMaps = true
return
}
}

public client_putinserver(id)
ExecuteForward(g_Cvar[11], g_FWD_Result, id)

public LoadSettings()
{
new i, LVL[22][16], cvLevels[256]
get_pcvar_string(g_Cvar[8], cvLevels, 255)

trim(cvLevels)
parse(cvLevels, LVL[0], 15, LVL[1], 15, LVL[2], 15, LVL[3], 15, LVL[4], 15, LVL[5], 15, LVL[6], 15, LVL[7], 15, LVL[8], 15, LVL[9], 15, LVL[10], 15, LVL[11], 15, LVL[12], 15, LVL[13], 15, LVL[14], 15, LVL[15], 15, LVL[16], 15, LVL[17], 15, LVL[18], 15, LVL[19], 15, LVL[20], 15, LVL[21], 15)

for (i = 0; i < 21; i++)
LEVELS[i+1] = str_to_num(LVL)
return PLUGIN_HANDLED
}

public EventDeath()
{
new killer = read_data(1)
new victim = read_data(2)
new headshot = read_data(3)
if (killer == victim) return

if (gBlockMaps)
{
if (PlayerLevel[killer] < 21)
{
static TempEXP; TempEXP = (headshot == 1) ? get_pcvar_num(g_Cvar[2]) : get_pcvar_num(g_Cvar[1])
PlayerXP[killer] += TempEXP
}
if (get_pcvar_num(g_Cvar[3]) == 1)
{
if (PlayerBN[killer] < get_pcvar_num(g_Cvar[6]))
{
static TempBON; TempBON = (headshot == 1) ? get_pcvar_num(g_Cvar[5]) : get_pcvar_num(g_Cvar[4])
PlayerBN[killer] += TempBON
}
}
lrs_check_level(killer)
}
new Float:delta = 1.0 / (1.0 + floatpower(10.0, (g_user_skill[killer][Skill] - g_user_skill[victim][Skill]) / 100.0))
g_user_skill[killer][Skill] += (g_user_skill[killer][KILLS] < 100) ? (delta * 2.0) : (delta * 1.5)
g_user_skill[victim][Skill] -= (g_user_skill[victim][KILLS] < 100) ? (delta * 2.0) : (delta * 1.5)
}

public lrs_check_level(id)
{
if (id > 0 && id < 33)
{
if (PlayerLevel[id] <= 0)
PlayerLevel[id] = 1

if (PlayerXP[id] < 0)
PlayerXP[id] = 0

if (PlayerBN[id] < 0)
PlayerBN[id] = 0

if (PlayerLevel[id] < 21)
{
if (PlayerXP[id] >= LEVELS[PlayerLevel[id]+1])
{
PlayerLevel[id]++
levelUp[id] = 1

if (get_pcvar_num(g_Cvar[3]) == 1)
{
if (PlayerBN[id] < get_pcvar_num(g_Cvar[6]))
{
PlayerBN[id] += get_pcvar_num(g_Cvar[7])
}
}
ExecuteForward(g_Cvar[12], g_FWD_Result, id)
}
}
}
}

public client_disconnected(id)
ExecuteForward(g_Cvar[10], g_FWD_Result, id)

public plugin_natives()
{
register_library("lrs_main")
register_native("lrs_block_maps", "_lrs_block_maps", 1)
register_native("lrs_get_user_exp", "_lrs_get_user_exp", 1)
register_native("lrs_set_user_exp", "_lrs_set_user_exp", 1)
register_native("lrs_get_user_bon", "_lrs_get_user_bon", 1)
register_native("lrs_set_user_bon", "_lrs_set_user_bon", 1)
register_native("lrs_get_user_lvl", "_lrs_get_user_lvl", 1)
register_native("lrs_get_user_max_lvl", "_lrs_get_user_max_lvl", 1)
register_native("lrs_set_user_lvl", "_lrs_set_user_lvl", 1)
register_native("lrs_get_level_name", "_lrs_get_level_name")
register_native("lrs_get_skill_name", "_lrs_get_skill_name")
register_native("lrs_get_user_skill", "_lrs_get_user_skill", 1)
register_native("lrs_set_user_skill", "_lrs_set_user_skill", 1)
}

public _lrs_block_maps()
return gBlockMaps

public _lrs_get_user_exp(id)
return PlayerXP[id]

public _lrs_set_user_exp(id, num)
PlayerXP[id] = num

public _lrs_get_user_bon(id)
return PlayerBN[id]

public _lrs_set_user_bon(id, num)
PlayerBN[id] = num

public _lrs_get_user_lvl(id)
return PlayerLevel[id]

public _lrs_get_user_max_lvl(id)
return LEVELS[PlayerLevel[id]+1]

public _lrs_set_user_lvl(id, num)
PlayerLevel[id] = num

public _lrs_get_level_name(plugin, params)
{
new id = get_param(1)
new len = get_param(3)

new buffer[192]; format(buffer, len, "%L", LANG_PLAYER, CLASSES[PlayerLevel[id]])
set_string(2, buffer, len)
}

public _lrs_get_user_skill(id)
return g_user_skill[id][Skill]

public _lrs_set_user_skill(id, num)
g_user_skill[id][Skill] = num

public _lrs_get_skill_name(plugin, params)
{
new id = get_param(1)
new len = get_param(3)

new Float:skill, skill_id
skill = g_user_skill[id][Skill]
skill_id = lrs_get_skill_id(skill)

new buffer[192]; format(buffer, len, "%s", g_skill_letters[skill_id])
set_string(2, buffer, len)
}

stock IsBlockMap()
{
new got_line, line_num, len
new cfgdir[400], cfgpath[400], mapname[40], txt[400]
get_localinfo("amxx_configsdir", cfgdir, charsmax(cfgdir))
get_mapname(mapname, 40 -1)
format(cfgpath, 400, "%s/lrs_block_maps.ini", cfgdir)
if (file_exists(cfgpath))
{
got_line = read_file(cfgpath, line_num, txt, 400 -1, len)
while(got_line > 0)
{
if (equali(txt, mapname)) return 0
line_num++
got_line = read_file(cfgpath, line_num, txt, 400 -1, len)
}
}
return 1
}



public _lrs_get_user_skill(id)
return g_user_skill[id][Skill]
public _lrs_set_user_skill(id, num)
g_user_skill[id][Skill] = num
Эти 2 натива не правильные точнее они работают и в логах ошибок нет но при компиляции варнинги
и еще lrs_set_user_skill(id, lrs_get_user_skill(id) +100.0) если в другом плагине использовать то тоже варнинги а если поставить 100 то варнингов нет но скилл не прибавляет!
5 Июн 2017
вот сами нативы
Код:
#if defined _lrs_main_included
#endinput
#endif
#define _lrs_main_included

// Проверка запрещенных карт.
native lrs_block_maps()

// Сохранение данных игрока.
forward lrs_save_base(id)

// Получение данных игрока.
forward lrs_check_base(id)

// Событие нового уровня.
forward lrs_level_up(id)

// Проверка уровня игрока.
forward lrs_check_level(id)

// Возвратит кол-во опыта игрока.
native lrs_get_user_exp(id)

// Установит опыт игроку.
native lrs_set_user_exp(id, num)

// Возвратит кол-во бонусов игрока.
native lrs_get_user_bon(id)

// Установит очки бонусов игроку.
native lrs_set_user_bon(id, num)

// Возвратит уровень игрока.
native lrs_get_user_lvl(id)

// Возвратит максимальный уровень игрока.
native lrs_get_user_max_lvl(id)

// Установит уровень игроку.
native lrs_set_user_lvl(id, num)

// Возвратит звание игрока.
native lrs_get_level_name(id, dest[], len)

// Возвратит скилл игрока.
native lrs_get_user_skill(id)

// Установит скилл игроку.
native lrs_set_user_skill(id, num)

// Возвратит букву скилла.
native lrs_get_skill_name(id, dest[], len)
5 Июн 2017
В информере это так выглядит
в логах ошибок нет! но при компиляции самих плагинов варнинг! хотелось бы избавится от него
 
Сообщения
507
Реакции
453
Предупреждения
17
Помог
8 раз(а)
e1337ace, на самом (гл. плагин) плагине lrs_get_user_skill(id) не дробный. Надо переделать. И тогда можно
Код:
native Float:lrs_get_user_skill(id)
native lrs_set_user_skill(id, Float:newSkill)
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу