OciXCrom [XP | Level | Ranks] Damage Per Level

Въпроси и проблеми свързани с AMXModX.
Аватар
carrx
Извън линия
Foreigner
Foreigner
Мнения: 12
Регистриран на: 17 Апр 2020, 13:49
Се отблагодари: 1 път

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от carrx » 17 Апр 2020, 13:52

Hello :) I Have problem with: https://www.amxx-bg.info/forum/viewtopic.php?t=4834#p27442

Its not working for me. Have Zombie Plague 5.0 and i put crxranks_speed_per_level.amxx and crxranks_damage_per_level.amxx at the end of file plugins-zp50_ammopacks.ini.
Speed Per Level:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#include <fun>

native zp_get_user_zombie(id)

#define PLUGIN_VERSION "1.0-zp"

new Trie:g_tSpeed
new Float:g_fSpeed[33]

public plugin_init()
{
	register_plugin("CRXRanks: Speed Per Level", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXRanksSPL", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	register_event("CurWeapon", "OnChangeWeapon", "be", "1=1")
	g_tSpeed = TrieCreate()
	ReadFile()
}

public plugin_end()
	TrieDestroy(g_tSpeed)
	
ReadFile()
{
	new szFilename[256]
	get_configsdir(szFilename, charsmax(szFilename))
	add(szFilename, charsmax(szFilename), "/RankSystemSpeed.ini")
	
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[64], szValue[32], szMap[32], szKey[32], bool:bRead = true, iSize
		get_mapname(szMap, charsmax(szMap))
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '-':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == '-')
					{
						szData[0] = ' '
						szData[iSize - 1] = ' '
						trim(szData)
						
						if(contain(szData, "*") != -1)
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
							copy(szValue, strlen(szKey), szMap)
							bRead = equal(szValue, szKey) ? true : false
						}
						else
						{
							static const szAll[] = "#all"
							bRead = equal(szData, szAll) || equali(szData, szMap)
						}
					}
					else continue
				}
				default:
				{
					if(!bRead)
						continue
						
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
							
					if(!szValue[0])
						continue
						
					TrieSetCell(g_tSpeed, szKey, str_to_float(szValue))
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public OnChangeWeapon(id)
{
	if(g_fSpeed[id] != 0.0)
		set_user_maxspeed(id, g_fSpeed[id])
}

public client_putinserver(id)
	g_fSpeed[id] = 0.0

public crxranks_user_level_updated(id, iLevel)
{
	new szLevel[10]
	num_to_str(iLevel, szLevel, charsmax(szLevel))
		
	if(TrieKeyExists(g_tSpeed, szLevel))
		TrieGetCell(g_tSpeed, szLevel, g_fSpeed[id])
}

Damage Per Level:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#include <hamsandwich>

native zp_get_user_zombie(id)

#define PLUGIN_VERSION "1.1-zp"

new Trie:g_tDamage
new g_szDamage[16][33]

public plugin_init()
{
	register_plugin("CRXRanks: Damage Per Level", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXRanksDPL", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	RegisterHam(Ham_TakeDamage, "player", "PreTakeDamage", 0)
	g_tDamage = TrieCreate()
	ReadFile()
}

public plugin_end()
	TrieDestroy(g_tDamage)
	
ReadFile()
{
	new szFilename[256]
	get_configsdir(szFilename, charsmax(szFilename))
	add(szFilename, charsmax(szFilename), "/RankSystemDamage.ini")
	
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[64], szValue[32], szMap[32], szKey[32], bool:bRead = true, iSize
		get_mapname(szMap, charsmax(szMap))
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '-':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == '-')
					{
						szData[0] = ' '
						szData[iSize - 1] = ' '
						trim(szData)
						
						if(contain(szData, "*") != -1)
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
							copy(szValue, strlen(szKey), szMap)
							bRead = equal(szValue, szKey) ? true : false
						}
						else
						{
							static const szAll[] = "#all"
							bRead = equal(szData, szAll) || equali(szData, szMap)
						}
					}
					else continue
				}
				default:
				{
					if(!bRead)
						continue
						
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
							
					if(!szValue[0])
						continue
						
					TrieSetString(g_tDamage, szKey, szValue)
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public PreTakeDamage(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits)
{
	if(!is_user_connected(iAttacker) || zp_get_user_zombie(iAttacker) || !g_szDamage[iAttacker][0])
		return
	
	SetHamParamFloat(4, math_add_f(fDamage, g_szDamage[iAttacker]))
}

public client_putinserver(id)
	g_szDamage[id][0] = EOS

public crxranks_user_level_updated(id, iLevel)
{
	new szLevel[10]
	num_to_str(iLevel, szLevel, charsmax(szLevel))
		
	if(TrieKeyExists(g_tDamage, szLevel))
		TrieGetString(g_tDamage, szLevel, g_szDamage[id], charsmax(g_szDamage[]))
}

Float:math_add_f(Float:fNum, const szMath[])
{
	static szNewMath[16], Float:fMath, bool:bPercent, cOperator
   
	copy(szNewMath, charsmax(szNewMath), szMath)
	bPercent = szNewMath[strlen(szNewMath) - 1] == '%'
	cOperator = szNewMath[0]
   
	if(!isdigit(szNewMath[0]))
		szNewMath[0] = ' '
   
	if(bPercent)
		replace(szNewMath, charsmax(szNewMath), "%", "")
	   
	trim(szNewMath)
	fMath = str_to_float(szNewMath)
   
	if(bPercent)
		fMath *= fNum / 100
	   
	switch(cOperator)
	{
		case '+': fNum += fMath
		case '-': fNum -= fMath
		case '/': fNum /= fMath
		case '*': fNum *= fMath
		default: fNum = fMath
	}
   
	return fNum
}

This is my ini config file:

RankSystemDamage.ini

Код за потвърждение: Избери целия код

#5 - this will set the damage of each attack to be exactly 5
#+5 - this will add +5 damage to each attack
#+5% - this will increase the damage of each attack with 5%
# <level number> = <damage amount>
1 = +5
2 = +5
3 = +5
4 = +5
5 = +5
6 = +5
7 = +5
8 = +5
9 = +5
10 = +5
11 = +5
12 = +5
13 = +5
14 = +5
15 = +5
16 = +5
17 = +5
18 = +5
19 = +5
20 = +20%
21 = +21%
22 = +22%
23 = +23%
24 = +24%
25 = +25%
26 = +26%
27 = +27%
28 = +28%
29 = +29%
30 = +30%

RankSystemSpeed.ini

Код за потвърждение: Избери целия код

# level = speed amount
1 = 251
2 = 252
3 = 253
4 = 254
5 = 255
6 = 256
7 = 257
8 = 258
9 = 259
10 = 260
11 = 261
12 = 262
13 = 263
14 = 264
15 = 265
16 = 266
17 = 267
18 = 268
19 = 269
20 = 270
21 = 271
22 = 272
23 = 273
24 = 274
25 = 275
26 = 276
27 = 277
28 = 278
29 = 279
30 = 300

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от OciXCrom » 17 Апр 2020, 13:59

Which one isn't working? You provided 2 plugins - does it apply for both of them?
Did you use the amx_plugins command to check if they're running?

Аватар
carrx
Извън линия
Foreigner
Foreigner
Мнения: 12
Регистриран на: 17 Апр 2020, 13:49
Се отблагодари: 1 път

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от carrx » 17 Апр 2020, 14:03

Yes. Two of them are not working. Yes they are runnig. I have Health Per Level and its works greate.

crx_ranksystem.amxx debug crxranks_health_per_level.amxx debug crxranks_damage_per_level.amxx debug crxranks_speed_per_level.amxx debug crxranks_time_rewards.amxx debug crxranks_happyhour.amxx debug

----- Aktualnie zainstalowane pluginy ----- nazwa wersja autor plik status OciXCrom's Rank S 3.9 OciXCrom crx_ranksystem. debug CRXRanks: Health 1.1 OciXCrom crxranks_health debug CRXRanks: Damage 1.1-zp OciXCrom crxranks_damage debug CRXRanks: Speed P 1.0-zp OciXCrom crxranks_speed_ debug CRXRanks: Time Re 2.0 OciXCrom crxranks_time_r debug CRXRanks: Happy H 1.0 OciXCrom crxranks_happyh debug

AMX Mod X version 1.8.3-dev+5169 Copyright (c) 2004-2015 AMX Mod X Development Team

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от OciXCrom » 17 Апр 2020, 14:17

Try them like this:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#include <fun>

native zp_get_user_zombie(id)

#define PLUGIN_VERSION "1.1-zp"

new Trie:g_tSpeed
new Float:g_fSpeed[33]

public plugin_init()
{
	register_plugin("CRXRanks: Speed Per Level", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXRanksSPL", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	register_event("CurWeapon", "OnChangeWeapon", "be", "1=1")
	g_tSpeed = TrieCreate()
	ReadFile()
}

public plugin_end()
	TrieDestroy(g_tSpeed)
	
ReadFile()
{
	new szFilename[256]
	get_configsdir(szFilename, charsmax(szFilename))
	add(szFilename, charsmax(szFilename), "/RankSystemSpeed.ini")
	
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[64], szValue[32], szMap[32], szKey[32], bool:bRead = true, iSize
		get_mapname(szMap, charsmax(szMap))
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '-':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == '-')
					{
						szData[0] = ' '
						szData[iSize - 1] = ' '
						trim(szData)
						
						if(contain(szData, "*") != -1)
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
							copy(szValue, strlen(szKey), szMap)
							bRead = equal(szValue, szKey) ? true : false
						}
						else
						{
							static const szAll[] = "#all"
							bRead = equal(szData, szAll) || equali(szData, szMap)
						}
					}
					else continue
				}
				default:
				{
					if(!bRead)
						continue
						
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
							
					if(!szValue[0])
						continue
						
					TrieSetCell(g_tSpeed, szKey, str_to_float(szValue))
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public OnChangeWeapon(id)
{
	if(g_fSpeed[id] != 0.0)
		set_user_maxspeed(id, g_fSpeed[id])
}

public client_putinserver(id)
{
	g_fSpeed[id] = 0.0
	crxranks_user_level_updated(id, crxranks_get_user_level(id), false)
}

public crxranks_user_level_updated(id, iLevel)
{
	new szLevel[10]
	num_to_str(iLevel, szLevel, charsmax(szLevel))
		
	if(TrieKeyExists(g_tSpeed, szLevel))
		TrieGetCell(g_tSpeed, szLevel, g_fSpeed[id])
}

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#include <hamsandwich>

native zp_get_user_zombie(id)

#define PLUGIN_VERSION "1.2-zp"

new Trie:g_tDamage
new g_szDamage[16][33]

public plugin_init()
{
	register_plugin("CRXRanks: Damage Per Level", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXRanksDPL", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	RegisterHam(Ham_TakeDamage, "player", "PreTakeDamage", 0)
	g_tDamage = TrieCreate()
	ReadFile()
}

public plugin_end()
	TrieDestroy(g_tDamage)
	
ReadFile()
{
	new szFilename[256]
	get_configsdir(szFilename, charsmax(szFilename))
	add(szFilename, charsmax(szFilename), "/RankSystemDamage.ini")
	
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[64], szValue[32], szMap[32], szKey[32], bool:bRead = true, iSize
		get_mapname(szMap, charsmax(szMap))
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '-':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == '-')
					{
						szData[0] = ' '
						szData[iSize - 1] = ' '
						trim(szData)
						
						if(contain(szData, "*") != -1)
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
							copy(szValue, strlen(szKey), szMap)
							bRead = equal(szValue, szKey) ? true : false
						}
						else
						{
							static const szAll[] = "#all"
							bRead = equal(szData, szAll) || equali(szData, szMap)
						}
					}
					else continue
				}
				default:
				{
					if(!bRead)
						continue
						
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
							
					if(!szValue[0])
						continue
						
					TrieSetString(g_tDamage, szKey, szValue)
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public PreTakeDamage(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits)
{
	if(!is_user_connected(iAttacker) || zp_get_user_zombie(iAttacker) || !g_szDamage[iAttacker][0])
		return
	
	SetHamParamFloat(4, math_add_f(fDamage, g_szDamage[iAttacker]))
}

public client_putinserver(id)
{
	g_szDamage[id][0] = EOS
	crxranks_user_level_updated(id, crxranks_get_user_level(id), false)
}

public crxranks_user_level_updated(id, iLevel)
{
	new szLevel[10]
	num_to_str(iLevel, szLevel, charsmax(szLevel))
		
	if(TrieKeyExists(g_tDamage, szLevel))
		TrieGetString(g_tDamage, szLevel, g_szDamage[id], charsmax(g_szDamage[]))
}

Float:math_add_f(Float:fNum, const szMath[])
{
	static szNewMath[16], Float:fMath, bool:bPercent, cOperator
   
	copy(szNewMath, charsmax(szNewMath), szMath)
	bPercent = szNewMath[strlen(szNewMath) - 1] == '%'
	cOperator = szNewMath[0]
   
	if(!isdigit(szNewMath[0]))
		szNewMath[0] = ' '
   
	if(bPercent)
		replace(szNewMath, charsmax(szNewMath), "%", "")
	   
	trim(szNewMath)
	fMath = str_to_float(szNewMath)
   
	if(bPercent)
		fMath *= fNum / 100
	   
	switch(cOperator)
	{
		case '+': fNum += fMath
		case '-': fNum -= fMath
		case '/': fNum /= fMath
		case '*': fNum *= fMath
		default: fNum = fMath
	}
   
	return fNum
}

Аватар
carrx
Извън линия
Foreigner
Foreigner
Мнения: 12
Регистриран на: 17 Апр 2020, 13:49
Се отблагодари: 1 път

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от carrx » 17 Апр 2020, 23:45

Thx its working now :) You have best plugins, so clean and easy to configure and so professional. Thx for your hard work and I wish you good health in this bad times.

BTW is it possible for the bonus from Health per level:https://www.amxx-bg.info/forum/viewtopic.php?f=21&t=4594 to only grant zombie classes?

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от OciXCrom » 18 Апр 2020, 14:07

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#include <fun>
#include <hamsandwich>

native zp_get_user_zombie(id)

#define PLUGIN_VERSION "1.1-zp"

new g_pMode, g_pConstant, g_iMode, g_iConstant
new Trie:g_tHealth

public plugin_init()
{
	register_plugin("CRXRanks: Health Per Level", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXRanksHPL", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
	g_pMode = register_cvar("crxranks_hpl_mode", "0")
	g_pConstant = register_cvar("crxranks_hpl_constant", "0")
}

public plugin_cfg()
{
	g_iMode = get_pcvar_num(g_pMode)
	g_iConstant = get_pcvar_num(g_pConstant)

	if(!using_constant_mode())
	{
		g_tHealth = TrieCreate()
		ReadFile()
	}
}

public plugin_end()
{
	if(!using_constant_mode())
		TrieDestroy(g_tHealth)
}
	
ReadFile()
{
	new szConfigsName[256], szFilename[256]
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFilename, charsmax(szFilename), "%s/RankSystemHealth.ini", szConfigsName)
	
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[64], szValue[32], szMap[32], szKey[32], bool:bRead = true, iSize
		get_mapname(szMap, charsmax(szMap))
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '-':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == '-')
					{
						szData[0] = ' '
						szData[iSize - 1] = ' '
						trim(szData)
						
						if(contain(szData, "*") != -1)
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
							copy(szValue, strlen(szKey), szMap)
							bRead = equal(szValue, szKey) ? true : false
						}
						else
						{
							static const szAll[] = "#all"
							bRead = equal(szData, szAll) || equali(szData, szMap)
						}
					}
					else continue
				}
				default:
				{
					if(!bRead)
						continue
						
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
							
					if(!szValue[0])
						continue
						
					TrieSetCell(g_tHealth, szKey, str_to_num(szValue))
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public OnPlayerSpawn(id)
{
	if(!is_user_alive(id) || !zp_get_user_zombie(id))
		return

	if(using_constant_mode())
	{
		new iLevel = crxranks_get_user_level(id)
		add_health_amount(id, iLevel == 0 ? g_iConstant : iLevel * g_iConstant)
		return
	}
		
	new szLevel[10]
	num_to_str(crxranks_get_user_level(id), szLevel, charsmax(szLevel))
		
	if(TrieKeyExists(g_tHealth, szLevel))
	{
		new iHealth
		TrieGetCell(g_tHealth, szLevel, iHealth)
		add_health_amount(id, iHealth)
	}
}

add_health_amount(const id, const iAmount)
	set_user_health(id, !g_iMode ? iAmount : get_user_health(id) + iAmount)

bool:using_constant_mode()
	return g_iConstant != 0

Аватар
carrx
Извън линия
Foreigner
Foreigner
Мнения: 12
Регистриран на: 17 Апр 2020, 13:49
Се отблагодари: 1 път

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от carrx » 19 Апр 2020, 01:14

Its working but only after zombie respawn in DeathMatch. Its not granted when human become zombie. Only after death and respawn. Can you fix that? I need to grant after infected and after respawn.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от OciXCrom » 19 Апр 2020, 15:02

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#include <fun>
#include <hamsandwich>
#include <zp50_core>

#define PLUGIN_VERSION "1.2-zp"

new g_pMode, g_pConstant, g_iMode, g_iConstant
new Trie:g_tHealth

public plugin_init()
{
	register_plugin("CRXRanks: Health Per Level", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXRanksHPL", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
	g_pMode = register_cvar("crxranks_hpl_mode", "0")
	g_pConstant = register_cvar("crxranks_hpl_constant", "0")
}

public plugin_cfg()
{
	g_iMode = get_pcvar_num(g_pMode)
	g_iConstant = get_pcvar_num(g_pConstant)

	if(!using_constant_mode())
	{
		g_tHealth = TrieCreate()
		ReadFile()
	}
}

public plugin_end()
{
	if(!using_constant_mode())
		TrieDestroy(g_tHealth)
}
	
ReadFile()
{
	new szConfigsName[256], szFilename[256]
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFilename, charsmax(szFilename), "%s/RankSystemHealth.ini", szConfigsName)
	
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[64], szValue[32], szMap[32], szKey[32], bool:bRead = true, iSize
		get_mapname(szMap, charsmax(szMap))
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '-':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == '-')
					{
						szData[0] = ' '
						szData[iSize - 1] = ' '
						trim(szData)
						
						if(contain(szData, "*") != -1)
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
							copy(szValue, strlen(szKey), szMap)
							bRead = equal(szValue, szKey) ? true : false
						}
						else
						{
							static const szAll[] = "#all"
							bRead = equal(szData, szAll) || equali(szData, szMap)
						}
					}
					else continue
				}
				default:
				{
					if(!bRead)
						continue
						
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
							
					if(!szValue[0])
						continue
						
					TrieSetCell(g_tHealth, szKey, str_to_num(szValue))
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public OnPlayerSpawn(id)
{
	if(!is_user_alive(id) || !zp_core_is_zombie(id))
		return

	if(using_constant_mode())
	{
		new iLevel = crxranks_get_user_level(id)
		add_health_amount(id, iLevel == 0 ? g_iConstant : iLevel * g_iConstant)
		return
	}
		
	new szLevel[10]
	num_to_str(crxranks_get_user_level(id), szLevel, charsmax(szLevel))
		
	if(TrieKeyExists(g_tHealth, szLevel))
	{
		new iHealth
		TrieGetCell(g_tHealth, szLevel, iHealth)
		add_health_amount(id, iHealth)
	}
}

public zp_fw_core_infect_post(id, iAttacker)
{
	OnPlayerSpawn(id)
}

add_health_amount(const id, const iAmount)
	set_user_health(id, !g_iMode ? iAmount : get_user_health(id) + iAmount)

bool:using_constant_mode()
	return g_iConstant != 0

Аватар
carrx
Извън линия
Foreigner
Foreigner
Мнения: 12
Регистриран на: 17 Апр 2020, 13:49
Се отблагодари: 1 път

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от carrx » 21 Апр 2020, 11:14

OciXCrom написа: 19 Апр 2020, 15:02

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#include <fun>
#include <hamsandwich>
#include <zp50_core>

#define PLUGIN_VERSION "1.2-zp"

new g_pMode, g_pConstant, g_iMode, g_iConstant
new Trie:g_tHealth

public plugin_init()
{
	register_plugin("CRXRanks: Health Per Level", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXRanksHPL", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
	g_pMode = register_cvar("crxranks_hpl_mode", "0")
	g_pConstant = register_cvar("crxranks_hpl_constant", "0")
}

public plugin_cfg()
{
	g_iMode = get_pcvar_num(g_pMode)
	g_iConstant = get_pcvar_num(g_pConstant)

	if(!using_constant_mode())
	{
		g_tHealth = TrieCreate()
		ReadFile()
	}
}

public plugin_end()
{
	if(!using_constant_mode())
		TrieDestroy(g_tHealth)
}
	
ReadFile()
{
	new szConfigsName[256], szFilename[256]
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFilename, charsmax(szFilename), "%s/RankSystemHealth.ini", szConfigsName)
	
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[64], szValue[32], szMap[32], szKey[32], bool:bRead = true, iSize
		get_mapname(szMap, charsmax(szMap))
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '-':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == '-')
					{
						szData[0] = ' '
						szData[iSize - 1] = ' '
						trim(szData)
						
						if(contain(szData, "*") != -1)
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
							copy(szValue, strlen(szKey), szMap)
							bRead = equal(szValue, szKey) ? true : false
						}
						else
						{
							static const szAll[] = "#all"
							bRead = equal(szData, szAll) || equali(szData, szMap)
						}
					}
					else continue
				}
				default:
				{
					if(!bRead)
						continue
						
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
							
					if(!szValue[0])
						continue
						
					TrieSetCell(g_tHealth, szKey, str_to_num(szValue))
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public OnPlayerSpawn(id)
{
	if(!is_user_alive(id) || !zp_core_is_zombie(id))
		return

	if(using_constant_mode())
	{
		new iLevel = crxranks_get_user_level(id)
		add_health_amount(id, iLevel == 0 ? g_iConstant : iLevel * g_iConstant)
		return
	}
		
	new szLevel[10]
	num_to_str(crxranks_get_user_level(id), szLevel, charsmax(szLevel))
		
	if(TrieKeyExists(g_tHealth, szLevel))
	{
		new iHealth
		TrieGetCell(g_tHealth, szLevel, iHealth)
		add_health_amount(id, iHealth)
	}
}

public zp_fw_core_infect_post(id, iAttacker)
{
	OnPlayerSpawn(id)
}

add_health_amount(const id, const iAmount)
	set_user_health(id, !g_iMode ? iAmount : get_user_health(id) + iAmount)

bool:using_constant_mode()
	return g_iConstant != 0
That make zombies hard to kill, becouse its make all zombies 18500 HP! :D Base starting HP is 5000 for zombie but if i ON plugin its make 18500 on level 10. And on level 16 - 19400 HP.
1 = 150 2 = 300 3 = 450 4 = 600 5 = 750 6 = 900 7 = 1000 8 = 1200 9 = 1350 10 = 1500 11 = 1650 12 = 1800 13 = 1950 14 = 2100 15 = 2250 16 = 2400 17 = 2550 18 = 2700 19 = 2850 20 = 3000 21 = 3150 22 = 3300 23 = 3450 24 = 3600 25 = 3750 26 = 3900 27 = 4050 28 = 4200 29 = 4350 30 = 4500

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom [XP | Level | Ranks] Damage Per Level

Мнение от OciXCrom » 21 Апр 2020, 15:49

Is that bad? :D
You can lower the amount of HP they receive.

PS: instead of writing them manually and increasing with +150 HP each level, you can just set the crxranks_hpl_constant cvar to 150 without adding anything in the .ini file.

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Поддръжка / Помощ”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта