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

acik_traiks

Что нибудь напишем?)
Сообщения
770
Реакции
627
Вообщем нужна помошь
не могу понять почему не дает гранату
или не правильно оформил при компиляции ошибок нет
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 String: weaponlist[][] = { "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_PlayerHurt, EventHookMode_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 == 0 || g_damager == 0) return;
	new needed[3], String:ent_weapon[32];
	player_damage[attacker] += damage;
	if(player_damage[attacker] >= MaxDamage) player_damage[attacker] = 0;
	PrintHintText(attacker, "%t", "my_damage", player_damage[attacker]);
	for(new j = 0; j < 3; j++)
	{
		needed[j] = neededlist[j];
		if (needed[j] >= 500)
		{
			for(new i = 2; i < 300; i++)
			{	
				if(player_damage[attacker] >= needed[j])
				{
					needed[j] = neededlist[j]*i;
					Format(ent_weapon, sizeof(ent_weapon), "weapon_%s", weaponlist[j]);
					GivePlayerItem(attacker, ent_weapon);				
				}
			}
		}
	}
}
 
Последнее редактирование:

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Не проще будет?

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_HE) GivePlayerItem(attacker, "weapon_hegrenade");
    if(damage >= GetConVarInt(cv_needed_flash) GivePlayerItem(attacker, "weapon_flashbang");
    if(damage >= GetConVarInt(cv_needed_smoke) GivePlayerItem(attacker, "weapon_smokegrenade");
}
Надо только сделать проверку, есть ли граната у игрока.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
Не проще будет?

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_HE) GivePlayerItem(attacker, "weapon_hegrenade");
	if(damage >= GetConVarInt(cv_needed_flash) GivePlayerItem(attacker, "weapon_flashbang");
	if(damage >= GetConVarInt(cv_needed_smoke) GivePlayerItem(attacker, "weapon_smokegrenade");
}
Надо только сделать проверку, есть ли граната у игрока.

ОМГ, в 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 String: weaponlist[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_PlayerHurt, EventHookMode_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=3; j > 0; j--)
		{
			if (g_iClientDamage[iAttacker] >= g_iDamage[j])
			{
				FormatEx(sWeapon, sizeof(sWeapon), "weapon_%s", sWeapons[j]);
				GivePlayerItem(iAttacker, sWeapon);
				if(j == 1) g_iClientDamage[iAttacker] = 0;
			}
		}
	}
}
 
Последнее редактирование:

acik_traiks

Что нибудь напишем?)
Сообщения
770
Реакции
627
R1KO, спс но почему j = 3 и j >0 то есть j имеет 3,2,1
но массив g_iDamage[3] иммет только от 0 до 2 ?
Оффтоп
 

acik_traiks

Что нибудь напишем?)
Сообщения
770
Реакции
627
R1KO, и вот еще получается он считает например 600 800 1000 но
если поменять порядок 600 1000 800 то он до 800 дойдет и сбросит Правельно?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #8
acik, да, и это нужно продумать. Именно над этим мне было лень думать.
PHP:
for(new j = 0; j < 3; j++) // после этого ничего не понятно
    {
        needed[j] = neededlist[j];
        if (needed[j] >= 500)
        {
            for(new i = 2; i < 300; i++) // как и зачем?
            {    
                if(player_damage[attacker] >= needed[j])
                {
                    needed[j] = neededlist[j]*i;
                    Format(ent_weapon, sizeof(ent_weapon), "weapon_%s", weaponlist[j]); // эт ясно
                    GivePlayerItem(attacker, ent_weapon);                
                }
            }
        }
    }
 

acik_traiks

Что нибудь напишем?)
Сообщения
770
Реакции
627
R1KO, этот вариант сделал
PHP:
			for(new i = 1; i < 300; i++)
			{
			for(new j = 0; j < 3; j++)
			{
				if(neededlist[j] >= 500)
				{
				if(myDamage[attacker] >= neededlist[j]*i)
				{
					Format(ent_weapon, sizeof(ent_weapon), "weapon_%s", weaponlist[j]);
					GivePlayerItem(attacker, ent_weapon);
					Format(text_weapon, sizeof(text_weapon), "%s", weapontext[j]);
					if (adverts) CPrintToChat(attacker, "%t", "Giving Grenade", text_weapon);
					//if( j == 2) returnDamage[attacker] = 0;
				}
				}
			}
			}

Konstantin, :-D ну да не много сократил:P
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #11
for(new i = 1; i < 300; i++)
зачем этО?!
 

acik_traiks

Что нибудь напишем?)
Сообщения
770
Реакции
627
R1KO, это множитель i
будет умножать число урона и свирять)
 

acik_traiks

Что нибудь напишем?)
Сообщения
770
Реакции
627
R1KO, вот так получилось больше не хватает тямы
PHP:
{
	new String:ent_weapon[64], String:text_weapon[64];
	myDamage[attacker] += damage;
	if(myDamage[attacker] >= MaxDamage) myDamage[attacker] = 0;
	if(adverts) PrintHintText(attacker, "%t", "my_damage", myDamage[attacker]);
	for(new j = 0; j < 3; j++)
	{
		if(neededlist[j] >= 500)
		{
			j > 0 ? j > 1 ? (smokeDamage[attacker] += damage) : (flashDamage[attacker] += damage) : (heDamage[attacker] += damage) ;
			if((j > 0 ? j > 1 ? smokeDamage[attacker] : flashDamage[attacker] : heDamage[attacker]) >= neededlist[j])
			{
				j > 0 ? j > 1 ? (smokeDamage[attacker] = 0) : (flashDamage[attacker] = 0) : (heDamage[attacker] = 0);
				Format(ent_weapon, sizeof(ent_weapon), "weapon_%s", weaponlist[j]);
				GivePlayerItem(attacker, ent_weapon);
				Format(text_weapon, sizeof(text_weapon), "%s", weapontext[j]);
				if (adverts) CPrintToChat(attacker, "%t", "Giving Grenade", text_weapon);
			}
		}
	}
}
 
Сверху Снизу