Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Изменить количество повреждения в player_hurt (Чтобы отняло 'x' hp и не убило)
Изменить количество повреждения в player_hurt
scorpion2904 Дата: Воскресенье, 18.11.2012, 18:37:47 | Сообщение # 1
Сообщений: 68
Репутация: 5 [ +/- ]
При выстреле из awp у того в кого стреляют должно отняться 20 хп но почему то не работает

Вот сам код

Code
new client = GetClientOfUserId(GetEventInt(event, "userid"));
new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
new hp = GetClientHealth(client);
decl String:weapon_name[64];
GetClientWeapon(attacker,weapon_name,19)
if (StrEqual("weapon_awp",weapon_name)== true)
{
     SetEntProp(client, Prop_Send, "m_iHealth", hp - 20, 1);
  }


Сообщение отредактировал scorpion2904 - Воскресенье, 18.11.2012, 19:05:54
 
Sunday Дата: Воскресенье, 18.11.2012, 19:35:29 | Сообщение # 2
Сообщений: 186
Репутация: 24 [ +/- ]
Code

#include <sourcemod>

public OnPluginStart()
{
   HookEvent("player_hurt", Event_PlayerHurt, EventHookMode_Pre);
}

public Event_PlayerHurt(Handle:Event, const String:name[], bool:dontBroadcast)
{
      new pd_user = GetClientOfUserId(GetEventInt(Event,"userid"));
      new pd_attacker = GetClientOfUserId(GetEventInt(Event,"attacker"));
      new hp = GetClientHealth(pd_user);

      if(pd_user != pd_attacker && IsClientInGame(pd_user) && IsPlayerAlive(pd_attacker))
      {
       if(IsClientConnected(pd_user) && IsClientConnected(pd_attacker))
       {
        decl String:weapon[64];
        GetEventString(Event, "weapon", weapon, sizeof(weapon));

        if(strcmp(weapon, "awp") == 0)
        {
         SetEntProp(pd_user, Prop_Send, "m_iHealth", hp - 20, 1);
        }
       }
      }
}


Может как то так получится. Еще, попробуй за место weapon_awp написать просто awp в своем коде.

Сейчас проверил, так тоже не работает...


Сообщение отредактировал Sunday - Воскресенье, 18.11.2012, 20:06:12
 
scorpion2904 Дата: Воскресенье, 18.11.2012, 20:07:12 | Сообщение # 3
Сообщений: 68
Репутация: 5 [ +/- ]
Все равно не получается
 
_wS_ Дата: Воскресенье, 18.11.2012, 21:14:19 | Сообщение # 4
Так попроб

Code
#pragma semicolon 1
#include <sourcemod>

public OnPluginStart()
{
     HookEvent("player_hurt", player_hurt, EventHookMode_Pre);
}

public Action:player_hurt(Handle:event, const String:name[], bool:silent)
{
     decl String:item[5];
     GetEventString(event, "weapon", item, 5);
     if (strcmp(item, "awp") == 0)
     {
         new victim = GetClientOfUserId(GetEventInt(event,"userid"));
         new hp = (GetClientHealth(victim) + GetEventInt(event, "dmg_health")) - 20;
         if (hp > 0) SetEntProp(victim, Prop_Data, "m_iHealth", hp);
     }
     return Plugin_Continue;
}
 
scorpion2904 Дата: Понедельник, 19.11.2012, 13:55:21 | Сообщение # 5
Сообщений: 68
Репутация: 5 [ +/- ]
Так тоже не работает
 
_wS_ Дата: Понедельник, 19.11.2012, 14:46:18 | Сообщение # 6
Я его заставил:

Code
#pragma semicolon 1
#include <sourcemod>

new m_iHealth;

public OnPluginStart()
{
     if ((m_iHealth = FindSendPropOffs("CCSPlayer", "m_iHealth")) == -1)
     {
         SetFailState("m_iHealth error");
         return;
     }
     HookEvent("player_hurt", player_hurt, EventHookMode_Pre);
}

public Action:player_hurt(Handle:event, const String:name[], bool:silent)
{
     decl String:item[5];
     GetEventString(event, "weapon", item, 5);
     if (strcmp(item, "awp") == 0)
     {
         new victim = GetClientOfUserId(GetEventInt(event,"userid"));
         new old_health = GetEntProp(victim, Prop_Send, "m_iHealth") + GetEventInt(event, "dmg_health");
         if (old_health > 20) SetEntData(victim, m_iHealth, old_health - 20, 4, true);
     }
     return Plugin_Continue;
}

Прикрепления: wS.sp(0.7 Kb)
 
scorpion2904 Дата: Понедельник, 19.11.2012, 15:27:09 | Сообщение # 7
Сообщений: 68
Репутация: 5 [ +/- ]
У меня почему-то даже так:

Code
#pragma semicolon 1
#include <sourcemod>

public OnPluginStart()
{
HookEvent("player_hurt", player_hurt, EventHookMode_Pre);
}

public Action:player_hurt(Handle:event, const String:name[], bool:silent)
{
decl String:item[5];
GetEventString(event, "weapon", item, 5);
if (strcmp(item, "awp") == 0)
{
PrintToChatAll("awp");
}
return Plugin_Continue;
}


не получается


Сообщение отредактировал scorpion2904 - Понедельник, 19.11.2012, 15:27:31
 
_wS_ Дата: Понедельник, 19.11.2012, 15:34:31 | Сообщение # 8
Ну в коде ошибок то нет, значит отступы поправляй, кодировку, или компилятор молчит?
Я проверял, бота заморозил и в голову ему стрелял, убило только с 5 раза.
 
scorpion2904 Дата: Понедельник, 19.11.2012, 17:29:01 | Сообщение # 9
Сообщений: 68
Репутация: 5 [ +/- ]
Все норм получилось

Добавлено (19.11.2012, 17:29:01)
---------------------------------------------
И еще вопрос: не дает ли sdkhooks нагрузку на сервер?

 
_wS_ Дата: Вторник, 20.11.2012, 03:09:07 | Сообщение # 10
Любой плаг дает какую-то нагрузку, ну а sdkhooks тем более. Хотя, если им не злоупотреблять/правильно использовать - то наверно можно не переживать. В некоторых случаях, вместо функций из расширений, можно использовать стандартные SM функции. А вот если стандартными это никак уже не реализовать, то только тогда нужно ставить расширение (если такое есть). Вот в player_hurt мы изменили hp стандартными функциями, и не нужно использовать SDKHook_OnTakeDamage.
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Изменить количество повреждения в player_hurt (Чтобы отняло 'x' hp и не убило)
  • Страница 1 из 1
  • 1
Поиск: