Played Time

В този раздел можете да качвате преработени плъгини.
Отговори
Потребителски аватар

Автор на темата
hackera457 Охрана
Модератор
Модератор
Мнения: 593
Регистриран: 01 ное 2016, 09:46
Местоположение: София
Получена благодарност: 54 пъти
Години: 24
Контакти:

Played Time

Мнение от hackera457 Охрана » 31 дек 2016, 13:34

Автор: Alka

Описание:
Редактирана версия на плъгина на Alka, като е добавен native, с който можете в други плъгини да изкарвате изиграното време в сървъра или да ползвате за проверки при създаване на плъгини за Admin Кандидатури и т.н. За ваше улеснение съм ви направил .inc файл така че няма нужда да дефинирате native във вашите плъгини

Native:

Код: Избери всички

get_user_ptime(id) 
Начин на инсталация:
  • Слагате .sma файла във папката scripting
  • Слагате .inc файла във папката include
ВНИМАНИЕ: Native НЯМА ДА РАБОТИ, АКО НЕ СЛОЖИТЕ РЕДАКТИРАНИЯ ПЛЪГИН!!!

Eто ви примерен прост плъгин, с който да тествате

Код: Избери всички

#include <amxmodx>
#include <amxmisc>
#include <playedTime>

#define PLUGIN "PlayedTime Test"
#define VERSION "1.0"
#define AUTHOR "hackera457"


public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd("say /ptime","cmdShowTime");
}

public cmdShowTime(id)
{
    new iPlayerPlayedTime = get_user_ptime(id);
    
    client_print(id, print_chat,"[PTime Test] You played %d minutes", iPlayerPlayedTime);
}
 
played_time.sma
(5.8 KиБ) Свален 90 пъти
played_time.sma
(5.8 KиБ) Свален 90 пъти
playedTime.inc
(671 Байта) Свален 89 пъти
playedTime.inc
(671 Байта) Свален 89 пъти
Моите плъгини

Код: Избери всички

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Потребителски аватар

JustInCase AMXX
Потребител
Потребител
Мнения: 559
Регистриран: 14 окт 2016, 23:31
Се отблагодари: 3 пъти
Получена благодарност: 3 пъти

Re: Played Time

Мнение от JustInCase AMXX » 15 яну 2017, 12:47

Някаква идея защо при опит за направа на ранк система с този плъгин минутите не се обновяват в игра ами само при Reconnect?

Код: Избери всички

#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < colorchat >
#include < hamsandwich >
#include < fun >
#include < nvault >
#include < playedTime >

#define MAXRANKS 32

#define PLUGIN "Rank System"
#define VERSION "1.3"
#define AUTHOR "BetterPlay"

//ПРОМЕНЛИВИ
new PlayerRank[33], message[192]
new sayText, teamInfo, maxPlayers, g_MsgHud, gVault
new strName[191], strText[191], alive[11], g_name[32]
new gPlayerPoints

new const rankNames[MAXRANKS][] = {
    "[Jumper]", 
    "[Jumper First Class]", 
    "[Incredible]", 
    "[Unstoppable]", 
    "[Perfect]", 
    "[Runner]", 
    "[Great Bhop]", 
    "[Bhopper]", 
    "[Great Jumper]", 
    "[Alien Jumper]", 
    "[Super Bhopper]", 
    "[LJ Master]", 
    "[Technique]", 
    "[Unreal]", 
    "[Advanced]", 
    "[Machine]",
    "[Hunter]", 
    "*PunisheR*", 
    "[Quick]", 
    "[Maniac]",
    "[Jump Master]", 
    "[Bhop Master]",
    "[God Like]", 
    "[Unique]", 
    "*PRO*", 
    "[Immortal]", 
    "[Hero]", 
    "[Jarring]", 
    "*ProffesionaL*", 
    "[Danger Bhopper]",
    "[Bhop Legend]", 
    "[HNS Master]"
};

new const rankXP[MAXRANKS] = {
    0, 25, 50, 100, 150, 200, 350, 500, 700, 850, 1100, 1400, 1800, 2400, 3000, 3500, 4300, 5200, 5800, 6500, 7300, 8000, 9600, 10500, 12000, 13800, 15000, 17200, 20000, 21500, 24000, 26000
};
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd("say", "hook_say")
    register_clcmd("say_team", "hook_teamsay")
    register_clcmd("say /myrank", "cmdJumpRank")
    register_clcmd("say_team /myrank", "cmdJumpRank")
    register_clcmd("say /checkrank", "cmdCheckLevel")
    register_clcmd("say_team /checkrank", "cmdCheckLevel")
    
    
    sayText = get_user_msgid("SayText")
    teamInfo = get_user_msgid("TeamInfo")
    maxPlayers = get_maxplayers()
    g_MsgHud = CreateHudSyncObj()
    
    register_message(sayText, "avoid_duplicated")
    RegisterHam(Ham_Spawn, "player", "player_spawn", 1);
    
    set_task(1.0, "taskHud", 0, _, _, "b")

    set_task(60.0, "checkLevel", 0, _, _, "b")
    
    gVault = nvault_open( "PlayerRanks" );
}

public player_spawn(id)
{
    gPlayerPoints = get_user_ptime(id)
    
    if( !is_user_alive( id ) ) return;
    
    if(MAXRANKS == PlayerRank[id]+1)
        ColorChat(id, RED, "[BetterPlay]^x01 Your level is ^x04#%d ^x01with rank ^x04%s ^x01. You have got ^x03 %d points", PlayerRank[id]+1, rankNames[PlayerRank[id]], gPlayerPoints)
    else
        ColorChat(id, RED, "[BetterPlay]^x01 Your level is ^x04#%d ^x01with rank ^x04%s^x01. You have got ^x03 %d^x01 /^x04 %d^x01 points to become^x04 %s^x01.", PlayerRank[id]+1, rankNames[PlayerRank[id]], gPlayerPoints, rankXP[PlayerRank[id]+1], rankNames[PlayerRank[id]+1])
    
    switch( PlayerRank[ id ] )
    {
        case 28: set_user_health( id, get_user_health( id ) + 5 );
            case 29: set_user_health( id, get_user_health( id ) + 10 );
            case 30: set_user_health( id, get_user_health( id ) + 15 );
            case 31: set_user_health( id, get_user_health( id ) + 20 );
            case 32: set_user_health( id, get_user_health( id ) + 30 );
        }
}
public cmdCheckLevel(id)
{
    new iMenu = menu_create("\yBetterPlay \d- \wChoose Player\r:", "checklevel_menu_handler")
    
    new iPlayers[32], iNum, iTarget;
    new UserName[34], szTempID[10];
    get_players(iPlayers, iNum);
    for(new i; i < iNum; i++)
    {
        iTarget = iPlayers[i];
        if(!is_user_connected(iTarget))
            continue;
        get_user_name(iTarget, UserName, sizeof UserName - 1);
        num_to_str(iTarget, szTempID, charsmax(szTempID));
        menu_additem(iMenu, UserName, szTempID);
    }
    menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
    menu_display(id, iMenu, 0);
}

public checklevel_menu_handler(id, iMenu, Item)
{
    if(Item == MENU_EXIT)
    {
        menu_destroy(iMenu);
        return PLUGIN_HANDLED;
    }
    new iData[6], iName[64];
    new access, callback;
    menu_item_getinfo(iMenu, Item, access, iData, charsmax(iData), iName, charsmax(iName), callback);
    new target = str_to_num(iData);
    if(!is_user_connected(target))
    {
        ColorChat(id, GREEN, "[BetterPlay]^x01 The player you chose is not in the server.")
        menu_destroy(iMenu);
        cmdCheckLevel(id);
        return PLUGIN_HANDLED;
    }
    menu_destroy(iMenu);
    new szText[256], player_name[32];
    get_user_name(target, player_name, 31);
    gPlayerPoints = get_user_ptime(target)
    if(MAXRANKS == PlayerRank[target]+1)
        formatex(szText, charsmax(szText), "<html><head></head><body><br/>Name: %s<br/>Points: %d<br/>Level: %d/%d<br/>Rank: %s<br/></body></html>", player_name, gPlayerPoints, PlayerRank[target]+1, MAXRANKS, rankNames[PlayerRank[target]]);
    else
        formatex(szText, charsmax(szText), "<html><head></head><body><br/>Name: %s<br/>Points: %d/%d<br/>Level: %d/%d<br/>Rank: %s<br/>Next Rank: %s</body></html>", player_name, gPlayerPoints, rankXP[PlayerRank[target]+1], PlayerRank[target]+1, MAXRANKS, rankNames[PlayerRank[target]], rankNames[PlayerRank[target]+1]);
    show_motd(id, szText, "BetterPlay Rank System");
    cmdCheckLevel(id);
    return PLUGIN_HANDLED;
}

public taskHud()
{
    new iPlayers[32], iNum, iTarget;
    get_players(iPlayers, iNum);
    for(new i; i < iNum; i++)
    {
        iTarget = iPlayers[i];
        if(!is_user_connected(iTarget))
            continue;
        
        set_hudmessage(0, 139, 139, 0.02, 0.17, 0, 6.0, 12.0)
        gPlayerPoints = get_user_ptime(iTarget)
        if(MAXRANKS == PlayerRank[iTarget]+1)
            ShowSyncHudMsg(iTarget, g_MsgHud, "Level: %d/%d^nRank : %s^nPoints : %d",PlayerRank[iTarget]+1, MAXRANKS, rankNames[PlayerRank[iTarget]], gPlayerPoints)
        else
            ShowSyncHudMsg(iTarget, g_MsgHud, "Level: %d/%d^nRank : %s^nPoints : %d/%d",PlayerRank[iTarget]+1, MAXRANKS, rankNames[PlayerRank[iTarget]], gPlayerPoints, rankXP[PlayerRank[iTarget]+1])
    }
}

public cmdJumpRank(id)
{
    gPlayerPoints = get_user_ptime(id)
    if(MAXRANKS == PlayerRank[id]+1)
        ColorChat(id, RED, "[BetterPlay]^x01 Your level is ^x04#%d ^x01| Rank ^x04%s ^x01| Points:^x03 %d", PlayerRank[id]+1, rankNames[PlayerRank[id]], gPlayerPoints)
    else
        ColorChat(id, RED, "[BetterPlay]^x01 Your level is ^x04#%d ^x01| Rank ^x04%s ^x01| Points:^x03 %d^x01 /^x04 %d^x01 to become^x04 %s^x01.", PlayerRank[id]+1, rankNames[PlayerRank[id]], gPlayerPoints, rankXP[PlayerRank[id]+1], rankNames[PlayerRank[id]+1])
}

public client_authorized( id )
{
    Load( id );
}

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

public client_putinserver(id)
{
    gPlayerPoints = get_user_ptime(id)
    new currentPlayerRank = 0;
    while(currentPlayerRank < (MAXRANKS - 1))
    {       
        if(gPlayerPoints >= rankXP[currentPlayerRank + 1])
            ++currentPlayerRank;     
        else         
            break;
    }
    PlayerRank[id] = currentPlayerRank;
}

public Load( id )
{
    gPlayerPoints = get_user_ptime(id)
    if( !is_user_bot( id ) && !is_user_hltv( id ) )
    {
        new vaultkey[ 64 ], vaultdata[ 256 ], points[ 33 ], UserName[ 33 ];
        get_user_name( id, UserName, charsmax( UserName ) );
        
        format( vaultkey, charsmax( vaultkey ), "%s", UserName );
        format( vaultdata, charsmax( vaultdata ), "%i#", gPlayerPoints);
        
        nvault_get( gVault, vaultkey, vaultdata, 255 );
        replace_all( vaultdata, 255, "#", " " );
        
        parse( vaultdata, points, 32 );
        gPlayerPoints = str_to_num( points );
    }
}

public Save( id )
{
    gPlayerPoints = get_user_ptime(id)
    if( !is_user_bot( id ) && !is_user_hltv( id ) )
    {
        new vaultkey[ 64 ], vaultdata[ 256 ], UserName[ 33 ];
        get_user_name( id, UserName, charsmax( UserName ) );
        
        format( vaultkey, charsmax( vaultkey ), "%s", UserName );
        format( vaultdata, charsmax( vaultdata ), "%i#", gPlayerPoints);
        
        nvault_set( gVault, vaultkey, vaultdata );
    }
}

public avoid_duplicated(msgId, msgDest, receiver)
    return PLUGIN_HANDLED;
public plugin_natives()
{
    register_native("get_user_rankname", "_get_user_rankname")
}
public _get_user_rankname(id)
{
    return rankNames[PlayerRank[id]]
}

public hook_say(id) {
    read_args(message, 191)
    remove_quotes(message)
    
    if (message[0] == '@' || message[0] == '/' || message[0] == '!' || message[0] == '#' || message[0] == '$' || equal(message, ""))
        return PLUGIN_CONTINUE
    
    get_user_name(id, g_name, charsmax(g_name))
    
    new isAlive
    
    
    if (is_user_alive(id)) {
        isAlive = 1
        alive = "^x01"
        } else {
        isAlive = 0
        alive = "^x01*DEAD* "
    }
    
    static color[10]
    get_user_name(id, g_name, 32)
    get_user_team(id, color, 9)
    format(strName, 191, "%s^x04%s ^x03%s", alive, rankNames[PlayerRank[id]], g_name)
    format(strText, 191, "%s", message)
    
    format(message, 191, "%s ^x01: %s", strName, strText)
    
    sendMessage(color, isAlive) // Sends the colored message
    return PLUGIN_CONTINUE;
}

public hook_teamsay(id)
{
    read_args(message, 191)
    remove_quotes(message)
    
    if(message[0] == '@' || message[0] == '/' || message[0] == '!' || message[0] == '#' || message[0] == '$' || equal(message, "")) // Ignores Admin Hud Messages, Admin Slash commands
        return PLUGIN_CONTINUE
    
    new playerTeam = get_user_team(id)
    new playerTeamName[19]
    
    switch(playerTeam) // Team names which appear on team-only messages
    {
        case 1: copy(playerTeamName, 11, "Terrorists")
            case 2: copy(playerTeamName, 18, "Counter-Terrorists")
            default: copy(playerTeamName, 9, "Spectator")
    }
    
    get_user_name(id, g_name, charsmax(g_name))
    new isAlive   
    
    if(is_user_alive(id))
    {
        isAlive = 1
        alive = "^x01"
    }
    else
    {
        isAlive = 0
        alive = "^x01*DEAD* "
    }
    
    static  color[10]
    
    get_user_name(id, g_name, 32)
    get_user_team(id, color, 9);
    format(strName, 191, "%s(%s) ^x04%s ^x03%s", alive, playerTeamName, rankNames[PlayerRank[id]], g_name)
    format(strText, 191, "%s", message)
    
    format(message, 191, "%s ^x01: %s", strName, strText)
    sendTeamMessage(color, isAlive, playerTeam)
    return PLUGIN_CONTINUE
}

public sendMessage(color[], alive)
{
    new teamName[10]
    
    for(new player = 1; player < maxPlayers; player++)
    {
        if(!is_user_connected(player))
            continue
        
        if(alive && is_user_alive(player) || !alive && !is_user_alive(player))
        {
            get_user_team(player, teamName, 9)// Stores user's team name to change back after sending the message
            changeTeamInfo(player, color)// Changes user's team according to color choosen
            writeMessage(player, message)// Writes the message on player's chat
            changeTeamInfo(player, teamName)// Changes user's team back to original
        }
    }
}

public sendTeamMessage(color[], alive, playerTeam)
{
    new teamName[10]
    
    for(new player = 1; player < maxPlayers; player++)
    {
        if(!is_user_connected(player))
            continue
        
        if(get_user_team(player) == playerTeam)
        {
            if(alive && is_user_alive(player) || !alive && !is_user_alive(player))
            {
                get_user_team(player, teamName, 9)// Stores user's team name to change back after sending the message
                changeTeamInfo(player, color)// Changes user's team according to color choosen
                writeMessage(player, message)// Writes the message on player's chat
                changeTeamInfo(player, teamName)// Changes user's team back to original
            }
        }
    }
}


public changeTeamInfo(player, team[])
{
    message_begin(MSG_ONE, teamInfo, _, player)// Tells to to modify teamInfo(Which is responsable for which time player is)
    write_byte(player)// Write byte needed
    write_string(team)// Changes player's team
    message_end()// Also Needed
}


public writeMessage(player, message[])
{
    message_begin(MSG_ONE, sayText, {0, 0, 0}, player)// Tells to modify sayText(Which is responsable for writing colored messages)
    write_byte(player)// Write byte needed
    write_string(message)// Effectively write the message, finally, afterall
    message_end()// Needed as always
}
public checkLevel(id)
{
    gPlayerPoints = get_user_ptime(id)
    new currentPlayerRank = 0;
    while(currentPlayerRank < ( MAXRANKS - 1 ))
    {
        if(gPlayerPoints >= rankXP[currentPlayerRank +1])
            ++currentPlayerRank;
            else
                break
    }
    new OldRank = PlayerRank[ id ]
    PlayerRank[ id ] = currentPlayerRank
    Save( id )
    if(OldRank < currentPlayerRank)
    {
        new g_name[32]
        get_user_name(id, g_name, 31)
        ColorChat(0, GREEN, "[BetterPlay] ^1Congratulations! ^x03%s^x01 got a new rank ^x04%s", g_name, rankNames[PlayerRank[id]])
    }
}
/*
public Hook_Deathmessage()
{
    new killer = read_data(1);
    new victim = read_data(2);
    
    if(killer == victim)
        return PLUGIN_CONTINUE;
    if(!killer || killer > maxPlayers)
        return PLUGIN_CONTINUE;
    
    gPlayerPoints[killer]++
    new currentPlayerRank = 0;
    while(currentPlayerRank < (MAXRANKS - 1))
    {       
        if(gPlayerPoints[killer] >= rankXP[currentPlayerRank + 1])
            ++currentPlayerRank;     
        else         
            break;
    }
    new OldRank = PlayerRank[killer]
    PlayerRank[killer] = currentPlayerRank
    Save( killer );
    if(OldRank < currentPlayerRank)
    {
        new g_name[32]
        get_user_name(killer, g_name, 31)
        ColorChat(0, GREEN, "[BetterPlay] ^1Congratulations! ^x03%s^x01 got a new rank ^x04%s", g_name, rankNames[PlayerRank[killer]])
    }
    return PLUGIN_CONTINUE;
}*/ 

Потребителски аватар

TheRedShoko ReShoko
Модератор
Модератор
Мнения: 990
Регистриран: 06 окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 4 пъти
Получена благодарност: 53 пъти

Re: Played Time

Мнение от TheRedShoko ReShoko » 15 яну 2017, 12:59

return-a на натива е неправилен. Трябва да е return TotalPlayedTime[iPlayerID] + get_user_time(id, 1) / 60;

Потребителски аватар

JustInCase AMXX
Потребител
Потребител
Мнения: 559
Регистриран: 14 окт 2016, 23:31
Се отблагодари: 3 пъти
Получена благодарност: 3 пъти

Re: Played Time

Мнение от JustInCase AMXX » 15 яну 2017, 16:59

Ако имаш предвид натива на моя плъгин аз дори не го ползвам не е от него.


EDIT:
Извинявай за тъпия въпрос.
Стана благодаря !

Потребителски аватар

Автор на темата
hackera457 Охрана
Модератор
Модератор
Мнения: 593
Регистриран: 01 ное 2016, 09:46
Местоположение: София
Получена благодарност: 54 пъти
Години: 24
Контакти:

Re: Played Time

Мнение от hackera457 Охрана » 19 яну 2017, 22:34

TheRedShoko написа:return-a на натива е неправилен. Трябва да е return TotalPlayedTime[iPlayerID] + get_user_time(id, 1) / 60;
Напълно правилно е, не трябват тези неща, връща директно съдържанието на TotalPlayedTime, тази добавка е излишна и работи. Самия плъгин е направен при reconnect, аз не съм правил промени
Моите плъгини

Код: Избери всички

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Потребителски аватар

JustInCase AMXX
Потребител
Потребител
Мнения: 559
Регистриран: 14 окт 2016, 23:31
Се отблагодари: 3 пъти
Получена благодарност: 3 пъти

Re: Played Time

Мнение от JustInCase AMXX » 19 яну 2017, 22:57

Не знам но така както ред шоко каза стана и започнаха да се обновяват.

Потребителски аватар

Автор на темата
hackera457 Охрана
Модератор
Модератор
Мнения: 593
Регистриран: 01 ное 2016, 09:46
Местоположение: София
Получена благодарност: 54 пъти
Години: 24
Контакти:

Re: Played Time

Мнение от hackera457 Охрана » 22 яну 2017, 10:48

Коригирал съм native-a.
Моите плъгини

Код: Избери всички

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Отговори

Върни се в “Преработени плъгини”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост