Cshop: HeGranade Multiplier

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Заключена
Потребителски аватар

Автор на темата
Marinovv Facebook
Потребител
Потребител
Мнения: 349
Регистриран: 19 сеп 2017, 10:01
Местоположение: САЩ
Се отблагодари: 87 пъти
Получена благодарност: 7 пъти
Години: 21
Контакти:

Cshop: HeGranade Multiplier

Мнение от Marinovv Facebook » 04 сеп 2018, 01:40

Код: Избери всички

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <engine>
#include <customshop>

additem ITEM_HEDAMAGE;

new bool:g_bHasItem[33];

#define PLUGINNAME	"He damage Multiplier"
#define VERSION		"1.2"
#define AUTHOR		"Nightscream"

#define MAX_CZ_LENGHT	32

//new g_iMsgScoreInfo, g_iMsgDeathMsg

public plugin_init() {
	register_plugin( PLUGINNAME, VERSION, AUTHOR )
        register_plugin("CSHOP: He Grenade Damage", VERSION, "OciXCrom");
	register_cvar( "amx_hemulti", "5.00" );
	register_event( "Damage", "hedmg", "be" );
	
	//g_iMsgScoreInfo = get_user_msgid( "ScoreInfo" )
	//g_iMsgDeathMsg = get_user_msgid( "DeathMsg" )
}

public plugin_precache()
	ITEM_HEDAMAGE = cshop_register_item("He Grenade Damage", "Zoom Weapons Plus", 1000);

public cshop_item_selected(id, iItem)
{
	if(iItem == ITEM_HEDAMAGE)
		g_bHasItem[id] = true;
}

ublic cshop_item_removed(id, iItem)
{
	if(iItem == ITEM_HEDAMAGE)
		g_bHasItem[id] = false;
}


public hedmg(id) 
{
	new victim_id = id; 
	if (g_bHasItem[id])
	if( !is_user_connected( victim_id ) ) return PLUGIN_CONTINUE
	new dmg_take = read_data( 2 );
	new dmgtype = read_data( 3 );
	new Float:multiplier = get_cvar_float( "amx_hemulti" );
	new Float:damage = dmg_take * multiplier;
	new health = get_user_health( victim_id );
	
	new iWeapID, attacker_id = get_user_attacker( victim_id, iWeapID );
	
	if( !is_user_connected( attacker_id ) || !is_user_alive( victim_id ) ) {
		return PLUGIN_HANDLED
	}
	
	if( iWeapID == CSW_HEGRENADE ) {
					
		if( floatround(damage) >= health ) {
			if( victim_id == attacker_id ) {
				return PLUGIN_CONTINUE
			}
			return PLUGIN_CONTINUE
		}else {
			if( victim_id == attacker_id ) return PLUGIN_CONTINUE
			
			fakedamage( victim_id, "weapon_grenade", damage, dmgtype );
		}
	}
	
	return PLUGIN_CONTINUE
}
	
Добре де все не успявам. Искам да разясните малко нещата с тази булева new bool:g_bHasItem

Засега фиксирах. Изпуснал съм една буква в кода. Проблемът е, че може би твърде го редактирах. За момента кодът се компилира успешно, но не работи със и без закупуването на итемът.
89.106.109.225:27018
► Покажи скъсения текст

Потребителски аватар

OciXCrom™ MKD
Администратор
Администратор
Мнения: 4432
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 31 пъти
Получена благодарност: 342 пъти
Години: 21
Контакти:

Cshop: HeGranade Multiplier

Мнение от OciXCrom™ MKD » 04 сеп 2018, 15:31

Код: Избери всички

if (g_bHasItem[id])
if( !is_user_connected( victim_id ) ) return PLUGIN_CONTINUE
Тук нямаш никакви скоби и не знам как точно кодът чете това. Обаче като цяло начинът за промяна на щетата е каетгорично зле. Добави #include <hamsandwich> в кода и промени register_event реда с този:

Код: Избери всички

RegisterHam(Ham_TakeDamage, "player", "hedmg", 0)
И цялата hedmg функция замени я с тези два реда:

Код: Избери всички

public hedmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits)
{
    if(g_bHasItem[iAttacker] && iDamageBits & DMG_GRENADE) 
        SetHamParamFloat(4, fDamage * get_cvar_num("amx_hemulti"))
}
amxmisc, fun и engine не са нужни вече.

Когато регистрираш квар, ползвай get_pcvar_num вместо get_cvar_num - доста по-бързо е.

Потребителски аватар

Автор на темата
Marinovv Facebook
Потребител
Потребител
Мнения: 349
Регистриран: 19 сеп 2017, 10:01
Местоположение: САЩ
Се отблагодари: 87 пъти
Получена благодарност: 7 пъти
Години: 21
Контакти:

Cshop: HeGranade Multiplier

Мнение от Marinovv Facebook » 04 сеп 2018, 21:13

Функцията DMG_GRENADE не я разпознава и я отчита като невалидна при компилиране?

Готово. Компилирах го като махнах функцията DMG_GRENADE и си работи плъгинът сега перфектно. Много благодаря отново. Жал ми е, че е толкова лесно за пренаписване, а аз самия не знам как. :headbang: :lock:
89.106.109.225:27018
► Покажи скъсения текст

Потребителски аватар

TheRedShoko ReShoko
Модератор
Модератор
Мнения: 961
Регистриран: 06 окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 3 пъти
Получена благодарност: 51 пъти

Cshop: HeGranade Multiplier

Мнение от TheRedShoko ReShoko » 04 сеп 2018, 23:30

DMG_GRENADE означава, че част от щетата е причинена от граната. Премахвайки го, ти променяш щетата на всякакъв вид атаки (изстрел, наръгване etc). Проблемът идва от това, че компилираш под 1.8.2, където DMG_GRENADE все още не е дефинирано. Добави #define DMG_GRENADE 1<<24 и няма да има проблеми.

Потребителски аватар

Автор на темата
Marinovv Facebook
Потребител
Потребител
Мнения: 349
Регистриран: 19 сеп 2017, 10:01
Местоположение: САЩ
Се отблагодари: 87 пъти
Получена благодарност: 7 пъти
Години: 21
Контакти:

Cshop: HeGranade Multiplier

Мнение от Marinovv Facebook » 04 сеп 2018, 23:57

Готово. Благодарности и на двамата за помощта. Може да заключвате.
89.106.109.225:27018
► Покажи скъсения текст

Заключена

Върни се в “Помощ в скриптирането”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост