Problem with reset models

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
mar1anx
Извън линия
Foreigner
Foreigner
Мнения: 41
Регистриран на: 17 Сеп 2018, 00:56
Се отблагодари: 4 пъти
Получена благодарност: 2 пъти

Problem with reset models

Мнение от mar1anx » 27 Сеп 2018, 01:22

Plugin source:

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

#include <amxmodx>
#include <reapi>

#define VERSION "2.0 ReAPI"

enum _:ModelData
{
	ID,
	DISPLAY_NAME[64],
	MODEL_FILE[64],
	MODEL_TEAM,
	MODEL_FLAG[8]
}

new const g_szConfigFile[] = "addons/amxmodx/configs/models_menu.ini";

new Array:g_LoadedModels;
new g_UserModel[33][ModelData];
new g_iMenu[2], g_iTotalModels;

public plugin_init()
{
	register_plugin("Models Menu", VERSION, "TheRedShoko @ AMXX-BG.info");
	register_cvar("models_menu", VERSION, FCVAR_SERVER|FCVAR_UNLOGGED|FCVAR_SPONLY);

	register_clcmd("say /models", "ShowModelsMenu");
	register_clcmd("say_team /models", "ShowModelsMenu");

	RegisterHookChain(RG_CBasePlayer_Spawn, "FwPlayerSpawnPost", 1);
}

public plugin_precache()
{
	g_LoadedModels = ArrayCreate(ModelData);

	LoadConfigFile();
}

public FwPlayerSpawnPost(id)
{
	if (!is_user_alive(id) || g_UserModel[id][ID] == 0)
	{
		return;
	}

	rg_set_user_model(id, g_UserModel[id][MODEL_FILE]);
}

public ShowModelsMenu(id)
{
	if (!IsUserInGame(id))
	{
		return PLUGIN_HANDLED;
	}

	new iTeam = get_member(id, m_iTeam) - 1;

	menu_display(id, g_iMenu[iTeam]);
	return PLUGIN_HANDLED;
}

public ModelsMenuCallback(id, iMenu, Item)
{
	new szTemp[ModelData];
	new szInfo[8], szName[80], iAccess, iCallback;
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), _, _, iCallback);

	ArrayGetArray(g_LoadedModels, str_to_num(szInfo), szTemp);
	copy(szName, charsmax(szName), szTemp[DISPLAY_NAME]);

	if (!(get_user_flags(id) & read_flags(szTemp[MODEL_FLAG])) && strlen(szTemp[MODEL_FLAG]) != 0)
	{
		add(szName, charsmax(szName), " \r[Admin Only]");
		menu_item_setname(iMenu, Item, szName);
		return ITEM_DISABLED;
	}

	if (szTemp[ID] == g_UserModel[id][ID])
	{
		add(szName, charsmax(szName), " \y[Current Model]");
		menu_item_setname(iMenu, Item, szName);
		return ITEM_DISABLED;
	}

	menu_item_setname(iMenu, Item, szName);

	return ITEM_ENABLED;
}

public ModelsMenuHandler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		return;
	}

	new szInfo[8], szName[80], iAccess, iCallback;
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), szName, charsmax(szName), iCallback);

	ArrayGetArray(g_LoadedModels, str_to_num(szInfo), g_UserModel[id]);

	if (!is_user_alive(id))
	{
		return;
	}

	if (g_UserModel[id][ID] == 0)
	{
		rg_reset_user_model(id);
		return;
	}

	rg_set_user_model(id, g_UserModel[id][MODEL_FILE]);
}

LoadConfigFile()
{
	if (!file_exists(g_szConfigFile))
	{
		write_file(g_szConfigFile, "; Models menu plugin by TheRedShoko @ AMXX-BG.info");
		write_file(g_szConfigFile, "; Syntax: ^"Name to be displayed^" ^"name of the mdl file^" ^"T (1) | CT (2) | Any (0)^" ^"admin flag^"");
		pause("ad");
		return;
	}

	new iLine, szLine[156], iBuffer;
	new szModelData[ModelData];
	copy(szModelData[DISPLAY_NAME], charsmax(szModelData[DISPLAY_NAME]), "Default");
	ArrayPushArray(g_LoadedModels, szModelData);
	g_iTotalModels = 1;

	while ((iLine = read_file(g_szConfigFile, iLine, szLine, charsmax(szLine), iBuffer)))
	{
		if (szLine[0] == EOS || szLine[0] == ';' || szLine[0] == '/' && szLine[1] == '/')
		{
			continue;
		}

		new szModelName[64], szFileName[64], szTeam[8], szFlag[8];
		parse(szLine, szModelName, charsmax(szModelName), szFileName, charsmax(szFileName), szTeam, charsmax(szTeam), szFlag, charsmax(szFlag));

		if (!TryPrecachePlayerModel(szFileName))
		{
			continue;
		}

		copy(szModelData[DISPLAY_NAME], charsmax(szModelData[DISPLAY_NAME]), szModelName);
		copy(szModelData[MODEL_FILE], charsmax(szModelData[MODEL_FILE]), szFileName);

		switch (szTeam[0])
		{
			case '0', 'a', ' ': szModelData[MODEL_TEAM] = 0;
			case '1', 't', 'T': szModelData[MODEL_TEAM] = 1;
			case '2', 'c', 'C': szModelData[MODEL_TEAM] = 2;
		}

		copy(szModelData[MODEL_FLAG], charsmax(szModelData[MODEL_FLAG]), szFlag);

		szModelData[ID] = g_iTotalModels;

		ArrayPushArray(g_LoadedModels, szModelData);
		g_iTotalModels++;
	}

	GenerateModelMenus();
}

GenerateModelMenus()
{
	new  szTempData[ModelData];
	for (new i = 0; i < sizeof g_iMenu; i++)
	{
		g_iMenu[i] = menu_create("Models Menu", "ModelsMenuHandler");
	}

	new iCallback = menu_makecallback("ModelsMenuCallback");
	new szInfo[8];

	for (new j = 0; j < g_iTotalModels; j++)
	{
		ArrayGetArray(g_LoadedModels, j, szTempData);
		num_to_str(j, szInfo, charsmax(szInfo));

		if (szTempData[MODEL_TEAM] != 0)
		{
			menu_additem(g_iMenu[szTempData[MODEL_TEAM] - 1], szTempData[DISPLAY_NAME], szInfo, _, iCallback);
		}
		else
		{
			for (new i = 0; i < sizeof g_iMenu; i++)
			{
				menu_additem(g_iMenu[i], szTempData[DISPLAY_NAME], szInfo, _, iCallback);
			}
		}
	}
}

TryPrecachePlayerModel(const szModel[])
{
	new szFile[128];
	formatex(szFile, charsmax(szFile), "models/player/%s/%s.mdl", szModel, szModel);

	if (!file_exists(szFile))
	{
		return 0;
	}
	
	precache_generic(szFile);
	
	replace_all(szFile, charsmax(szFile), ".mdl", "T.mdl");
	if (file_exists(szFile))
	{
		precache_generic(szFile);
	}

	return 1;
}

bool:IsUserInGame(id)
{
	return is_user_connected(id) && 1 <= get_member(id, m_iTeam) <= 2;
}

I have a problem with this plugin. When i change team (ct or t in t or ct) i have the old team model, your can help me with a function for models reset ?

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

Problem with reset models

Мнение от OciXCrom » 27 Сеп 2018, 01:58


Аватар
mar1anx
Извън линия
Foreigner
Foreigner
Мнения: 41
Регистриран на: 17 Сеп 2018, 00:56
Се отблагодари: 4 пъти
Получена благодарност: 2 пъти

Problem with reset models

Мнение от mar1anx » 27 Сеп 2018, 09:47

does not work, I tried with cstrike functions, the plugin is reapi and his function does not work rg_reset_user_model

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1016
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 84 пъти

Problem with reset models

Мнение от TheRedShoko » 27 Сеп 2018, 11:40

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

#include <amxmodx>
#include <reapi>

#define VERSION "2.0 ReAPI"

enum _:ModelData
{
	ID,
	DISPLAY_NAME[64],
	MODEL_FILE[64],
	MODEL_TEAM,
	MODEL_FLAG[8]
}

new const g_szConfigFile[] = "addons/amxmodx/configs/models_menu.ini";

new Array:g_LoadedModels;
new g_UserModel[33][ModelData];
new g_iMenu[2], g_iTotalModels;

public plugin_init()
{
	register_plugin("Models Menu", VERSION, "TheRedShoko @ AMXX-BG.info");
	register_cvar("models_menu", VERSION, FCVAR_SERVER|FCVAR_UNLOGGED|FCVAR_SPONLY);

	register_clcmd("say /models", "ShowModelsMenu");
	register_clcmd("say_team /models", "ShowModelsMenu");

	RegisterHookChain(RG_CBasePlayer_Spawn, "FwPlayerSpawnPost", 1);
}

public plugin_precache()
{
	g_LoadedModels = ArrayCreate(ModelData);

	LoadConfigFile();
}

public FwPlayerSpawnPost(id)
{
	if (!is_user_alive(id) || g_UserModel[id][ID] == 0 || strlen(g_UserModel[id][MODEL_FLAG]) != 0 && !(get_user_flags(id) & g_UserModel[id][MODEL_FLAG]) || g_UserModel[id][MODEL_TEAM] != (get_member(id, m_iTeam) - 1))
	{
		return;
	}

	rg_set_user_model(id, g_UserModel[id][MODEL_FILE]);
}

public ShowModelsMenu(id)
{
	if (!IsUserInGame(id))
	{
		return PLUGIN_HANDLED;
	}

	new iTeam = get_member(id, m_iTeam) - 1;

	menu_display(id, g_iMenu[iTeam]);
	return PLUGIN_HANDLED;
}

public ModelsMenuCallback(id, iMenu, Item)
{
	new szTemp[ModelData];
	new szInfo[8], szName[80], iAccess, iCallback;
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), _, _, iCallback);

	ArrayGetArray(g_LoadedModels, str_to_num(szInfo), szTemp);
	copy(szName, charsmax(szName), szTemp[DISPLAY_NAME]);

	if (!(get_user_flags(id) & read_flags(szTemp[MODEL_FLAG])) && strlen(szTemp[MODEL_FLAG]) != 0)
	{
		add(szName, charsmax(szName), " \r[Admin Only]");
		menu_item_setname(iMenu, Item, szName);
		return ITEM_DISABLED;
	}

	if (szTemp[ID] == g_UserModel[id][ID])
	{
		add(szName, charsmax(szName), " \y[Current Model]");
		menu_item_setname(iMenu, Item, szName);
		return ITEM_DISABLED;
	}

	menu_item_setname(iMenu, Item, szName);

	return ITEM_ENABLED;
}

public ModelsMenuHandler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		return;
	}

	new szInfo[8], szName[80], iAccess, iCallback;
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), szName, charsmax(szName), iCallback);

	ArrayGetArray(g_LoadedModels, str_to_num(szInfo), g_UserModel[id]);

	if (!is_user_alive(id))
	{
		return;
	}

	if (g_UserModel[id][ID] == 0)
	{
		rg_reset_user_model(id);
		return;
	}

	rg_set_user_model(id, g_UserModel[id][MODEL_FILE]);
}

LoadConfigFile()
{
	if (!file_exists(g_szConfigFile))
	{
		write_file(g_szConfigFile, "; Models menu plugin by TheRedShoko @ AMXX-BG.info");
		write_file(g_szConfigFile, "; Syntax: ^"Name to be displayed^" ^"name of the mdl file^" ^"T (1) | CT (2) | Any (0)^" ^"admin flag^"");
		pause("ad");
		return;
	}

	new iLine, szLine[156], iBuffer;
	new szModelData[ModelData];
	copy(szModelData[DISPLAY_NAME], charsmax(szModelData[DISPLAY_NAME]), "Default");
	ArrayPushArray(g_LoadedModels, szModelData);
	g_iTotalModels = 1;

	while ((iLine = read_file(g_szConfigFile, iLine, szLine, charsmax(szLine), iBuffer)))
	{
		if (szLine[0] == EOS || szLine[0] == ';' || szLine[0] == '/' && szLine[1] == '/')
		{
			continue;
		}

		new szModelName[64], szFileName[64], szTeam[8], szFlag[8];
		parse(szLine, szModelName, charsmax(szModelName), szFileName, charsmax(szFileName), szTeam, charsmax(szTeam), szFlag, charsmax(szFlag));

		if (!TryPrecachePlayerModel(szFileName))
		{
			continue;
		}

		copy(szModelData[DISPLAY_NAME], charsmax(szModelData[DISPLAY_NAME]), szModelName);
		copy(szModelData[MODEL_FILE], charsmax(szModelData[MODEL_FILE]), szFileName);

		switch (szTeam[0])
		{
			case '0', 'a', ' ': szModelData[MODEL_TEAM] = 0;
			case '1', 't', 'T': szModelData[MODEL_TEAM] = 1;
			case '2', 'c', 'C': szModelData[MODEL_TEAM] = 2;
		}

		copy(szModelData[MODEL_FLAG], charsmax(szModelData[MODEL_FLAG]), szFlag);

		szModelData[ID] = g_iTotalModels;

		ArrayPushArray(g_LoadedModels, szModelData);
		g_iTotalModels++;
	}

	GenerateModelMenus();
}

GenerateModelMenus()
{
	new  szTempData[ModelData];
	for (new i = 0; i < sizeof g_iMenu; i++)
	{
		g_iMenu[i] = menu_create("Models Menu", "ModelsMenuHandler");
	}

	new iCallback = menu_makecallback("ModelsMenuCallback");
	new szInfo[8];

	for (new j = 0; j < g_iTotalModels; j++)
	{
		ArrayGetArray(g_LoadedModels, j, szTempData);
		num_to_str(j, szInfo, charsmax(szInfo));

		if (szTempData[MODEL_TEAM] != 0)
		{
			menu_additem(g_iMenu[szTempData[MODEL_TEAM] - 1], szTempData[DISPLAY_NAME], szInfo, _, iCallback);
		}
		else
		{
			for (new i = 0; i < sizeof g_iMenu; i++)
			{
				menu_additem(g_iMenu[i], szTempData[DISPLAY_NAME], szInfo, _, iCallback);
			}
		}
	}
}

TryPrecachePlayerModel(const szModel[])
{
	new szFile[128];
	formatex(szFile, charsmax(szFile), "models/player/%s/%s.mdl", szModel, szModel);

	if (!file_exists(szFile))
	{
		return 0;
	}
	
	precache_generic(szFile);
	
	replace_all(szFile, charsmax(szFile), ".mdl", "T.mdl");
	if (file_exists(szFile))
	{
		precache_generic(szFile);
	}

	return 1;
}

bool:IsUserInGame(id)
{
	return is_user_connected(id) && 1 <= get_member(id, m_iTeam) <= 2;
}
Try like this.

Аватар
mar1anx
Извън линия
Foreigner
Foreigner
Мнения: 41
Регистриран на: 17 Сеп 2018, 00:56
Се отблагодари: 4 пъти
Получена благодарност: 2 пъти

Problem with reset models

Мнение от mar1anx » 27 Сеп 2018, 11:57

is not working, i move ct and i have skin from T

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1016
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 84 пъти

Problem with reset models

Мнение от TheRedShoko » 27 Сеп 2018, 15:38

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

#include <amxmodx>
#include <reapi>

#define VERSION "2.0 ReAPI"

enum _:ModelData
{
	ID,
	DISPLAY_NAME[64],
	MODEL_FILE[64],
	MODEL_TEAM,
	MODEL_FLAG[8]
}

new const g_szConfigFile[] = "addons/amxmodx/configs/models_menu.ini";

new Array:g_LoadedModels;
new g_UserModel[33][ModelData];
new g_iMenu[2], g_iTotalModels;

public plugin_init()
{
	register_plugin("Models Menu", VERSION, "TheRedShoko @ AMXX-BG.info");
	register_cvar("models_menu", VERSION, FCVAR_SERVER|FCVAR_UNLOGGED|FCVAR_SPONLY);

	register_clcmd("say /models", "ShowModelsMenu");
	register_clcmd("say_team /models", "ShowModelsMenu");

	RegisterHookChain(RG_CBasePlayer_Spawn, "FwPlayerSpawnPost", 1);
}

public plugin_precache()
{
	g_LoadedModels = ArrayCreate(ModelData);

	LoadConfigFile();
}

public FwPlayerSpawnPost(id)
{
	if (!is_user_alive(id) || g_UserModel[id][ID] == 0)
	{
		return;
	}
	
	if (strlen(g_UserModel[id][MODEL_FLAG]) != 0 && !(get_user_flags(id) & g_UserModel[id][MODEL_FLAG]) || g_UserModel[id][MODEL_TEAM] && g_UserModel[id][MODEL_TEAM] != (get_member(id, m_iTeam)) )
	{
		rg_reset_user_model(id);
		ArrayGetArray(g_LoadedModels, 0, g_UserModel[id]);
		return;
	}

	rg_set_user_model(id, g_UserModel[id][MODEL_FILE]);
}

public ShowModelsMenu(id)
{
	if (!IsUserInGame(id))
	{
		return PLUGIN_HANDLED;
	}

	new iTeam = get_member(id, m_iTeam) - 1;

	menu_display(id, g_iMenu[iTeam]);
	return PLUGIN_HANDLED;
}

public ModelsMenuCallback(id, iMenu, Item)
{
	new szTemp[ModelData];
	new szInfo[8], szName[80], iAccess, iCallback;
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), _, _, iCallback);

	ArrayGetArray(g_LoadedModels, str_to_num(szInfo), szTemp);
	copy(szName, charsmax(szName), szTemp[DISPLAY_NAME]);

	if (!(get_user_flags(id) & read_flags(szTemp[MODEL_FLAG])) && strlen(szTemp[MODEL_FLAG]) != 0)
	{
		add(szName, charsmax(szName), " \r[Admin Only]");
		menu_item_setname(iMenu, Item, szName);
		return ITEM_DISABLED;
	}

	if (szTemp[ID] == g_UserModel[id][ID])
	{
		add(szName, charsmax(szName), " \y[Current Model]");
		menu_item_setname(iMenu, Item, szName);
		return ITEM_DISABLED;
	}

	menu_item_setname(iMenu, Item, szName);

	return ITEM_ENABLED;
}

public ModelsMenuHandler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		return;
	}

	new szInfo[8], szName[80], iAccess, iCallback;
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), szName, charsmax(szName), iCallback);

	ArrayGetArray(g_LoadedModels, str_to_num(szInfo), g_UserModel[id]);

	if (!is_user_alive(id))
	{
		return;
	}

	if (g_UserModel[id][ID] == 0)
	{
		rg_reset_user_model(id);
		return;
	}

	rg_set_user_model(id, g_UserModel[id][MODEL_FILE]);
}

LoadConfigFile()
{
	if (!file_exists(g_szConfigFile))
	{
		write_file(g_szConfigFile, "; Models menu plugin by TheRedShoko @ AMXX-BG.info");
		write_file(g_szConfigFile, "; Syntax: ^"Name to be displayed^" ^"name of the mdl file^" ^"T (1) | CT (2) | Any (0)^" ^"admin flag^"");
		pause("ad");
		return;
	}

	new iLine, szLine[156], iBuffer;
	new szModelData[ModelData];
	copy(szModelData[DISPLAY_NAME], charsmax(szModelData[DISPLAY_NAME]), "Default");
	ArrayPushArray(g_LoadedModels, szModelData);
	g_iTotalModels = 1;

	while ((iLine = read_file(g_szConfigFile, iLine, szLine, charsmax(szLine), iBuffer)))
	{
		if (szLine[0] == EOS || szLine[0] == ';' || szLine[0] == '/' && szLine[1] == '/')
		{
			continue;
		}

		new szModelName[64], szFileName[64], szTeam[8], szFlag[8];
		parse(szLine, szModelName, charsmax(szModelName), szFileName, charsmax(szFileName), szTeam, charsmax(szTeam), szFlag, charsmax(szFlag));

		if (!TryPrecachePlayerModel(szFileName))
		{
			continue;
		}

		copy(szModelData[DISPLAY_NAME], charsmax(szModelData[DISPLAY_NAME]), szModelName);
		copy(szModelData[MODEL_FILE], charsmax(szModelData[MODEL_FILE]), szFileName);

		switch (szTeam[0])
		{
			case '0', 'a', ' ': szModelData[MODEL_TEAM] = 0;
			case '1', 't', 'T': szModelData[MODEL_TEAM] = 1;
			case '2', 'c', 'C': szModelData[MODEL_TEAM] = 2;
		}

		copy(szModelData[MODEL_FLAG], charsmax(szModelData[MODEL_FLAG]), szFlag);

		szModelData[ID] = g_iTotalModels;

		ArrayPushArray(g_LoadedModels, szModelData);
		g_iTotalModels++;
	}

	GenerateModelMenus();
}

GenerateModelMenus()
{
	new  szTempData[ModelData];
	for (new i = 0; i < sizeof g_iMenu; i++)
	{
		g_iMenu[i] = menu_create("Models Menu", "ModelsMenuHandler");
	}

	new iCallback = menu_makecallback("ModelsMenuCallback");
	new szInfo[8];

	for (new j = 0; j < g_iTotalModels; j++)
	{
		ArrayGetArray(g_LoadedModels, j, szTempData);
		num_to_str(j, szInfo, charsmax(szInfo));

		if (szTempData[MODEL_TEAM] != 0)
		{
			menu_additem(g_iMenu[szTempData[MODEL_TEAM] - 1], szTempData[DISPLAY_NAME], szInfo, _, iCallback);
		}
		else
		{
			for (new i = 0; i < sizeof g_iMenu; i++)
			{
				menu_additem(g_iMenu[i], szTempData[DISPLAY_NAME], szInfo, _, iCallback);
			}
		}
	}
}

TryPrecachePlayerModel(const szModel[])
{
	new szFile[128];
	formatex(szFile, charsmax(szFile), "models/player/%s/%s.mdl", szModel, szModel);

	if (!file_exists(szFile))
	{
		return 0;
	}
	
	precache_generic(szFile);
	
	replace_all(szFile, charsmax(szFile), ".mdl", "T.mdl");
	if (file_exists(szFile))
	{
		precache_generic(szFile);
	}

	return 1;
}

bool:IsUserInGame(id)
{
	return is_user_connected(id) && 1 <= get_member(id, m_iTeam) <= 2;
}
Try like this.

Аватар
mar1anx
Извън линия
Foreigner
Foreigner
Мнения: 41
Регистриран на: 17 Сеп 2018, 00:56
Се отблагодари: 4 пъти
Получена благодарност: 2 пъти

Problem with reset models

Мнение от mar1anx » 27 Сеп 2018, 15:47

now its working, thanks

Аватар
mar1anx
Извън линия
Foreigner
Foreigner
Мнения: 41
Регистриран на: 17 Сеп 2018, 00:56
Се отблагодари: 4 пъти
Получена благодарност: 2 пъти

Problem with reset models

Мнение от mar1anx » 28 Сеп 2018, 15:27

i use crx_ranksystem and crxranks_flags_per_level.amxx by OciXCrom and i have another problem with skins
I have flag on skin level on RankSystemFlags.ini, and if I do not have flag in user.ini, it resets the skin to the players if it dies.

If you have admin / slot passed in users.ini, it does not reset your skin. But if you're just a level 10 player and flag m from ranksystemflags do not stay with your skin

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1016
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 84 пъти

Problem with reset models

Мнение от TheRedShoko » 01 Окт 2018, 09:38

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

#include <amxmodx>
#include <reapi>

#define VERSION "2.0 ReAPI"

enum _:ModelData
{
	ID,
	DISPLAY_NAME[64],
	MODEL_FILE[64],
	MODEL_TEAM,
	MODEL_FLAG[8]
}

new const g_szConfigFile[] = "addons/amxmodx/configs/models_menu.ini";

new Array:g_LoadedModels;
new g_UserModel[33][ModelData];
new g_iMenu[2], g_iTotalModels;

public plugin_init()
{
	register_plugin("Models Menu", VERSION, "TheRedShoko @ AMXX-BG.info");
	register_cvar("models_menu", VERSION, FCVAR_SERVER|FCVAR_UNLOGGED|FCVAR_SPONLY);

	register_clcmd("say /models", "ShowModelsMenu");
	register_clcmd("say_team /models", "ShowModelsMenu");

	RegisterHookChain(RG_CBasePlayer_Spawn, "FwPlayerSpawnPost", 1);
}

public plugin_precache()
{
	g_LoadedModels = ArrayCreate(ModelData);

	LoadConfigFile();
}

public FwPlayerSpawnPost(id)
{
	if (!is_user_alive(id) || g_UserModel[id][ID] == 0)
	{
		return;
	}
	
	if (strlen(g_UserModel[id][MODEL_FLAG]) != 0 && !(get_user_flags(id) & read_flags(g_UserModel[id][MODEL_FLAG])) || g_UserModel[id][MODEL_TEAM] && g_UserModel[id][MODEL_TEAM] != (get_member(id, m_iTeam)) )
	{
		rg_reset_user_model(id);
		ArrayGetArray(g_LoadedModels, 0, g_UserModel[id]);
		return;
	}

	rg_set_user_model(id, g_UserModel[id][MODEL_FILE]);
}

public ShowModelsMenu(id)
{
	if (!IsUserInGame(id))
	{
		return PLUGIN_HANDLED;
	}

	new iTeam = get_member(id, m_iTeam) - 1;

	menu_display(id, g_iMenu[iTeam]);
	return PLUGIN_HANDLED;
}

public ModelsMenuCallback(id, iMenu, Item)
{
	new szTemp[ModelData];
	new szInfo[8], szName[80], iAccess, iCallback;
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), _, _, iCallback);

	ArrayGetArray(g_LoadedModels, str_to_num(szInfo), szTemp);
	copy(szName, charsmax(szName), szTemp[DISPLAY_NAME]);

	if (!(get_user_flags(id) & read_flags(szTemp[MODEL_FLAG])) && strlen(szTemp[MODEL_FLAG]) != 0)
	{
		add(szName, charsmax(szName), " \r[Admin Only]");
		menu_item_setname(iMenu, Item, szName);
		return ITEM_DISABLED;
	}

	if (szTemp[ID] == g_UserModel[id][ID])
	{
		add(szName, charsmax(szName), " \y[Current Model]");
		menu_item_setname(iMenu, Item, szName);
		return ITEM_DISABLED;
	}

	menu_item_setname(iMenu, Item, szName);

	return ITEM_ENABLED;
}

public ModelsMenuHandler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		return;
	}

	new szInfo[8], szName[80], iAccess, iCallback;
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), szName, charsmax(szName), iCallback);

	ArrayGetArray(g_LoadedModels, str_to_num(szInfo), g_UserModel[id]);

	if (!is_user_alive(id))
	{
		return;
	}

	if (g_UserModel[id][ID] == 0)
	{
		rg_reset_user_model(id);
		return;
	}

	rg_set_user_model(id, g_UserModel[id][MODEL_FILE]);
}

LoadConfigFile()
{
	if (!file_exists(g_szConfigFile))
	{
		write_file(g_szConfigFile, "; Models menu plugin by TheRedShoko @ AMXX-BG.info");
		write_file(g_szConfigFile, "; Syntax: ^"Name to be displayed^" ^"name of the mdl file^" ^"T (1) | CT (2) | Any (0)^" ^"admin flag^"");
		pause("ad");
		return;
	}

	new iLine, szLine[156], iBuffer;
	new szModelData[ModelData];
	copy(szModelData[DISPLAY_NAME], charsmax(szModelData[DISPLAY_NAME]), "Default");
	ArrayPushArray(g_LoadedModels, szModelData);
	g_iTotalModels = 1;

	while ((iLine = read_file(g_szConfigFile, iLine, szLine, charsmax(szLine), iBuffer)))
	{
		if (szLine[0] == EOS || szLine[0] == ';' || szLine[0] == '/' && szLine[1] == '/')
		{
			continue;
		}

		new szModelName[64], szFileName[64], szTeam[8], szFlag[8];
		parse(szLine, szModelName, charsmax(szModelName), szFileName, charsmax(szFileName), szTeam, charsmax(szTeam), szFlag, charsmax(szFlag));

		if (!TryPrecachePlayerModel(szFileName))
		{
			continue;
		}

		copy(szModelData[DISPLAY_NAME], charsmax(szModelData[DISPLAY_NAME]), szModelName);
		copy(szModelData[MODEL_FILE], charsmax(szModelData[MODEL_FILE]), szFileName);

		switch (szTeam[0])
		{
			case '0', 'a', ' ': szModelData[MODEL_TEAM] = 0;
			case '1', 't', 'T': szModelData[MODEL_TEAM] = 1;
			case '2', 'c', 'C': szModelData[MODEL_TEAM] = 2;
		}

		copy(szModelData[MODEL_FLAG], charsmax(szModelData[MODEL_FLAG]), szFlag);

		szModelData[ID] = g_iTotalModels;

		ArrayPushArray(g_LoadedModels, szModelData);
		g_iTotalModels++;
	}

	GenerateModelMenus();
}

GenerateModelMenus()
{
	new  szTempData[ModelData];
	for (new i = 0; i < sizeof g_iMenu; i++)
	{
		g_iMenu[i] = menu_create("Models Menu", "ModelsMenuHandler");
	}

	new iCallback = menu_makecallback("ModelsMenuCallback");
	new szInfo[8];

	for (new j = 0; j < g_iTotalModels; j++)
	{
		ArrayGetArray(g_LoadedModels, j, szTempData);
		num_to_str(j, szInfo, charsmax(szInfo));

		if (szTempData[MODEL_TEAM] != 0)
		{
			menu_additem(g_iMenu[szTempData[MODEL_TEAM] - 1], szTempData[DISPLAY_NAME], szInfo, _, iCallback);
		}
		else
		{
			for (new i = 0; i < sizeof g_iMenu; i++)
			{
				menu_additem(g_iMenu[i], szTempData[DISPLAY_NAME], szInfo, _, iCallback);
			}
		}
	}
}

TryPrecachePlayerModel(const szModel[])
{
	new szFile[128];
	formatex(szFile, charsmax(szFile), "models/player/%s/%s.mdl", szModel, szModel);

	if (!file_exists(szFile))
	{
		return 0;
	}
	
	precache_generic(szFile);
	
	replace_all(szFile, charsmax(szFile), ".mdl", "T.mdl");
	if (file_exists(szFile))
	{
		precache_generic(szFile);
	}

	return 1;
}

bool:IsUserInGame(id)
{
	return is_user_connected(id) && 1 <= get_member(id, m_iTeam) <= 2;
}
Try like this.

Аватар
mar1anx
Извън линия
Foreigner
Foreigner
Мнения: 41
Регистриран на: 17 Сеп 2018, 00:56
Се отблагодари: 4 пъти
Получена благодарност: 2 пъти

Problem with reset models

Мнение от mar1anx » 01 Окт 2018, 15:18

now its working
Thanks,

T/C

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

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

Кой е на линия

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