Престиж THC RPG

Saniiro58

Участник
Сообщения
82
Реакции
12
У меня на сервере игроки начинают с 20к кредитами, возможно ли сделать так, чтобы при достижении 100 уровня у людей автоматически сбрасывался уровень и на 1 уровне вместо 20к получали допустим 50к, при повторном достижении сотого - 80к
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Делал себе подобное на см:рпг, но сбросить только один раз можно будет (при повторном сбросе 80к не дадут, так и будет по 50 выдаваться)
Кинь натив, чекающий уровень игрока, не могу его найти в миллиарде инклудов тхк рпг, по типу SMRPG_GetClientLevel

Если в кратце, делал максимально просто и тупо
Игрок вводит команду в чат, проходит проверка уровня, серверной командой у него все обнулится и серверной командой установятся кредиты.
 

Saniiro58

Участник
Сообщения
82
Реакции
12
Эм.. Это?
CreateNative("thc_rpg_GetLevel", Native_GetLevel);
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
PHP:
#include <sourcemod>
#include <thc_rpg>

public void OnPluginStart()
{
    RegConsoleCmd("prestige", Command_Prestige);
}
 
public Action Command_Prestige(int client, int args)
{
    if(thc_rpg_GetLevel(client) > 99)
    {
         ServerCommand("thc_rpg_resetplayer %N", client);
         ServerCommand("thc_rpg_credits set %N 50000", client);
    }
    else
    {
         PrintToChat(client, "Получить престиж можно только после достижения уровня 100");
    }
    return Plugin_Handled;
}
Не уверен, что это вообще скомпилится
Накидал с телефона, нет возможности проверить и табуляцию нормально выставить
Попробуй, да дай знать как успехи
Должно сбрасывать уровень и устанавливать кредиты после команды в чат !prestige
Если кому-то ошибка в глаза бросится, исправьте
 

Saniiro58

Участник
Сообщения
82
Реакции
12
Плагин работает, но не правильно, т.е. кредиты выдаются, но и в этот же момент сбрасывается уровень из-за чего человек остаётся с 20к по стандарту.
Т.е. к выдачи кредитов надо прикрутить таймер или я там не знаю
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
PHP:
#include <sourcemod>
#include <thc_rpg>

public void OnPluginStart()
{
    RegConsoleCmd("prestige", Command_Prestige);
}
 
public Action Command_Prestige(int client, int args)
{
    if(thc_rpg_GetLevel(client) > 99)
    {
         ServerCommand("thc_rpg_resetplayer %N", client);
         CreateTimer(1.0, Timer_Credits, GetClientUserId(client), TIMER_HNDL_CLOSE);
    }
    else
    {
         PrintToChat(client, "Получить престиж можно только после достижения уровня 100");
    }
    return Plugin_Handled;
}
public Action Timer_Credits(Handle hTimer)
{
    ServerCommand("thc_rpg_credits set %N 50000", client);
}

Хз, мб так прокатит
Кредиты должны устанавливаться через секунду после обнуления игрока
Время можно поменьше поставить
 

d4Ck

Урегулированный
Сообщения
730
Реакции
562
PHP:
#include <sourcemod>
#include <thc_rpg>

public void OnPluginStart()
{
    RegConsoleCmd("prestige", Command_Prestige);
}
 
public Action Command_Prestige(int client, int args)
{
    if(thc_rpg_GetLevel(client) > 99)
    {
         ServerCommand("thc_rpg_resetplayer %N", client);
         CreateTimer(1.0, Timer_Credits, GetClientUserId(client), TIMER_HNDL_CLOSE);
    }
    else
    {
         PrintToChat(client, "Получить престиж можно только после достижения уровня 100");
    }
    return Plugin_Handled;
}
public Action Timer_Credits(Handle hTimer)
{
    ServerCommand("thc_rpg_credits set %N 50000", client);
}

Хз, мб так прокатит
Кредиты должны устанавливаться через секунду после обнуления игрока
Время можно поменьше поставить
Тогда уж так:
PHP:
#include <sourcemod>
#include <thc_rpg>

public void OnPluginStart()
{
    RegConsoleCmd("prestige", Command_Prestige);
}
 
public Action Command_Prestige(int client, int args)
{
    if(thc_rpg_GetLevel(client) > 99)
    {
         ServerCommand("thc_rpg_resetplayer %N", client);
         CreateTimer(1.0, Timer_Credits, GetClientUserId(client), TIMER_HNDL_CLOSE);
    }
    else
    {
         PrintToChat(client, "Получить престиж можно только после достижения уровня 100");
    }
    return Plugin_Handled;
}
public Action Timer_Credits(Handle hTimer, any UserId)
{
    int client = GetClientOfUserId(UserId);
    ServerCommand("thc_rpg_credits set %N 50000", client);
}
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Тогда уж так:
PHP:
#include <sourcemod>
#include <thc_rpg>

public void OnPluginStart()
{
    RegConsoleCmd("prestige", Command_Prestige);
}
 
public Action Command_Prestige(int client, int args)
{
    if(thc_rpg_GetLevel(client) > 99)
    {
         ServerCommand("thc_rpg_resetplayer %N", client);
         CreateTimer(1.0, Timer_Credits, GetClientUserId(client), TIMER_HNDL_CLOSE);
    }
    else
    {
         PrintToChat(client, "Получить престиж можно только после достижения уровня 100");
    }
    return Plugin_Handled;
}
public Action Timer_Credits(Handle hTimer, any UserId)
{
    int client = GetClientOfUserId(UserId);
    ServerCommand("thc_rpg_credits set %N 50000", client);
}
А что нужно ставить вместо %N, чтоб команда выполнялась по стим ид, а не нику?
Например, в строке ServerCommand("thc_rpg_credits set %N 50000", client)
 

CAH4E3

Сосанчез.
Сообщения
1,597
Реакции
779
А что нужно ставить вместо %N, чтоб команда выполнялась по стим ид, а не нику?
Например, в строке ServerCommand("thc_rpg_credits set %N 50000", client)
Возможно ошибаюсь.
PHP:
GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));
Ну и
PHP:
ServerCommand("thc_rpg_credits set %s 50000", authid)
p.s Не бейте костылями
Походу это не правильно :P
 

Rostu

Добрая душа
Сообщения
986
Реакции
622
Возможно ошибаюсь.
PHP:
GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));
Ну и
PHP:
ServerCommand("thc_rpg_credits set %s 50000", authid)
p.s Не бейте костылями
Но а потом будут спрашивать, а почему не компилится))
PHP:
#include <sourcemod>
#include <thc_rpg>

public void OnPluginStart()
{
    RegConsoleCmd("prestige", Command_Prestige);
}
 
public Action Command_Prestige(int client, int args)
{
    if(thc_rpg_GetLevel(client) > 99)
    {
         ServerCommand("thc_rpg_resetplayer %N", client);
         CreateTimer(1.0, Timer_Credits, GetClientUserId(client), TIMER_HNDL_CLOSE);
    }
    else
         PrintToChat(client, "Получить престиж можно только после достижения уровня 100");
    
    return Plugin_Handled;
}
public Action Timer_Credits(Handle hTimer, any UserId)
{
    int client = GetClientOfUserId(UserId);
    if(client)
    {
        char szAuth[32];
        GetClientAuthId(client, AuthId_Engine, szAuth, sizeof szAuth);
        ServerCommand("thc_rpg_credits set %s 50000", szAuth);
    }
}
 

CAH4E3

Сосанчез.
Сообщения
1,597
Реакции
779
Но а потом будут спрашивать, а почему не компилится))
PHP:
#include <sourcemod>
#include <thc_rpg>

public void OnPluginStart()
{
    RegConsoleCmd("prestige", Command_Prestige);
}
 
public Action Command_Prestige(int client, int args)
{
    if(thc_rpg_GetLevel(client) > 99)
    {
         ServerCommand("thc_rpg_resetplayer %N", client);
         CreateTimer(1.0, Timer_Credits, GetClientUserId(client), TIMER_HNDL_CLOSE);
    }
    else
         PrintToChat(client, "Получить престиж можно только после достижения уровня 100");
   
    return Plugin_Handled;
}
public Action Timer_Credits(Handle hTimer, any UserId)
{
    int client = GetClientOfUserId(UserId);
    if(client)
    {
        char szAuth[32];
        GetClientAuthId(client, AuthId_Engine, szAuth, sizeof szAuth);
        ServerCommand("thc_rpg_credits set %s 50000", szAuth);
    }
}
Щито поделать, если я не кодер :D
 

Saniiro58

Участник
Сообщения
82
Реакции
12
Спасибо вам всем, очень помогли, у меня возник ещё 1 вопросик, а можно ли сделать данную штуку автоматической?
Т.е. добавить автопроверку уровня, по которой будет это всё делаться (заместо команды)
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Спасибо вам всем, очень помогли, у меня возник ещё 1 вопросик, а можно ли сделать данную штуку автоматической?
Т.е. добавить автопроверку уровня, по которой будет это всё делаться (заместо команды)
Можно сделать когда игрок апает 100, у него все сбрасывается и ставятся кредиты, но опять же нужно искать в инклюдах событие повышения уровня, если такое там есть (по типу SMRPG_OnClientLevel). Можно и без него, но с ним адекватнее.
Да и проблема будет, что с максимальным уровнем никто бегать не сможет, ибо сбрасываться будет тупо всегда при достижении 100, раз за разом. Я бы на месте игрока любыми способами на 99 качаться бы переставал.
А чтоб можно было сбрасывать определенное кол-во раз, к примеру только 1, нужно уже базу делать, а это, думаю, геморно.
Вместо спасибо лайков бы нам натыкал :D
 
Сверху Снизу