Подкиньте код [урон за деньги]

pokypka20

Участник
Сообщения
244
Реакции
31
Видел на зомби моде интерестную вещь при нанесении урона начисляются деньги 1 ед. урона - 1$ подкиньте код, как это можно реализовать. Вытащить из zr не получилось.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
1) Берешь и достаешь демейдж нанесенный при player_hurt
2) Берешь и выдаешь деньги значением нанесенного урона
3) Берешь и ловишь профиты
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393

pokypka20

Участник
Сообщения
244
Реакции
31
Не получается сделать, подскажите как правильно.
PHP:
#include <sourcemod>
#include <sdktools>

public OnPluginStart() 
{ 
    HookEvent("player_hurt", DamageEvent, EventHookMode_Post)
} 

public Action:DamageEvent(Handle:event, const String:name[], bool:dontBroadcast)
{
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	new fMoney = (GetMoney(attacker) + GetEventInt(event, "dmg_health"))
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Не выдумывай.
GetEntProp(client, Prop_Send, "m_iAccount") - это деньги игрока.
SetEntProp(client, Prop_Send, "m_iAccount", money) - установка денег игроку (со значение money).
Не забудь ограничить код проверкой на $16000 и более (как "антиспам").
 

pokypka20

Участник
Сообщения
244
Реакции
31
Не выдумывай.
GetEntProp(client, Prop_Send, "m_iAccount") - это деньги игрока.
SetEntProp(client, Prop_Send, "m_iAccount", money) - установка денег игроку (со значение money).
Не забудь ограничить код проверкой на $16000 и более (как "антиспам").

Не пойму я как это зделать, второй час пытаюсь скомпилить и насчёт проверки не совсем понял. Если можно подсказку для новичков.. Как GetEntProp добавить и вообще что с ним делать не пойму. GetEntProp(client, Prop_Send, "m_iAccount", 16000) - это выдаст деньги игроку я так понимаю и нужно вместо GetEntProp(client, Prop_Send, "m_iAccount", damage) примерно так сделать, но как сформулировать и как получить значение damage не пойму. И проверка я так понимаю нужно брать проверять если денег > 16000 то return как то так вроде.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #7
PHP:
#include <sourcemod>
#include <sdktools>

public OnPluginStart() 
{ 
	HookEvent("player_hurt", DamageEvent)
} 

public DamageEvent(Handle:event, const String:name[], bool:dontBroadcast)
{
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	if(attacker && attacker != GetClientOfUserId(GetEventInt(event, "userid"))
	{
		new iNewMoney = GetEntProp(attacker, Prop_Send, "m_iAccount") + GetEventInt(event, "dmg_health");
		SetEntProp(attacker, Prop_Send, "m_iAccount", iNewMoney > 16000 ? 16000:iNewMoney);
	}
}
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Оффтоп
iNewMoney > 16000 ? 16000:iNewMoney
Мда... Чтобы ни было - всё равно проходим все проверки и устанавливаем значение.
PHP:
public OnPluginStart() HookEvent("player_hurt", DamageEvent);

public DamageEvent(Handle:event, const String:name[], bool:dontBroadcast)
{
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	if (attacker && GetClientOfUserId(GetEventInt(event, "userid")) != attacker)
	{
		new money = GetEntProp(attacker, Prop_Send, "m_iAccount");
		if (money < 16000 && (money += GetEventInt(event, "dmg_health")) < 16000) SetEntProp(attacker, Prop_Send, "m_iAccount", money);
	}
}
1) Если количество имеющихся денег больше 16000 - сразу же ничего не делаем.
2) Если 1 меньше, но сумма с уроном более 16000 - ничего не делаем.
3) Если 2 меньше, то даём эту самую сумму игроку.
Поскольку "дамаг" за раз может превышать 440 единиц (здесь равносильно $440) и учитывая, что у игрока после покупок редко $0, то убив несколько противников, у нас уже будет $16000 (и скорей всего, до конца раунда). Так что, лучше сначала проверять кошелёк игрока - меньше по нагрузке выйдет.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #9
AlmazON, свой код исправил. Мне кажется по моему лучше будет.
 

MaEStro71

Участник
Сообщения
163
Реакции
21
AlmazON, свой код исправил. Мне кажется по моему лучше будет.
30.06.2016(23.07.15).jpg
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
if(attacker && attacker != GetClientOfUserId(GetEventInt(event, "userid"))
Забыл одну скобку.
if(attacker && attacker != GetClientOfUserId(GetEventInt(event, "userid")))

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

public OnPluginStart()
{
    HookEvent("player_hurt", DamageEvent)
}

public DamageEvent(Handle:event, const String:name[], bool:dontBroadcast)
{
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
    if(attacker && attacker != GetClientOfUserId(GetEventInt(event, "userid")))
    {
        new iNewMoney = GetEntProp(attacker, Prop_Send, "m_iAccount") + GetEventInt(event, "dmg_health");
        SetEntProp(attacker, Prop_Send, "m_iAccount", iNewMoney > 16000 ? 16000:iNewMoney);
    }
}
 

Вложения

  • 111.smx
    3 КБ · Просмотры: 5
Сверху Снизу