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

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

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

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

System lvl (Помогите)

, Как сделать сообщение при ЛВЛ UP
Статус пользователя zvark
сообщение 29.12.2013, 15:05
Сообщение #1
Стаж: 12 лет

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

Здравствуйте помогите сделать :
Когда у игрока повышается уровень то ему в чат напишет "Вы получили 1 lvl"


CODE
#include <amxmodx>
#include <nvault>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN_NAME "Level__System"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "Bos93 & FirsT"

#define MAX_CLIENTS 32

#define ID_SHOWHUD (taskid - TASK_SHOWHUD)

enum (+= 100)
{
TASK_SHOWHUD = 10
}

new const nextlvl[4] = // Для хранения уровня на левл
{
100, // 10 exp
200, // 20 exp
400, // 400 exp
800, // 800 exp
}

const Float:HUD_STATS_X = 0.02;
const Float:HUD_STATS_Y = 0.9025;
const Float:HUD_SPECT_X = -1.0;
const Float:HUD_SPECT_Y = 0.8;

const PEV_SPEC_TARGET = pev_iuser2


new g_vault
new lvl[33] = 1 // Для хранения левла
new exp[33] // Для хранения экспы

public plugin_init( )
{
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );

RegisterHam(Ham_TakeDamage, "player", "player_damage");

g_vault = nvault_open("Levels__System")

}

public plugin_natives()
{

register_native("zp_get_user_level", "native_get_user_level", 1)
register_native("zp_get_user_level", "native_set_user_level", 1)

register_native("zp_get_user_exp", "native_get_user_exp", 1)
register_native("zp_get_user_exp", "native_set_user_exp", 1)
}


public client_disconnect(id)
{
SaveData(id);
}

public client_putinserver( iPlayer )
{
set_task(1.0, "ShowHUD", iPlayer+TASK_SHOWHUD, _, _, "b")

LoadData( iPlayer );
}

public plugin_end()
{
nvault_close(g_vault)
}


public player_damage(vict, inflict, attack, Float:dmg, dmgbits)
{
if(!is_user_alive(attack) || get_user_team(vict) == get_user_team(attack)) return HAM_IGNORED

if(exp[attack] < nextlvl[2])
{
exp[attack] += floatround(dmg, floatround_ceil)

if(nextlvl[0] < exp[attack] < nextlvl[1]) lvl[attack] = 1
else if(nextlvl[1] <= exp[attack] < nextlvl[2]) lvl[attack] = 2
else if(nextlvl[2] <= exp[attack] < nextlvl[3]) lvl[attack] = 3
else if(nextlvl[3] <= exp[attack]) lvl[attack] = 4
}
return HAM_IGNORED
}

public ShowHUD(taskid)
{

static iPlayer
iPlayer = ID_SHOWHUD;


if (!is_user_alive( iPlayer ) )
{

iPlayer = pev(iPlayer, PEV_SPEC_TARGET)

// Target not alive
if (!is_user_alive(iPlayer) ) return;
}

if (iPlayer != ID_SHOWHUD)
{
set_hudmessage( 100, 100, 100, HUD_SPECT_X, HUD_SPECT_Y, 0, 1.0, 1.0, 1.0, 1.0, -1 );
show_hudmessage( ID_SHOWHUD , "Наблюдение за: [Уровень: %d] [Прогресс: %.1f%%]" , get_user_health(iPlayer), lvl[ ID_SHOWHUD ] , 100.0 * exp[ ID_SHOWHUD ] );
}
else
{
set_hudmessage( 0, 255, 0, HUD_STATS_X, HUD_STATS_Y, 0, 5.0, 3.0, 1.0, 1.0, -1 );
show_hudmessage( ID_SHOWHUD , "[HP: %d] [Уровень: %d] [Прогресс: %.1f%%]", get_user_health(iPlayer), lvl[ ID_SHOWHUD ] , ((100.0 * exp[ ID_SHOWHUD ]*2)/ (nextlvl[lvl[ ID_SHOWHUD ]]))-100 );
}
}

public SaveData(id) {
new AuthID[35]
get_user_authid(id,AuthID,34)

new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-cso",AuthID)
format(vaultdata,255,"%i#%i#",lvl[id],exp[id])
nvault_set(g_vault,vaultkey,vaultdata)

return PLUGIN_CONTINUE
}

public LoadData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)

new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-cso",AuthID)
format(vaultdata,255,"%i#%i#",lvl[id],exp[id])
nvault_get(g_vault,vaultkey,vaultdata,255)

replace_all(vaultdata, 255, "#", " ")

new experience[32], playerlevel[32]

parse(vaultdata, experience, 31, playerlevel, 31)

lvl[id] = str_to_num(experience)
exp[id] = str_to_num(playerlevel)

return PLUGIN_CONTINUE
}

public native_get_user_exp(id)
{
return exp[id];
}

public native_set_user_exp(id, amount)
{
exp[id] = amount;
}

public native_get_user_level(id)
{
return lvl[id];
}

public native_set_user_level(id, amount)
{
lvl[id] = amount;
}

stock color_print( 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

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();
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Legenda
сообщение 30.12.2013, 14:10
Сообщение #2


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

Стаж: 16 лет

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

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

исходник нужно прикреплять как файл
текст исходника на форуме с трудом поддается чтению
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя zvark
сообщение 30.12.2013, 15:00
Сообщение #3
Стаж: 12 лет

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

Вот исходник плагина,пожалуйста помогите кто может.
Прикрепленные файлы:
Прикрепленный файл  level_system.sma ( 4,72 килобайт ) Кол-во скачиваний: 8
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 30.12.2013, 15:06
Сообщение #4


Стаж: 15 лет

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

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

Код
http://www.amx-x.ru/viewtopic.php?f=12&t=13946


Код:
#include < amxmodx >
#include < nvault >
#include < fakemeta >

#define PLUGIN_NAME "Level__System"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "Bos93 & FirsT"

#define MAX_CLIENTS 32

#define ID_SHOWHUD (taskid - TASK_SHOWHUD)

enum (+= 100)
{
TASK_SHOWHUD = 10
}

new const MAX_LEVELS[16] =
{
10, //1
30, //2
50, //3
80, //4
120, //5
170, //6
280, //7
370, //8
490, //9
580, //10
800, //11
1000, //12
1400, //13
1900, //14
2600, //15
3500 //16
}
const Float:HUD_STATS_X = 0.02;
const Float:HUD_STATS_Y = 0.9025;
const Float:HUD_SPECT_X = -1.0;
const Float:HUD_SPECT_Y = 0.8;

const PEV_SPEC_TARGET = pev_iuser2

new g_iLevel[ MAX_CLIENTS + 1 ],
g_iExp[ MAX_CLIENTS + 1 ],
g_playername[ MAX_CLIENTS + 1 ][ MAX_CLIENTS ];

new g_vault

public plugin_init( )
{
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );

register_event( "DeathMsg", "EV_DeathMsg", "a" );

g_vault = nvault_open("Levels__System")

}

public plugin_natives()
{

register_native("zp_get_user_level", "native_get_user_level", 1)
register_native("zp_set_user_level", "native_set_user_level", 1)

register_native("zp_get_user_exp", "native_get_user_exp", 1)
register_native("zp_set_user_exp", "native_set_user_exp", 1)
}


public client_disconnect(id)
{
SaveData(id);
}

public client_putinserver( iPlayer )
{
get_user_name(iPlayer, g_playername[iPlayer], charsmax(g_playername[]))

set_task(1.0, "ShowHUD", iPlayer+TASK_SHOWHUD, _, _, "b")

LoadData( iPlayer );
}

public plugin_end()
{
nvault_close(g_vault)
}


public EV_DeathMsg( )
{
static iVictim, iKiller;
iVictim = read_data( 2 );
iKiller = read_data( 1 );

if( !is_user_connected( iVictim ) )
return;

if( iKiller == iVictim || !iKiller )
return;

g_iExp[ iKiller ] += 1;

while( g_iExp[ iKiller ] >= MAX_LEVELS[ g_iLevel[ iKiller ] ] )
{
g_iLevel[ iKiller ] += 1;

color_print( iKiller , "!g[SERVER]!y Ваш уровень поднят !");
}


}

public ShowHUD(taskid)
{

static iPlayer
iPlayer = ID_SHOWHUD;


if (!is_user_alive( iPlayer ) )
{

iPlayer = pev(iPlayer, PEV_SPEC_TARGET)

// Target not alive
if (!is_user_alive(iPlayer) ) return;
}

if (iPlayer != ID_SHOWHUD)
{
set_hudmessage( 100, 100, 100, HUD_SPECT_X, HUD_SPECT_Y, 0, 5.0, 3.0, 1.0, 1.0, -1 );
show_hudmessage( ID_SHOWHUD , "Наблюдение за: %s^n[HP: %d] [Уровень: %d] [Опыт: %d / %d]", g_playername[ iPlayer ] , get_user_health(iPlayer), g_iLevel[ ID_SHOWHUD ] , g_iExp[ ID_SHOWHUD ] , (MAX_LEVELS[g_iLevel[ ID_SHOWHUD ]]) );
}
else
{
set_hudmessage( 0, 255, 0, HUD_STATS_X, HUD_STATS_Y, 0, 5.0, 3.0, 1.0, 1.0, -1 );
show_hudmessage( ID_SHOWHUD , "[HP: %d] [Уровень: %d] [Опыт: %d / %d]", get_user_health(iPlayer), g_iLevel[ ID_SHOWHUD ] , g_iExp[ ID_SHOWHUD ] , (MAX_LEVELS[g_iLevel[ ID_SHOWHUD ]]));
}
}

public SaveData(id) {
new AuthID[35]
get_user_authid(id,AuthID,34)

new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-cso",AuthID)
format(vaultdata,255,"%i#%i#",g_iLevel[id],g_iExp[id])
nvault_set(g_vault,vaultkey,vaultdata)

return PLUGIN_CONTINUE
}

public LoadData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)

new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-cso",AuthID)
format(vaultdata,255,"%i#%i#",g_iLevel[id],g_iExp[id])
nvault_get(g_vault,vaultkey,vaultdata,255)

replace_all(vaultdata, 255, "#", " ")

new experience[32], playerlevel[32]

parse(vaultdata, experience, 31, playerlevel, 31)

g_iLevel[id] = str_to_num(experience)
g_iExp[id] = str_to_num(playerlevel)

return PLUGIN_CONTINUE
}

public native_get_user_exp(id)
{
return g_iExp[id];
}

public native_set_user_exp(id, amount)
{
g_iExp[id] = amount;
}

public native_get_user_level(id)
{
return g_iLevel[id];
}

public native_set_user_level(id, amount)
{
g_iLevel[id] = amount;
}

stock color_print( 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

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();
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя zvark
сообщение 30.12.2013, 19:37
Сообщение #5
Стаж: 12 лет

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

Спасибо но это не совсем то, что должно получится.

Я его сделал но появилась проблема.
Когда игрок получает 1 ЛВЛ то ему в чат пишет "TEST UP", и при каждом поподании пишет тоже самое, только когда игрок получит 2 ЛВЛ, сообшение пропадает.
Как сделать так: чтобы при получении 1 лвл игроку писало 1 раз "TEST UP" и не при каждом поподании в него

Вот другой исходник
Прикрепленный файл  level_system.sma ( 2,99 килобайт ) Кол-во скачиваний: 9
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя xoymiii
сообщение 30.12.2013, 20:22
Сообщение #6


Стаж: 13 лет

Сообщений: 769
Благодарностей: 244
Полезность: 567

������� �����
https://c-s.net.ua/forum/topic55220.html


в следующем году выложу army rank statsx, облегчённую на основе lite level system, только работать будет с stats.dat, дабы не создавать лишний nvault файл.

Отредактировал: xoymiii, - 30.12.2013, 20:25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: