Увеличение урона в 2 раза

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

  1. Webman

    Webman типо кодер

    Сообщения:
    756
    Симпатии:
    269
    Здравствуйте. Помогите, пожалуйста.

    Хочу сделать увеличение урона (damage) в 2 раза.
    Например, чтобы удар с ножа снимал не 65hp, а 130 hp

    PHP:
    #include <sourcemod> 
     #include <sdktools> 

     
    public OnPluginStart() 
     { 
          
    HookEvent("player_hurt"EventPlayerHurtEventHookMode_Pre); 
     } 

     public 
    Action:EventPlayerHurt(Handle:event, const String:name[],bool:dontBroadcast
     { 
          new 
    victim GetClientOfUserId(GetEventInt(event"userid"));
          new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
          
    // code 
     

    Подскажите, как сделать. Заранее спасибо.
     
  2. R1KO

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

    Сообщения:
    6.801
    Симпатии:
    3.847
    PHP:
    public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {    
        
    damage damage*2;
            return 
    Plugin_Changed;
    }  
     
    Webman нравится это.
  3. SaInT.P

    SaInT.P

    Сообщения:
    1.266
    Симпатии:
    238
    Webman, с чего бы это? удар в спину снимает 175 хп
     
  4. Webman

    Webman типо кодер

    Сообщения:
    756
    Симпатии:
    269
    Подскажите, пожалуйста. Вот так правильно будет?

    PHP:
    public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {
        new 
    WeaponIndex;
        
    decl String:ClassName[30];
        
    WeaponIndex GetEntPropEnt(attackerProp_Send"m_hActiveWeapon");
        
    GetEdictClassname(WeaponIndexClassNamesizeof(ClassName));
        
        if (
    StrEqual("weapon_awp"ClassNamefalse))
        {
        
    damage damage*2;
        return 
    Plugin_Changed;
        }
        return 
    Plugin_Handled;
    }
    По поводу 5 строчки сомнения.
     
  5. R1KO

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

    Сообщения:
    6.801
    Симпатии:
    3.847
    Webman, да. Но почему бы не сделать сразу так:

    PHP:
    new WeaponIndex GetEntPropEnt(attackerProp_Send"m_hActiveWeapon");
    И еще если
    PHP:
    damage damage*2;
    не проканает то так:
    PHP:
    damage float(damage*2);
    И в конце должно быть не
    PHP:
    return Plugin_Handled;
    а
    PHP:
    return Plugin_Continue;
     
    Webman нравится это.
  6. Webman

    Webman типо кодер

    Сообщения:
    756
    Симпатии:
    269
    Возвращаюсь к данной теме снова, т.к. не получается что-то:
    Вот код:
    PHP:
    public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {
        new 
    WeaponIndex GetEntPropEnt(attackerProp_Send"m_hActiveWeapon");
        
    decl String:ClassNameZ[30];
        
    GetEdictClassname(WeaponIndexClassNameZsizeof(ClassNameZ));
        if (
    StrEqual("weapon_deagle"ClassNameZfalse))
        {
            
    damage float(damage*5);
            return 
    Plugin_Changed;
        }
        return 
    Plugin_Handled;
    }
    Пробовал с/без float() - не работает.
     
  7. R1KO

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

    Сообщения:
    6.801
    Симпатии:
    3.847
    Webman, пробуй так

    PHP:
    public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {
        
    decl String:sWeapon[24];
        
    GetClientWeapon(attackersWeaponsizeof(sWeapon));
        if (
    StrEqual(sWeapon[7], "deagle"))
        {
            
    damage damage*5;
            return 
    Plugin_Changed;
        }
        return 
    Plugin_Handled;
    }
     
    Последнее редактирование: 24 янв 2014
    Webman нравится это.
  8. Webman

    Webman типо кодер

    Сообщения:
    756
    Симпатии:
    269
    attacker может быть?
     
  9. R1KO

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

    Сообщения:
    6.801
    Симпатии:
    3.847
    Webman, да)
     
    Webman нравится это.
  10. Webman

    Webman типо кодер

    Сообщения:
    756
    Симпатии:
    269
    R1KO, Спасибо)
     
  11. Марина

    Марина

    Сообщения:
    145
    Симпатии:
    3
    а как только для CT?
     
  12. Webman

    Webman типо кодер

    Сообщения:
    756
    Симпатии:
    269
    Пробуй
    PHP:
    public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {
     if (
    GetClientTeam(attacker) == 3)
     {
     
    damage damage*5;
     return 
    Plugin_Changed;
     }
     return 
    Plugin_Continue;
    }
     
  13. R1KO

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

    Сообщения:
    6.801
    Симпатии:
    3.847
    @Webman, проверь attacker на > 0 и <= MaxClients
     
    Webman нравится это.
  14. Ровный Кент

    Ровный Кент

    Сообщения:
    377
    Симпатии:
    32
    А как сделать привязку к steamid ? Например чтоб только определенный игрок мог наносить x2 урона?
     
  15. Webman

    Webman типо кодер

    Сообщения:
    756
    Симпатии:
    269
    Пробуй

    PHP:
    public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {
       if (
    attacker <= || attacker MaxClients)
         return 
    Plugin_Continue;
        
       
    decl String:steamId[32];
       
    GetClientAuthString(attackersteamIdsizeof(steamId));
      
       if (!
    strcmp(steamId"STEAM_0:1:234567890"))
       {
         
    damage damage*2;
         return 
    Plugin_Changed;
       }
      
       return 
    Plugin_Continue;
    }
     
    Ровный Кент нравится это.
  16. Марина

    Марина

    Сообщения:
    145
    Симпатии:
    3
    на зомби моде всё не рабочее
     
  17. Ровный Кент

    Ровный Кент

    Сообщения:
    377
    Симпатии:
    32
    А вот так ? :

    Код:
    #include <sourcemod>
    #include <sdktools>
    
    
    public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {
    if (attacker <= 0 || attacker > MaxClients)
    return Plugin_Continue;
    
    decl String:steamid[32];
    GetClientAuthId(attacker, AuthId_Steam3, steamid, sizeof(steamid));
    
    if (!strcmp(steamid, "STEAM_0:1:90969126"))
    {
    damage = damage*10;
    return Plugin_Changed;
    }
    
    return Plugin_Continue;
    }
    
     
  18. White Wolf

    White Wolf Супер-модератор

    Сообщения:
    1.356
    Симпатии:
    563
    Лучше использовать SDKHook. С его помощью можно получить и оружие и атакующего и урон.
    PHP:
    #include <sdkhooks>

    bool bAuthorized[MAXPLAYERS+1];
    char cSteamIDs[][32] = {
       
    "STEAM_0:0:123456",
       
    "STEAM_0:1:111111"
    };

    public 
    void OnClientPutInServer(int client)
    {
       
    bAuthorized[client] = GetAuthentication(client);
       
       
    SDKHook(clientSDKHook_OnTakeDamageAliveOnTakeDamageAlive);
    }

    public 
    Action OnTakeDamageAlive(int victimint &attackerint &inflictorfloat &damageint &damagetypeint &weaponfloat damageForce[3], float damagePosition[3], int damagecustom)
    {
       if (
    attacker && attacker <= MaxClients && victim && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker))
       {
         
    damage *= 2.0;
         return 
    Plugin_Changed;
       }
       
       return 
    Plugin_Continue;
    }

    bool GetAuthentication(int client)
    {
       
    char cAuth[32];
       
    GetClientAuthId(clientAuthId_EnginecAuthsizeof(cAuth));
       
       for (
    int i 0sizeof(cSteamIDs); ++i)
       {
         if (
    strcmp(cAuthcSteamIDs[i], false) == 0)
           return 
    true;
       }
       
       return 
    false;
    }
     
    Webman, Rabb1t и Ровный Кент нравится это.
  19. Ровный Кент

    Ровный Кент

    Сообщения:
    377
    Симпатии:
    32
    damage *= 2.0; // Float ?
    То есть можно и damage *= 1.7 вместо 2.0 ?
     
  20. White Wolf

    White Wolf Супер-модератор

    Сообщения:
    1.356
    Симпатии:
    563
    Можно.
     
    Ровный Кент нравится это.