Изменить количество повреждения в player_hurt
| |
scorpion2904
|
Дата: Воскресенье, 18.11.2012, 18:37:47 | Сообщение # 1 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 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 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 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 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 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 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 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; }
Гости не могут скачивать файлы
|
|
|
| |
scorpion2904
|
Дата: Понедельник, 19.11.2012, 15:27:09 | Сообщение # 7 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 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 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 68
Репутация: 5 [ +/- ]
|
|
Все норм получилосьДобавлено (19.11.2012, 17:29:01) --------------------------------------------- И еще вопрос: не дает ли sdkhooks нагрузку на сервер?
|
|
| |
_wS_
|
Дата: Вторник, 20.11.2012, 03:09:07 | Сообщение # 10 |
|
Любой плаг дает какую-то нагрузку, ну а sdkhooks тем более. Хотя, если им не злоупотреблять/правильно использовать - то наверно можно не переживать. В некоторых случаях, вместо функций из расширений, можно использовать стандартные SM функции. А вот если стандартными это никак уже не реализовать, то только тогда нужно ставить расширение (если такое есть). Вот в player_hurt мы изменили hp стандартными функциями, и не нужно использовать SDKHook_OnTakeDamage.
|
|
| |
|