Не получает за общей урон

Тема в разделе "Программирование / Скриптинг", создана пользователем acik, 21 мар 2014.

  1. acik

    acik

    Сообщения:
    734
    Симпатии:
    628
    Вообщем нужна помошь
    не могу понять почему не дает гранату
    или не правильно оформил при компиляции ошибок нет
    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <sdktools>

    new Handle:cv_needed_HE;
    new 
    Handle:cv_needed_flash;
    new 
    Handle:cv_needed_smoke;
    new 
    neededlist[3];

    new 
    MaxDamage 10000000;
    new 
    player_damage[MAXPLAYERS 1];
    new 
    Stringweaponlist[][] = { "hegrenade""flashbang""smokegrenade" };
    public 
    OnPluginStart() 
    {

        
    cv_needed_HE CreateConVar("zr_needed_HE""600""Сколько урона нужно сделать, чтоб получить hegrenade, 0 = disable");
        
    neededlist[0] = GetConVarInt(cv_needed_HE);
        
        
    cv_needed_flash CreateConVar("zr_needed_flash","900""Сколько урона нужно сделать, чтоб получить flashbang, 0 = disable");
        
    neededlist[1] = GetConVarInt(cv_needed_flash);

        
    cv_needed_smoke CreateConVar("zr_needed_smoke""1200""Сколько урона нужно сделать, чтоб получить smokegrenade, 0 = disable");
        
    neededlist[2] = GetConVarInt(cv_needed_smoke);


        
    HookEvent("player_hurt"Event_PlayerHurtEventHookMode_Post);

    }

    public 
    Event_PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        new 
    damage GetEventInt(event"dmg_health");
        if(
    attacker == || g_damager == 0) return;
        new 
    needed[3], String:ent_weapon[32];
        
    player_damage[attacker] += damage;
        if(
    player_damage[attacker] >= MaxDamageplayer_damage[attacker] = 0;
        
    PrintHintText(attacker"%t""my_damage"player_damage[attacker]);
        for(new 
    03j++)
        {
            
    needed[j] = neededlist[j];
            if (
    needed[j] >= 500)
            {
                for(new 
    2300i++)
                {    
                    if(
    player_damage[attacker] >= needed[j])
                    {
                        
    needed[j] = neededlist[j]*i;
                        
    Format(ent_weaponsizeof(ent_weapon), "weapon_%s"weaponlist[j]);
                        
    GivePlayerItem(attackerent_weapon);                
                    }
                }
            }
        }
    }
     
    Последнее редактирование: 21 мар 2014
    miracle нравится это.
  2. Primo

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

    Сообщения:
    1.190
    Симпатии:
    306
    Не проще будет?

    PHP:
    public Event_PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        new 
    damage GetEventInt(event"dmg_health");
        if(
    damage >= GetConVarInt(cv_needed_HEGivePlayerItem(attacker"weapon_hegrenade");
        if(
    damage >= GetConVarInt(cv_needed_flashGivePlayerItem(attacker"weapon_flashbang");
        if(
    damage >= GetConVarInt(cv_needed_smokeGivePlayerItem(attacker"weapon_smokegrenade");
    }
    Надо только сделать проверку, есть ли граната у игрока.
     
  3. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    Primo
    Как дамаг может быть больше 1200, к примеру?
     
  4. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    ОМГ, в player_hurt постоянно делать GetConVarInt ...

    У тебя ошибка, нужно так:
    PHP:
    player_damage[attacker] += GetEventInt(event"dmg_health");
        if(
    player_damage[attacker] >= чего-то там.
        
    //выдаешь гранату
        
    else if(player_damage[attacker] >= чего-то там.
        
    //выдаешь гранату
        
    else if(player_damage[attacker] >= чего-то там.
        
    //выдаешь гранату
        // проверяешь больше ли максимального значения и если да - обнуляешь.
    }
    И еще проверяй attacker>0
    acik,
    PHP:
    new Stringweaponlist[3][] = { "hegrenade""flashbang""smokegrenade" };
    Добавлено через 17 минут
    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <sdktools>

    new g_iDamage[3];
    new 
    g_iClientDamage[MAXPLAYERS+1];
    new 
    String:sWeapons[3][] = {"hegrenade""flashbang""smokegrenade"};

    public 
    OnPluginStart() 
    {
        new 
    Handle:hCvar;
        
    HookConVarChange((hCvar CreateConVar("zr_needed_HE""600""Сколько урона нужно сделать, чтоб получить hegrenade, 0 = disable")), OnHeChange);
        
    g_iDamage[0] = GetConVarInt(hCvar);
        
        
    HookConVarChange((hCvar CreateConVar("zr_needed_flash","900""Сколько урона нужно сделать, чтоб получить flashbang, 0 = disable")), OnFlashChange);
        
    g_iDamage[1] = GetConVarInt(hCvar);
        
        
    HookConVarChange((hCvar CreateConVar("zr_needed_smoke""1200""Сколько урона нужно сделать, чтоб получить smokegrenade, 0 = disable")), OnSmokeChange);
        
    g_iDamage[2] = GetConVarInt(hCvar);
        
        
    CloseHandle(hCvar);

        
    HookEvent("player_hurt"Event_PlayerHurtEventHookMode_Post);
    }

    public 
    OnHeChange(Handle:hCvar, const String:oldValue[], const String:newValue[]) g_iDamage[0] = GetConVarInt(hCvar);
    public 
    OnFlashChange(Handle:hCvar, const String:oldValue[], const String:newValue[]) g_iDamage[1] = GetConVarInt(hCvar);
    public 
    OnSmokeChange(Handle:hCvar, const String:oldValue[], const String:newValue[]) g_iDamage[2] = GetConVarInt(hCvar);

    public 
    Event_PlayerHurt(Handle:hEvent, const String:name[], bool:dontBroadcast)
    {
        new 
    iAttacker GetClientOfUserId(GetEventInt(hEvent"attacker"));
        if(
    iAttacker 0)
        {
            
    g_iClientDamage[iAttacker] += GetEventInt(hEvent"dmg_health");
            
    PrintHintText(iAttacker"%t""my_damage"g_iClientDamage[iAttacker]); // Фраза из перевода, но его нет...
            
    decl String:sWeapon[60];
            
    // тут что-то такое напартачил, нужно чтобы если дамага набралось больше найбольшего из кваров, то g_iClientDamage[iAttacker] = 0
            
    for(new j=30j--)
            {
                if (
    g_iClientDamage[iAttacker] >= g_iDamage[j])
                {
                    
    FormatEx(sWeaponsizeof(sWeapon), "weapon_%s"sWeapons[j]);
                    
    GivePlayerItem(iAttackersWeapon);
                    if(
    == 1g_iClientDamage[iAttacker] = 0;
                }
            }
        }
     
    Последнее редактирование: 21 мар 2014
    acik нравится это.
  5. acik

    acik

    Сообщения:
    734
    Симпатии:
    628
    R1KO, спс но почему j = 3 и j >0 то есть j имеет 3,2,1
    но массив g_iDamage[3] иммет только от 0 до 2 ?
    Оффтоп
     
    miracle нравится это.
  6. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    точно. Лень было думать, я словами написал)
     
  7. acik

    acik

    Сообщения:
    734
    Симпатии:
    628
    R1KO, и вот еще получается он считает например 600 800 1000 но
    если поменять порядок 600 1000 800 то он до 800 дойдет и сбросит Правельно?
     
    miracle нравится это.
  8. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    acik, да, и это нужно продумать. Именно над этим мне было лень думать.
    PHP:
    for(new 03j++) // после этого ничего не понятно
        
    {
            
    needed[j] = neededlist[j];
            if (
    needed[j] >= 500)
            {
                for(new 
    2300i++) // как и зачем?
                
    {    
                    if(
    player_damage[attacker] >= needed[j])
                    {
                        
    needed[j] = neededlist[j]*i;
                        
    Format(ent_weaponsizeof(ent_weapon), "weapon_%s"weaponlist[j]); // эт ясно
                        
    GivePlayerItem(attackerent_weapon);                
                    }
                }
            }
        }
     
  9. Konstantin

    Konstantin

    Сообщения:
    1.789
    Симпатии:
    767
  10. acik

    acik

    Сообщения:
    734
    Симпатии:
    628
    R1KO, этот вариант сделал
    PHP:
                for(new 1300i++)
                {
                for(new 
    03j++)
                {
                    if(
    neededlist[j] >= 500)
                    {
                    if(
    myDamage[attacker] >= neededlist[j]*i)
                    {
                        
    Format(ent_weaponsizeof(ent_weapon), "weapon_%s"weaponlist[j]);
                        
    GivePlayerItem(attackerent_weapon);
                        
    Format(text_weaponsizeof(text_weapon), "%s"weapontext[j]);
                        if (
    advertsCPrintToChat(attacker"%t""Giving Grenade"text_weapon);
                        
    //if( j == 2) returnDamage[attacker] = 0;
                    
    }
                    }
                }
                }

    Konstantin, :-D ну да не много сократил:P
     
    miracle нравится это.
  11. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    for(new i = 1; i < 300; i++)
    зачем этО?!
     
  12. acik

    acik

    Сообщения:
    734
    Симпатии:
    628
    R1KO, это множитель i
    будет умножать число урона и свирять)
     
    miracle нравится это.
  13. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    Roberto Sourcequadnet нравится это.
  14. acik

    acik

    Сообщения:
    734
    Симпатии:
    628
    R1KO, вот так получилось больше не хватает тямы
    PHP:
    {
        new 
    String:ent_weapon[64], String:text_weapon[64];
        
    myDamage[attacker] += damage;
        if(
    myDamage[attacker] >= MaxDamagemyDamage[attacker] = 0;
        if(
    advertsPrintHintText(attacker"%t""my_damage"myDamage[attacker]);
        for(new 
    03j++)
        {
            if(
    neededlist[j] >= 500)
            {
                
    ? (smokeDamage[attacker] += damage) : (flashDamage[attacker] += damage) : (heDamage[attacker] += damage) ;
                if((
    smokeDamage[attacker] : flashDamage[attacker] : heDamage[attacker]) >= neededlist[j])
                {
                    
    ? (smokeDamage[attacker] = 0) : (flashDamage[attacker] = 0) : (heDamage[attacker] = 0);
                    
    Format(ent_weaponsizeof(ent_weapon), "weapon_%s"weaponlist[j]);
                    
    GivePlayerItem(attackerent_weapon);
                    
    Format(text_weaponsizeof(text_weapon), "%s"weapontext[j]);
                    if (
    advertsCPrintToChat(attacker"%t""Giving Grenade"text_weapon);
                }
            }
        }
    }
     
    miracle нравится это.