[CS:S/CS:GO] dPI Game v1.4.1

Тема в разделе "Утверждённые плагины", создана пользователем Primo, 9 мар 2014.

  1. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    dPI Game

    Статус:
    CSGO ; CSS | v1.4.1 | by Primo

    Описание:
    Добавляет на сервер простую систему, которая подобна GunGame. Отличием от обычного GunGame является то, что игрок должен повышать уровень, зарабатывая опыт за убийства, чтобы открыть новое оружие. На сервере будет вестись личная статистика игрока.

    Каждое требуемое кол-во опыта для повышения уровня вычисляется по формуле:Level*200
    Получаемый опыт за убийство вычисляется по формуле: HealthAttacker*LevelVictim/10

    Все данные сохраняются в базу SQLite. Поддержки MySQL нет!
    Команд в данной версии нет, как и кваров. Это лишь сырая версия.
    Исходник легко изменяемый, нет замудрённых функций и т.п.

    Установка:
    Скомпилируйте плагин.
    Открываем addons/sourcemod/plugins/ кидаем туда скомпилированный dpInfo.smx
    Открываем addons/sourcemod/configs/databases.cfg и добавляем туда
    PHP:
    "dpInfo"
        
    {
            
    "driver"    "sqlite"
            "database"  "dpInfo"
        
    }
    Перезагрузить сервер и играть.

    Примечание:
    Редактируйте исходник. В нём указана вся реклама и текст.
    Не убирайте копирайты из исходника, они вам ничем не помешают, уважайте чужой труд.

    Увидеть плагин в действии можно на сервере 91.238.227.122:27218

    Плагин тестируется на SourceMod 1.5.3

    История версий:

    Версия 1.4

    * При спавне удаляется оружие
    * Подсчитывается кол-во убийств ботов
    * За ботов не дают никакой награды
    * Требуемый опыт изменён с 1500 на 200

    Версия 1.3

    * Добавлен native
    PHP:
    //Запускает проверку уровня
    native CheckLvlGun(client);
    * Добавлено меню выбора доступного оружия, вызываемое при спавне.
    Версия 1.2
    *Добавлены Natives:
    PHP:
    // Получает уровень игрока
    native pGetPlayerLevel(client);

    //Получает опыт игрока
    native pGetPlayerEXP(client);

    //Устанавливает уровень игрока
    native pSetPlayerLevel(clientnum1);

    //Устанавливает опыт игрока
    native pSetPlayerEXP(clientnum1);

    //Выводит статистику игрока в чат
    native pViewStatistic(client);

    //Получает кол-во кредитов игрока
    native pGetPlayerCredits(client);

    //Устанавливает кредиты игроку
    native pSetPlayerCredits(clientnum1);

    //Получает кол-во убийств игрока
    native pGetPlayerKills(client);

    //Устанавливает кол-во убийств игрока
    native pSetPlayerKills(clientnum1);

    //Получает кол-во смертей игрока
    native pGetPlayerDeaths(client);

    //Устанавливает кол-во смертей игрока
    native pSetPlayerDeaths(clientnum1);

    //Получает кол-во серии убийств
    native pGetPlayerKillStreak(client);

    //Устанавливает кол-во серии убийств
    native pSetPlayerKillStreak(clientnum1);

    Версия 1.1
    * Улучшен код.
    * Добавлена серия убийств
    * За убийство в голову дают дополнительные 50 опыта
    * За убийство серийного убийцы дают опыт, расчитываемый по формуле: LevelVictim*KillStreakVictim
    * В статистику выводится ваша серия в данный момент
     

    Вложения:

    Последнее редактирование: 13 июн 2014
    ololoex, ★Сириус★, Webman и ещё 1-му нравится это.
  2. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.0

    В данный момент это сырой плагин, который выставлен на всеобщее обозрение для оценки.
     
  3. fallen1994

    fallen1994

    Сообщения:
    2.347
    Симпатии:
    544
    Re: [CSGO] dPI Game v1.0

    я так и не понял суть этого плагина. Может для идеи, добавить некие преимущества за уровни?
     
  4. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.0

    Преимуществом будет самое оружие, как и в GunGame, с каждым новым уровнем выдаётся оружие лучшее предыдущего.
    Но никто не запрещает добавить в плагин еще какие-либо преимущества.
    Я хочу за очки сделать что-то типа магазина, т.к. очки в данный момент никак не задействованы.
     
  5. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    Re: [CSGO] dPI Game v1.0

    Primo, выводи нативы и форварды. Тогда к этому плагину можно будет дописать много интересного.
     
  6. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.0

    Я бы с радостью, да вот не получается) Сколько не пытался на amxx раньше, что в sm, не могу) Попробую вывести, если получится конечно.
     
  7. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    Re: [CSGO] dPI Game v1.0

    Primo, пиши в скайп, помогу.

    А теперь по плагину:
    1.
    PHP:
    //-------- 
    //-------- Выдача оружия по уровню
    public CheckLvlGun(client)
    {
        if(
    Player[pLevel][client] == 1)
        {
            
    GivePlayerItem(client"weapon_glock"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} Glock");
        }
        if(
    Player[pLevel][client] == 2)
        {
            
    GivePlayerItem(client"weapon_p250"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} P250");
        }
        if(
    Player[pLevel][client] == 3)
        {
            
    GivePlayerItem(client"weapon_fiveseven"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} FiveSeven");
        }
        if(
    Player[pLevel][client] == 4)
        {
            
    GivePlayerItem(client"weapon_deagle"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} Deagle");
        }
        if(
    Player[pLevel][client] == 5)
        {
            
    GivePlayerItem(client"weapon_elite"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} Elite");
        }
        if(
    Player[pLevel][client] == 6)
        {
            
    GivePlayerItem(client"weapon_hkp2000"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} hkp2000");
        }
        if(
    Player[pLevel][client] == 7)
        {
            
    GivePlayerItem(client"weapon_nova"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} Nova");
        }
        if(
    Player[pLevel][client] == 8)
        {
            
    GivePlayerItem(client"weapon_xm1014"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} xm1014");
        }
        if(
    Player[pLevel][client] == 9)
        {
            
    GivePlayerItem(client"weapon_mag7"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} mag7");
        }
        if(
    Player[pLevel][client] == 10)
        {
            
    GivePlayerItem(client"weapon_sawedoff"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} Sawedoff");
        }
        if(
    Player[pLevel][client] == 11)
        {
            
    GivePlayerItem(client"weapon_m249"0);
            
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} m249");
        }
    }
    //-------- 
    Тут лучше сделать так:
    PHP:
    switch(Player[pLevel][client])
        {
            case 
    1:
            {
                
    GivePlayerItem(client"weapon_glock"0);
                
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} Glock");
            }
            case 
    2:
            {
                
    GivePlayerItem(client"weapon_p250"0);
                
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} P250");
            }
            case 
    3:
            {
                
    GivePlayerItem(client"weapon_fiveseven"0);
                
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} FiveSeven");
            }
            
    // и так далее
        
    }
    А еще лучше так:
    PHP:
    new String:g_sWeapons [количество оружий][] = {"glock""p250""fiveseven""deagle""elite" ...};

    stock CheckLvlGun(client)
    {
        
    decl String:sWeapon[32];
        
    FormatEx(sWeaponsizeof(sWeapon), "weapon_"g_sWeapons[Player[pLevel][client]+1]);
        
    GivePlayerItem(clientsWeapon);
        
    CPrintToChat(client"{lightgreen}Вы получили оружие{green} %s"g_sWeapons[Player[pLevel][client]+1]);
    }
    2.
    PHP:
    enum PlayerInfo
    {
        
    pLevel,
        
    pEXP,
        
    pCredit,
        
    pKills,
        
    pDeaths,
    }

    new 
    Player[PlayerInfo][MAXPLAYERS];
    Почему так, а не так?
    PHP:
    new Player[MAXPLAYERS+1][PlayerInfo];
    P.S. Еще +1 забыл =)
    3.
    4.
    PHP:
    for (new client=1client<=GetMaxClients(); client++)
        {
            
    ViewStatistic(client);
        }
    Нет проверки в игре ли игрок.
    PHP:
    for (new client=1client <= MaxClientsclient++)
        {
            if(
    IsClientInGame(client)) ViewStatistic(client);
        }
    5.
    PHP:
    SELECT FROM `usersWHERE `Steam` = '%s';
    Зачем выбирать все если ты юзаешь не все.
    PHP:
    Player[pKills][iClient] = SQL_FetchInt(hndl2);
                
    Player[pDeaths][iClient] = SQL_FetchInt(hndl3);
                
    Player[pLevel][iClient] = SQL_FetchInt(hndl4);
                
    Player[pEXP][iClient] = SQL_FetchInt(hndl5);
                
    Player[pCredit][iClient] = SQL_FetchInt(hndl6);
    6.
    PHP:
    public OnClientDisconnect(client)
    {
        
    decl String:sAuth[32];
        
    GetClientAuthString(clientsAuthsizeof(sAuth) - 1);
        if(
    client <= MaxClients && !IsFakeClient(client))
        {

            
    decl String:sName[256], String:query[256];
            
    GetClientName(clientpName256);
            
    Format(querysizeof(query), "INSERT OR REPLACE INTO users('Steam', 'Nick', 'Kills', 'Deaths', 'Level', 'EXP', 'Credits') VALUES ('%s', '%s', %d, %d, %d, %d, %d);"sAuthpNamePlayer[pKills][client], Player[pDeaths][client], Player[pLevel][client], Player[pEXP][client], Player[pCredit][client]);
            
    SQL_TQuery(dbSQL_SelectPlayerCallbackquery0);
        }
    }
    Ты не знаешь бот это или нет, а уже получаешь стим.
    Должно быть так:
    PHP:
    public OnClientDisconnect(client)
    {
        if(!
    IsFakeClient(client))
        {
            
    decl String:sName[32], String:sAuth[32];
            if(
    GetClientName(clientsName256) && GetClientAuthString(clientsAuthsizeof(sAuth) - 1))
            {
                
    decl String:query[256];
                
    Format(querysizeof(query), "INSERT OR REPLACE INTO users('Steam', 'Nick', 'Kills', 'Deaths', 'Level', 'EXP', 'Credits') VALUES ('%s', '%s', %d, %d, %d, %d, %d);"sAuthpNamePlayer[pKills][client], Player[pDeaths][client], Player[pLevel][client], Player[pEXP][client], Player[pCredit][client]);
                
    SQL_TQuery(dbSQL_SelectPlayerCallbackquery0);
            }
        }
    }
    7.
    PHP:
    public VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if(!
    IsFakeClient(client))
        {
            if(
    IsClientInGame(client))
            {
                
    FakeClientCommand(client"drop"); 
                if(
    Player[pLevel][client] == 0)
                    
    Player[pLevel][client]++;
                
    ViewStatistic(client);
                
    CheckLevel(client);
            }
        }
    }
    Не знаю как на ксго, но на ксс player_spawn вызывается еще и при входе игрока.
    И еще проверка в игре ли игрок идет после проверки на бота. Должно быть наоборот.
    PHP:
    public VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if(
    IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client))
        {
            
    FakeClientCommand(client"drop"); 
            if(
    Player[pLevel][client] == 0Player[pLevel][client]++;
            
    ViewStatistic(client);
            
    CheckLevel(client);
        }
    }
    8.
    PHP:
    public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        new 
    victim GetClientOfUserId(GetEventInt(event"userid"));
        new 
    health GetClientHealth(attacker);
        new 
    nLVLxp;
        if(!
    IsFakeClient(attacker) || !IsFakeClient(victim))
        {
            if(
    IsClientInGame(attacker) || IsClientInGame(victim))
            {
                
    nLVLxp health*Player[pLevel][victim]/10
                nLVLxp 
    nLVLxp+Player[pEXP][attacker]
                
    Player[pKills][attacker]++;
                
    Player[pDeaths][victim]++;
                
    Player[pEXP][attacker] = nLVLxp
                Player
    [pCredit][attacker]++;
                
    ViewStatistic(attacker);
            }
        }
    }
    Тут ошибок может насыпать ибо убить игрока может мир (индекс 0).
    PHP:
    new health GetClientHealth(attacker);
    new 
    nLVLxp;
    Создавай переменные уже после всех проверок. Да и то есть они нужны.
    PHP:
    public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        new 
    victim GetClientOfUserId(GetEventInt(event"userid"));
        
        if(
    attacker && victim && IsClientInGame(attacker) && IsClientInGame(victim) && !IsFakeClient(attacker) && !IsFakeClient(victim))
        {
            new 
    nLVLxp GetClientHealth(attacker)*Player[pLevel][victim]/10
            nLVLxp 
    nLVLxp+Player[pEXP][attacker]
            
    Player[pKills][attacker]++;
            
    Player[pDeaths][victim]++;
            
    Player[pEXP][attacker] = nLVLxp
            Player
    [pCredit][attacker]++;
            
    ViewStatistic(attacker);
        }
    }

    Пока хватит.
     
    Последнее редактирование: 9 мар 2014
    ★Сириус★ и Primo нравится это.
  8. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.0

    2. Я писал на обычном pawn для samp и там использовался Player[PlayerInfo][MAXPLAYERS], поэтому я привык уже
    3. Загнался, когда печатал)
    5. Оставлю так
     
  9. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.0

    Версия 1.1
    * Улучшен код.
    * Добавлена серия убийств
    * За убийство в голову дают дополнительные 50 опыта
    * За убийство серийного убийцы дают опыт, расчитываемый по формуле: LevelVictim*KillStreakVictim
    * В статистику выводится ваша серия в данный момент
     

    Вложения:

    • dpInfo11.smx
      Размер файла:
      9,4 КБ
      Просмотров:
      2
  10. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.1

    Версия 1.2
    *Добавлены Natives:

    PHP:
    // Получает уровень игрока
    native pGetPlayerLevel(client);

    //Получает опыт игрока
    native pGetPlayerEXP(client);

    //Устанавливает уровень игрока
    native pSetPlayerLevel(clientnum1);

    //Устанавливает опыт игрока
    native pSetPlayerEXP(clientnum1);

    //Выводит статистику игрока в чат
    native pViewStatistic(client);

    //Получает кол-во кредитов игрока
    native pGetPlayerCredits(client);

    //Устанавливает кредиты игроку
    native pSetPlayerCredits(clientnum1);

    //Получает кол-во убийств игрока
    native pGetPlayerKills(client);

    //Устанавливает кол-во убийств игрока
    native pSetPlayerKills(clientnum1);

    //Получает кол-во смертей игрока
    native pGetPlayerDeaths(client);

    //Устанавливает кол-во смертей игрока
    native pSetPlayerDeaths(clientnum1);

    //Получает кол-во серии убийств
    native pGetPlayerKillStreak(client);

    //Устанавливает кол-во серии убийств
    native pSetPlayerKillStreak(clientnum1);
     

    Вложения:

    Серый™ нравится это.
  11. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.3

    Версия 1.3

    * Добавлен native
    PHP:
    //Запускает проверку уровня
    native CheckLvlGun(client);
    * Добавлено меню выбора доступного оружия, вызываемое при спавне.
     

    Вложения:

  12. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.3

    В последних версиях не используются очки, нужно их как-то задействовать. Если у кого-то есть предложения, пишите, буду только рад.
     
  13. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.4

    Выкладываю последнюю на данный момент версию, давно не редактировал плагин)

    Версия 1.4

    * При спавне удаляется оружие
    * Подсчитывается кол-во убийств ботов
    * За ботов не дают никакой награды
    * Требуемый опыт изменён с 1500 на 200
     

    Вложения:

  14. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    Re: [CSGO] dPI Game v1.4

    Primo,
    PHP:
    static Handle:db;
    Здесь можно просто new.

    PHP:
    public VErtoe_Smoke(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        new 
    Float:GetEventFloat(event"x");
        new 
    Float:GetEventFloat(event"y");
        new 
    Float:GetEventFloat(event"z");
        new 
    Float:Origin[3];
        
    Origin[0] = x;
        
    Origin[1] = y;
        
    Origin[2] = z;
        
    TeleportEntity(clientOriginNULL_VECTORNULL_VECTOR);
    }
    Зачем создавать столько переменных?

    PHP:
    public VErtoe_Smoke(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid")),
            
    Float:Origin[3];

        
    Origin[0] = GetEventFloat(event"x");
        
    Origin[1] = GetEventFloat(event"y");
        
    Origin[2] = GetEventFloat(event"z");
        
    TeleportEntity(clientOriginNULL_VECTORNULL_VECTOR);
    }

    PHP:
    public OnClientDisconnect(client)
    {
        if(!
    IsFakeClient(client))
        {
            
    decl String:sAuth[32];
            
    GetClientAuthString(clientsAuthsizeof(sAuth) - 1);
            if(
    client <= MaxClients && !IsFakeClient(client))
            {

                new 
    String:pName[256];
                
    GetClientName(clientpName256);
                
    decl String:query[256];
                
    Format(querysizeof(query), "INSERT OR REPLACE INTO users('Steam', 'Nick', 'Kills', 'Deaths', 'Level', 'EXP', 'Credits', 'BotKills') VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d);"sAuthpNamePlayer[pKills][client], Player[pDeaths][client], Player[pLevel][client], Player[pEXP][client], Player[pCredit][client], Player[pBotKills][client]);
                
    SQL_TQuery(dbSQL_SelectPlayerCallbackquery0);
            }
        }
    }
    Много лишних действий.
    С именем игрока нужно делать SQL_EscapeString
    new String:pName[256]; Зачем так много ?
    decl String:query[256]; А здесь мало будет.

    PHP:
    public OnClientDisconnect(client)
    {
        if(
    client <= MaxClients && !IsFakeClient(client))
        {
            
    decl String:sAuth[64], String:pName[150], String:query[512];
            
    GetClientName(clientsAuthsizeof(sAuth) - 1);
            
    SQL_EscapeString(dbsAuthpNamesizeof(pName) - 1);
            
    GetClientAuthString(clientsAuthsizeof(sAuth) - 1);
            
    FormatEx(querysizeof(query), "INSERT OR REPLACE INTO users('Steam', 'Nick', 'Kills', 'Deaths', 'Level', 'EXP', 'Credits', 'BotKills') VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d);"sAuthpNamePlayer[pKills][client], Player[pDeaths][client], Player[pLevel][client], Player[pEXP][client], Player[pCredit][client], Player[pBotKills][client]);
            
    SQL_TQuery(dbSQL_SelectPlayerCallbackquery);
        }
    }

    PHP:
    public VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if(
    IsClientInGame(client) && !IsFakeClient(client))
        {
    Проверяй IsPlayerAlive

    PHP:
    public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        new 
    victim GetClientOfUserId(GetEventInt(event"userid"));
        new 
    headshot GetClientOfUserId(GetEventInt(event"headshot"));
        if(
    attacker && victim 0)
        {
            if(
    IsClientInGame(attacker) && IsClientInGame(victim))
            {
                if(
    IsFakeClient(victim))
                {
                    
    Player[pBotKills][attacker]++;
                }
                if(!
    IsFakeClient(attacker) && !IsFakeClient(victim))
                {
                    new 
    nLVLxp GetClientHealth(attacker)*Player[pLevel][victim]/10
                    nLVLxp 
    nLVLxp+Player[pEXP][attacker]
                    
    Player[pKills][attacker]++;
                    
    Player[pDeaths][victim]++;
                    
    Player[pEXP][attacker] = nLVLxp
                    Player
    [pCredit][attacker]++;
                    
    Player[pKillStreak][attacker]++;
                    
    Player[pKillStreak][victim] = 0
                    
    if(Player[pKillStreak][victim] > 0)
                    {
                        new 
    nLVLxp2 Player[pLevel][victim]*Player[pKillStreak][victim];
                        
    Player[pEXP][attacker] = Player[pEXP][attacker]+nLVLxp2
                        PrintToChat
    (attacker"Вы получили дополнительно \x01\x04%d \x01\x05опыта за убившего \x01\x04\%d \x01\x05людей"nLVLxp2Player[pKillStreak][victim]);
                    }
                    if(
    headshot)
                    {
                        
    Player[pEXP][attacker] = Player[pEXP][attacker]+50;
                        
    PrintToChat(attacker"Вы получили \x01\x04 50\x01\x05 опыта за убийство в голову");
                    }
                    
    ViewStatistic(attacker);
                }
            }
        }
    Что за бред вот тут?
    PHP:
    new headshot GetClientOfUserId(GetEventInt(event"headshot"));
    "headshot" Это буловое значение. Почему инт? Зачем получать индекс клиента из хедшота?? Шта???

    К тому же создаешь переменные перед проверками, делай после них.

    Вот так:

    PHP:
    public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker")),
            
    victim GetClientOfUserId(GetEventInt(event"userid"));
        if(
    attacker && IsClientInGame(attacker) && victim && IsClientInGame(victim))
        {
            if(
    IsFakeClient(victim)) Player[pBotKills][attacker]++;
            if(!
    IsFakeClient(attacker) && !IsFakeClient(victim))
            {
                new 
    nLVLxp GetClientHealth(attacker)*Player[pLevel][victim]/10;
                
    nLVLxp nLVLxp+Player[pEXP][attacker];
                
    Player[pKills][attacker]++;
                
    Player[pDeaths][victim]++;
                
    Player[pEXP][attacker] = nLVLxp;
                
    Player[pCredit][attacker]++;
                
    Player[pKillStreak][attacker]++;
                
    Player[pKillStreak][victim] = 0;
                if(
    Player[pKillStreak][victim] > 0)
                {
                    new 
    nLVLxp2 Player[pLevel][victim]*Player[pKillStreak][victim];
                    
    Player[pEXP][attacker] = Player[pEXP][attacker]+nLVLxp2
                    PrintToChat
    (attacker"Вы получили дополнительно \x01\x04%d \x01\x05опыта за убившего \x01\x04\%d \x01\x05людей"nLVLxp2Player[pKillStreak][victim]);
                }
                if(
    GetEventBool(event"headshot"))
                {
                    
    Player[pEXP][attacker] = Player[pEXP][attacker]+50;
                    
    PrintToChat(attacker"Вы получили \x01\x04 50\x01\x05 опыта за убийство в голову");
                }
                
    ViewStatistic(attacker);
            }
        }

    Далее там с оружием.
    Лучше хранить все названия и имена оружий в глобальном массиве строк и юзать индексы. Удобнее будет.

    :acute:
     
    Primo нравится это.
  15. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.4

    Спасибо за обращенное внимание на код, но некоторые моменты я всё-таки пропущу.
     
  16. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    Re: [CSGO] dPI Game v1.4

    Primo, На твоем месте я бы учел все замечания (особенно последних 3). Ибо они критические.
     
  17. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.4

    В SQL функции вы используете переменную sAuth, в которую сначала записываете ник персонажа, потом передаёте данные функцией SQL_EscapeString переменной pName. После этой операции вы записываете steamid в переменную sAuth, я правильно понял ваш предложенный алгоритм?
     
  18. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    Re: [CSGO] dPI Game v1.4

    Primo, Зачем создавать лишнюю переменную если можна сделать так?
     
    Primo нравится это.
  19. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    Re: [CSGO] dPI Game v1.4

    Смоком можно залететь за пределы карты.
     
  20. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Re: [CSGO] dPI Game v1.4

    Смок вам никто не даёт, это просто я сделал функцию для будущих версий.