I create nemesis plugin but not work [Help]

Coding Help/Re-API Supported
karan
Mod Tester
Mod Tester
India
Posts: 61
Joined: 2 Years Ago
Location: India
Has thanked: 1 time
Been thanked: 3 times
Age: 22
Contact:

Re: I create nemesis plugin but not work [Help]

#21

Post by karan » 1 Month Ago

jack now plugin is working but there are some problems; starting countdown is not working also round ambience is not working and when players is becoming nemesis his skin is not resetting(it stays nemesis skin even when he is zombie and also when he is human)
NeVeR DiE | Zombie Escape
IP : 139.59.90.127:40000
Image

User avatar
Mohamed Alaa
Mod Developer
Mod Developer
Egypt
Posts: 624
Joined: 2 Years Ago
Location: Egypt
Has thanked: 34 times
Been thanked: 48 times
Age: 19
Contact:

#22

Post by Mohamed Alaa » 1 Month Ago

For the menu try:

Code: Select all

#include <zombie_escape>

native ze_is_user_nemesis(id)
native ze_set_user_nemesis(id, bool:set)

// Access to start nemesis menu
#define NEMESISMENU_ACCESS ADMIN_LEVEL_H
#define MENU_PAGE_PLAYERS g_menu_data[id]

const OFFSET_CSMENUCODE = 205

new g_menu_data[33]

public plugin_natives()
{
	register_native("ze_open_nemesis_menu", "native_ze_open_nemesis_menu", 1)
}

public plugin_init()
{
	register_plugin("[ZE] Nemesis Menu", "1.0", "Jack")
	register_concmd("ze_nemmenu", "cmd_nemmenu", NEMESISMENU_ACCESS)
}

public cmd_nemmenu(id, level, cid)
{
	if (!cmd_access(id, NEMESISMENU_ACCESS, cid, 0))
	{
		client_print(id, print_console, "You don't have access.")
		return PLUGIN_HANDLED
	}
	
	open_nemesis_menu(id)
	return PLUGIN_HANDLED
}

public open_nemesis_menu(id)
{
	static szMenu[250], szName[32]
	new iMenuID, index, buffer[2]

	iMenuID = menu_create("Make nemesis", "menu_player_list")

	for (index = 0; index <= get_member_game(m_nMaxPlayers); index++)
	{
		if (!is_user_alive(index))
			continue
		
		get_user_name(index, szName, charsmax(szName))
		formatex(szMenu, charsmax(szMenu), "%s \r[%s]", szName, ze_is_user_zombie(index) ? "Zombie" : "Human")

		buffer[0] = index
		buffer[1] = 0
		menu_additem(iMenuID, szMenu, buffer)
	}

	// Back - Next - Exit
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_BACK")
	menu_setprop(iMenuID, MPROP_BACKNAME, szMenu)
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_NEXT")
	menu_setprop(iMenuID, MPROP_NEXTNAME, szMenu)
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_EXIT")
	menu_setprop(iMenuID, MPROP_EXITNAME, szMenu)
	
	MENU_PAGE_PLAYERS = min(MENU_PAGE_PLAYERS, menu_pages(iMenuID) - 1)
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	menu_display(id, iMenuID, MENU_PAGE_PLAYERS)
}

public menu_player_list(id, menuid, item)
{
	if (item == MENU_EXIT)
	{
		MENU_PAGE_PLAYERS = 0
		menu_destroy(menuid)
		open_nemesis_menu(id)
		return PLUGIN_HANDLED
	}
	
	// Remember player's menu page
	MENU_PAGE_PLAYERS = item / 7
	
	// Retrieve player id
	new buffer[2], dummy, player
	menu_item_getinfo(menuid, item, dummy, buffer, charsmax(buffer), _, _, dummy)
	player = buffer[0]
	
	if (is_user_alive(player))
	{
		new szName[2][32]
		get_user_name(id, szName[0], charsmax(szName))
		get_user_name(player, szName[1], charsmax(szName))
		ze_set_user_nemesis(player, !ze_is_user_nemesis(player))
		ze_colored_print(0, "!tAdmin !g%s!n: !g%s !tturned into %s!n.", szName[0], szName[1], ze_is_user_nemesis(player) ? "zombie" : "nemesis")
	}
	else
		ze_colored_print(id, "Player isn't alive.")
	
	menu_destroy(menuid)
	open_nemesis_menu(id)
	return PLUGIN_HANDLED
}

public native_ze_open_nemesis_menu(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
		return -1
	}

	open_nemesis_menu(id)
	return true
}
What do you mean by external skin?
Want your own mod edition? PM me.
Accepting web projects.
CS 1.6 hosting: powergamingtech.com

karan
Mod Tester
Mod Tester
India
Posts: 61
Joined: 2 Years Ago
Location: India
Has thanked: 1 time
Been thanked: 3 times
Age: 22
Contact:

#23

Post by karan » 3 Weeks Ago

Mohamed Alaa wrote:
1 Month Ago
For the menu try:

Code: Select all

#include <zombie_escape>

native ze_is_user_nemesis(id)
native ze_set_user_nemesis(id, bool:set)

// Access to start nemesis menu
#define NEMESISMENU_ACCESS ADMIN_LEVEL_H
#define MENU_PAGE_PLAYERS g_menu_data[id]

const OFFSET_CSMENUCODE = 205

new g_menu_data[33]

public plugin_natives()
{
	register_native("ze_open_nemesis_menu", "native_ze_open_nemesis_menu", 1)
}

public plugin_init()
{
	register_plugin("[ZE] Nemesis Menu", "1.0", "Jack")
	register_concmd("ze_nemmenu", "cmd_nemmenu", NEMESISMENU_ACCESS)
}

public cmd_nemmenu(id, level, cid)
{
	if (!cmd_access(id, NEMESISMENU_ACCESS, cid, 0))
	{
		client_print(id, print_console, "You don't have access.")
		return PLUGIN_HANDLED
	}
	
	open_nemesis_menu(id)
	return PLUGIN_HANDLED
}

public open_nemesis_menu(id)
{
	static szMenu[250], szName[32]
	new iMenuID, index, buffer[2]

	iMenuID = menu_create("Make nemesis", "menu_player_list")

	for (index = 0; index <= get_member_game(m_nMaxPlayers); index++)
	{
		if (!is_user_alive(index))
			continue
		
		get_user_name(index, szName, charsmax(szName))
		formatex(szMenu, charsmax(szMenu), "%s \r[%s]", szName, ze_is_user_zombie(index) ? "Zombie" : "Human")

		buffer[0] = index
		buffer[1] = 0
		menu_additem(iMenuID, szMenu, buffer)
	}

	// Back - Next - Exit
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_BACK")
	menu_setprop(iMenuID, MPROP_BACKNAME, szMenu)
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_NEXT")
	menu_setprop(iMenuID, MPROP_NEXTNAME, szMenu)
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_EXIT")
	menu_setprop(iMenuID, MPROP_EXITNAME, szMenu)
	
	MENU_PAGE_PLAYERS = min(MENU_PAGE_PLAYERS, menu_pages(iMenuID) - 1)
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	menu_display(id, iMenuID, MENU_PAGE_PLAYERS)
}

public menu_player_list(id, menuid, item)
{
	if (item == MENU_EXIT)
	{
		MENU_PAGE_PLAYERS = 0
		menu_destroy(menuid)
		open_nemesis_menu(id)
		return PLUGIN_HANDLED
	}
	
	// Remember player's menu page
	MENU_PAGE_PLAYERS = item / 7
	
	// Retrieve player id
	new buffer[2], dummy, player
	menu_item_getinfo(menuid, item, dummy, buffer, charsmax(buffer), _, _, dummy)
	player = buffer[0]
	
	if (is_user_alive(player))
	{
		new szName[2][32]
		get_user_name(id, szName[0], charsmax(szName))
		get_user_name(player, szName[1], charsmax(szName))
		ze_set_user_nemesis(player, !ze_is_user_nemesis(player))
		ze_colored_print(0, "!tAdmin !g%s!n: !g%s !tturned into %s!n.", szName[0], szName[1], ze_is_user_nemesis(player) ? "zombie" : "nemesis")
	}
	else
		ze_colored_print(id, "Player isn't alive.")
	
	menu_destroy(menuid)
	open_nemesis_menu(id)
	return PLUGIN_HANDLED
}

public native_ze_open_nemesis_menu(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
		return -1
	}

	open_nemesis_menu(id)
	return true
}
What do you mean by external skin?
now frost nade is not working for nemesis; can u fix it plz
NeVeR DiE | Zombie Escape
IP : 139.59.90.127:40000
Image

User avatar
Mark
Senior Member
Senior Member
United States of America
Posts: 283
Joined: 1 Year Ago
Location: Des Moines/USA
Donation: 1x donated in total €10.00
Has thanked: 6 times
Been thanked: 21 times
Age: 34
Contact:

#24

Post by Mark » 3 Weeks Ago

Post your Frost Nade Code.

karan
Mod Tester
Mod Tester
India
Posts: 61
Joined: 2 Years Ago
Location: India
Has thanked: 1 time
Been thanked: 3 times
Age: 22
Contact:

#25

Post by karan » 3 Weeks Ago

  1. #include <zombie_escape>
  2.  
  3. // Setting File
  4. new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
  5.  
  6. // Defines
  7. #define MODEL_MAX_LENGTH 64
  8. #define SOUND_MAX_LENGTH 64
  9. #define SPRITE_MAX_LENGTH 64
  10. #define TASK_FROST_REMOVE 200
  11. #define ID_FROST_REMOVE (taskid - TASK_FROST_REMOVE)
  12. #define TASK_FREEZE 2018
  13.  
  14. // Default Sounds
  15. new const szFrostGrenadeExplodeSound[][] =
  16. {
  17.     "warcraft3/frostnova.wav"
  18. }
  19.  
  20. new const szFrostGrenadePlayerSound[][] =
  21. {
  22.     "warcraft3/impalehit.wav"
  23. }
  24.  
  25. new const szFrostGrenadeBreakSound[][] =
  26. {
  27.     "warcraft3/impalelaunch1.wav"
  28. }
  29.  
  30. // Default Models
  31. new g_v_szFrostGrenadeModel[MODEL_MAX_LENGTH] = "models/zombie_escape/v_grenade_frost.mdl"
  32. new g_p_szFrostGrenadeModel[MODEL_MAX_LENGTH] = "models/zombie_escape/p_grenade_frost.mdl"
  33. new g_w_szFrostGrenadeModel[MODEL_MAX_LENGTH] = "models/zombie_escape/w_grenade_frost.mdl"
  34.  
  35. // Default Sprites
  36. new g_szGrenadeTrailSprite[SPRITE_MAX_LENGTH] = "sprites/laserbeam.spr"
  37. new g_szGrenadeRingSprite[SPRITE_MAX_LENGTH] = "sprites/shockwave.spr"
  38. new g_szGrenadeGlassSprite[SPRITE_MAX_LENGTH] = "models/glassgibs.mdl"
  39.  
  40. // Dynamic Arrays
  41. new Array:g_szFrostGrenadeExplodeSound
  42. new Array:g_szFrostGrenadePlayerSound
  43. new Array:g_szFrostGrenadeBreakSound
  44.  
  45. // Forwards
  46. enum _:TOTAL_FORWARDS
  47. {
  48.     FW_USER_FREEZE_PRE = 0,
  49.     FW_USER_UNFROZEN
  50. }
  51.  
  52. new g_iForwards[TOTAL_FORWARDS]
  53. new g_iForwardReturn
  54.  
  55. // Variables
  56. new bool:g_bIsFrozen[33],
  57.     bool:g_bZombieReleased,
  58.     g_iFrozenRenderingFx[33],
  59.     Float:g_fFrozenRenderingColor[33][3],
  60.     g_iFrozenRenderingRender[33],
  61.     Float:g_fFrozenRenderingAmount[33],
  62.     g_iMaxClients
  63.  
  64. // Sprites
  65. new g_iTrailSpr,
  66.     g_iExplodeSpr,
  67.     g_iGlassSpr
  68.  
  69. // Cvar
  70. new g_pCvarFrostDuration,
  71.     g_pCvarFrostHudIcon,
  72.     g_pCvarFrozenDamage,
  73.     g_pCvarFrostRadius,
  74.     g_pCvarHitType
  75.  
  76. public plugin_init()
  77. {
  78.     register_plugin("[ZE] Frost Nade", ZE_VERSION, AUTHORS)
  79.    
  80.     // Hook Chains
  81.     RegisterHookChain(RG_CBasePlayer_TraceAttack, "Fw_TraceAttack_Pre", 0)
  82.     RegisterHookChain(RG_CBasePlayer_Killed, "Fw_PlayerKilled_Post", 1)
  83.     RegisterHookChain(RG_CBasePlayer_PreThink, "Fw_PreThink_Post", 1)
  84.    
  85.     // Events
  86.     register_event("HLTV", "New_Round", "a", "1=0", "2=0")
  87.    
  88.     // Hams
  89.     RegisterHam(Ham_Think, "grenade", "Fw_ThinkGrenade_Post", 1)   
  90.    
  91.     // Fakemeta
  92.     register_forward(FM_SetModel, "Fw_SetModel_Post", 1)
  93.    
  94.     // Forwards
  95.     g_iForwards[FW_USER_FREEZE_PRE] = CreateMultiForward("ze_frost_pre", ET_CONTINUE, FP_CELL)
  96.     g_iForwards[FW_USER_UNFROZEN] = CreateMultiForward("ze_frost_unfreeze", ET_IGNORE, FP_CELL)
  97.    
  98.     // Cvars
  99.     g_pCvarFrostDuration = register_cvar("ze_frost_duration", "3")
  100.     g_pCvarFrostHudIcon = register_cvar("ze_frost_hud_icon", "1")
  101.     g_pCvarFrozenDamage = register_cvar("ze_freeze_damage", "0")
  102.     g_pCvarFrostRadius = register_cvar("ze_freeze_radius", "240.0")
  103.     g_pCvarHitType = register_cvar("ze_freeze_hit_type", "0")
  104.    
  105.     // Static Values
  106.     g_iMaxClients = get_member_game(m_nMaxPlayers)
  107. }
  108.  
  109. public plugin_natives()
  110. {
  111.     register_native("ze_zombie_in_forst", "native_ze_zombie_in_forst", 1)
  112.     register_native("ze_set_frost_grenade", "native_ze_set_frost_grenade", 1)
  113. }
  114.  
  115. public native_ze_zombie_in_forst(id)
  116. {
  117.     if (!is_user_alive(id))
  118.     {
  119.         return -1
  120.     }
  121.    
  122.     return g_bIsFrozen[id]
  123. }
  124.  
  125. public native_ze_set_frost_grenade(id, set)
  126. {
  127.     if (!is_user_alive(id))
  128.     {
  129.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  130.         return -1;
  131.     }
  132.    
  133.     // Unfreeze
  134.     if (!set)
  135.     {
  136.         // Not frozen
  137.         if (!g_bIsFrozen[id])
  138.             return true
  139.        
  140.         // Remove freeze right away and stop the task
  141.         RemoveFreeze(id+TASK_FROST_REMOVE)
  142.         remove_task(id+TASK_FROST_REMOVE)
  143.         return true
  144.     }
  145.    
  146.     return set_freeze(id)
  147. }
  148.  
  149. public plugin_precache()
  150. {
  151.     // Initialize arrays
  152.     g_szFrostGrenadeExplodeSound = ArrayCreate(SOUND_MAX_LENGTH, 1)
  153.     g_szFrostGrenadePlayerSound = ArrayCreate(SOUND_MAX_LENGTH, 1)
  154.     g_szFrostGrenadeBreakSound = ArrayCreate(SOUND_MAX_LENGTH, 1)
  155.    
  156.     // Load from external file
  157.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Sounds", "FROST GRENADE EXPLODE", g_szFrostGrenadeExplodeSound)
  158.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Sounds", "FROST GRENADE PLAYER", g_szFrostGrenadePlayerSound)
  159.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Sounds", "FROST GRENADE BREAK", g_szFrostGrenadeBreakSound)
  160.    
  161.     // If we couldn't load custom sounds from file, use and save default ones
  162.    
  163.     new iIndex
  164.    
  165.     if (ArraySize(g_szFrostGrenadeExplodeSound) == 0)
  166.     {
  167.         for (iIndex = 0; iIndex < sizeof szFrostGrenadeExplodeSound; iIndex++)
  168.             ArrayPushString(g_szFrostGrenadeExplodeSound, szFrostGrenadeExplodeSound[iIndex])
  169.        
  170.         // Save to external file
  171.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Sounds", "FROST GRENADE EXPLODE", g_szFrostGrenadeExplodeSound)
  172.     }
  173.    
  174.     if (ArraySize(g_szFrostGrenadePlayerSound) == 0)
  175.     {
  176.         for (iIndex = 0; iIndex < sizeof szFrostGrenadePlayerSound; iIndex++)
  177.             ArrayPushString(g_szFrostGrenadePlayerSound, szFrostGrenadePlayerSound[iIndex])
  178.        
  179.         // Save to external file
  180.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Sounds", "FROST GRENADE PLAYER", g_szFrostGrenadePlayerSound)
  181.     }
  182.    
  183.     if (ArraySize(g_szFrostGrenadeBreakSound) == 0)
  184.     {
  185.         for (iIndex = 0; iIndex < sizeof szFrostGrenadeBreakSound; iIndex++)
  186.             ArrayPushString(g_szFrostGrenadeBreakSound, szFrostGrenadeBreakSound[iIndex])
  187.        
  188.         // Save to external file
  189.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Sounds", "FROST GRENADE BREAK", g_szFrostGrenadeBreakSound)
  190.     }
  191.    
  192.     // Load from external file, save if not found
  193.     if (!amx_load_setting_string(ZE_SETTING_RESOURCES, "Weapon Models", "V_GRENADE FROST", g_v_szFrostGrenadeModel, charsmax(g_v_szFrostGrenadeModel)))
  194.         amx_save_setting_string(ZE_SETTING_RESOURCES, "Weapon Models", "V_GRENADE FROST", g_v_szFrostGrenadeModel)
  195.     if (!amx_load_setting_string(ZE_SETTING_RESOURCES, "Weapon Models", "P_GRENADE FROST", g_p_szFrostGrenadeModel, charsmax(g_p_szFrostGrenadeModel)))
  196.         amx_save_setting_string(ZE_SETTING_RESOURCES, "Weapon Models", "P_GRENADE FROST", g_p_szFrostGrenadeModel)
  197.     if (!amx_load_setting_string(ZE_SETTING_RESOURCES, "Weapon Models", "W_GRENADE FROST", g_w_szFrostGrenadeModel, charsmax(g_w_szFrostGrenadeModel)))
  198.         amx_save_setting_string(ZE_SETTING_RESOURCES, "Weapon Models", "W_GRENADE FROST", g_w_szFrostGrenadeModel)
  199.     if (!amx_load_setting_string(ZE_SETTING_RESOURCES, "Grenade Sprites", "TRAIL", g_szGrenadeTrailSprite, charsmax(g_szGrenadeTrailSprite)))
  200.         amx_save_setting_string(ZE_SETTING_RESOURCES, "Grenade Sprites", "TRAIL", g_szGrenadeTrailSprite)
  201.     if (!amx_load_setting_string(ZE_SETTING_RESOURCES, "Grenade Sprites", "RING", g_szGrenadeRingSprite, charsmax(g_szGrenadeRingSprite)))
  202.         amx_save_setting_string(ZE_SETTING_RESOURCES, "Grenade Sprites", "RING", g_szGrenadeRingSprite)
  203.     if (!amx_load_setting_string(ZE_SETTING_RESOURCES, "Grenade Sprites", "GLASS", g_szGrenadeGlassSprite, charsmax(g_szGrenadeGlassSprite)))
  204.         amx_save_setting_string(ZE_SETTING_RESOURCES, "Grenade Sprites", "GLASS", g_szGrenadeGlassSprite)
  205.    
  206.     // Precache sounds
  207.    
  208.     new szSound[SOUND_MAX_LENGTH]
  209.    
  210.     for (iIndex = 0; iIndex < ArraySize(g_szFrostGrenadeExplodeSound); iIndex++)
  211.     {
  212.         ArrayGetString(g_szFrostGrenadeExplodeSound, iIndex, szSound, charsmax(szSound))
  213.         precache_sound(szSound)
  214.     }
  215.     for (iIndex = 0; iIndex < ArraySize(g_szFrostGrenadePlayerSound); iIndex++)
  216.     {
  217.         ArrayGetString(g_szFrostGrenadePlayerSound, iIndex, szSound, charsmax(szSound))
  218.         precache_sound(szSound)
  219.     }
  220.     for (iIndex = 0; iIndex < ArraySize(g_szFrostGrenadeBreakSound); iIndex++)
  221.     {
  222.         ArrayGetString(g_szFrostGrenadeBreakSound, iIndex, szSound, charsmax(szSound))
  223.         precache_sound(szSound)
  224.     }
  225.    
  226.     // Precache models
  227.     precache_model(g_v_szFrostGrenadeModel)
  228.     precache_model(g_p_szFrostGrenadeModel)
  229.     precache_model(g_w_szFrostGrenadeModel)
  230.    
  231.     // Precache sprites
  232.     g_iTrailSpr = precache_model(g_szGrenadeTrailSprite)
  233.     g_iExplodeSpr = precache_model(g_szGrenadeRingSprite)
  234.     g_iGlassSpr = precache_model(g_szGrenadeGlassSprite)
  235. }
  236.  
  237. public ze_user_humanized(id)
  238. {
  239.     // Set custom grenade model
  240.     cs_set_player_view_model(id, CSW_FLASHBANG, g_v_szFrostGrenadeModel)
  241.     cs_set_player_weap_model(id, CSW_FLASHBANG, g_p_szFrostGrenadeModel)
  242.     cs_set_player_view_model(id, CSW_SMOKEGRENADE, g_v_szFrostGrenadeModel)
  243.     cs_set_player_weap_model(id, CSW_SMOKEGRENADE, g_p_szFrostGrenadeModel)
  244.    
  245.     // If frozen, remove freeze after player is cured
  246.     if (g_bIsFrozen[id])
  247.     {
  248.         // Update rendering values first
  249.         ApplyFrozenRendering(id)
  250.        
  251.         // Remove freeze right away and stop the task
  252.         RemoveFreeze(id+TASK_FROST_REMOVE)
  253.         remove_task(id+TASK_FROST_REMOVE)
  254.     }
  255. }
  256.  
  257. public Fw_PreThink_Post(id)
  258. {
  259.     if (!ze_is_user_zombie(id))
  260.         return
  261.  
  262.     if (g_bIsFrozen[id] && g_bZombieReleased)
  263.     {
  264.         // Stop and Freeze Zombie
  265.         set_entvar(id, var_velocity, Float:{0.0,0.0,0.0})
  266.         set_entvar(id, var_maxspeed, 1.0)
  267.         ApplyFrozenRendering(id)
  268.     }
  269. }
  270.  
  271. public client_disconnected(id)
  272. {
  273.     g_bIsFrozen[id] = false
  274.     remove_task(id+TASK_FROST_REMOVE)
  275. }
  276.  
  277. public New_Round()
  278. {
  279.     remove_task(TASK_FREEZE)
  280.     g_bZombieReleased = false
  281.    
  282.     // Set w_ models for grenades on ground
  283.     new szModel[32], iEntity = -1;
  284.  
  285.     while((iEntity = rg_find_ent_by_class( iEntity, "armoury_entity")))
  286.     {
  287.         get_entvar(iEntity, var_model, szModel, charsmax(szModel))
  288.        
  289.         if (equali(szModel, "models/w_flashbang.mdl") || equali(szModel, "models/w_smokegrenade.mdl"))
  290.         {
  291.             engfunc(EngFunc_SetModel, iEntity, g_w_szFrostGrenadeModel)
  292.         }
  293.     }
  294. }
  295.  
  296. public Fw_TraceAttack_Pre(iVictim, iAttacker)
  297. {
  298.     // Block damage while frozen
  299.     if ((get_pcvar_num(g_pCvarFrozenDamage) == 0) && g_bIsFrozen[iVictim])
  300.         return HC_SUPERCEDE
  301.    
  302.     return HC_CONTINUE
  303. }
  304.  
  305. public Fw_PlayerKilled_Post(iVictim)
  306. {
  307.     // Frozen player being killed
  308.     if (g_bIsFrozen[iVictim])
  309.     {
  310.         // Remove freeze right away and stop the task
  311.         RemoveFreeze(iVictim+TASK_FROST_REMOVE)
  312.         remove_task(iVictim+TASK_FROST_REMOVE)
  313.     }
  314. }
  315.  
  316. public ze_zombie_release()
  317. {
  318.     g_bZombieReleased = true
  319. }
  320.  
  321. public Fw_SetModel_Post(entity, const model[])
  322. {
  323.     // We don't care
  324.     if (strlen(model) < 8)
  325.         return FMRES_IGNORED
  326.    
  327.     // Get damage time of grenade
  328.     static Float:dmgtime
  329.     get_entvar(entity, var_dmgtime, dmgtime)
  330.    
  331.     // Grenade not yet thrown
  332.     if (dmgtime == 0.0)
  333.         return FMRES_IGNORED
  334.    
  335.     // Grenade's owner is zombie?
  336.     if (ze_is_user_zombie(get_entvar(entity, var_owner)))
  337.         return FMRES_IGNORED
  338.  
  339.     // Flashbang or Smoke
  340.     if ((model[9] == 'f' && model[10] == 'l') || (model[9] == 's' && model[10] == 'm'))
  341.     {
  342.         // Give it a glow
  343.         Set_Rendering(entity, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 16);
  344.        
  345.         // And a colored trail
  346.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  347.         write_byte(TE_BEAMFOLLOW) // TE id
  348.         write_short(entity) // entity
  349.         write_short(g_iTrailSpr) // sprite
  350.         write_byte(10) // life
  351.         write_byte(10) // width
  352.         write_byte(0) // r
  353.         write_byte(100) // g
  354.         write_byte(200) // b
  355.         write_byte(200) // brightness
  356.         message_end()
  357.        
  358.         // Set grenade type on the thrown grenade entity
  359.         set_entvar(entity, var_flTimeStepSound, 3333.0)
  360.     }
  361.    
  362.     // Set w_ model
  363.     if (equali(model, "models/w_flashbang.mdl") || equali(model, "models/w_smokegrenade.mdl"))
  364.     {
  365.         engfunc(EngFunc_SetModel, entity, g_w_szFrostGrenadeModel)
  366.         return FMRES_SUPERCEDE
  367.     }
  368.    
  369.     return FMRES_IGNORED
  370. }
  371.  
  372. public Fw_ThinkGrenade_Post(entity)
  373. {
  374.     // Invalid entity
  375.     if (!pev_valid(entity))
  376.         return HAM_IGNORED
  377.    
  378.     // Get damage time of grenade
  379.     static Float:dmgtime
  380.     get_entvar(entity, var_dmgtime, dmgtime)
  381.    
  382.     // Check if it's time to go off
  383.     if (dmgtime > get_gametime())
  384.         return HAM_IGNORED
  385.    
  386.     // Check if it's one of our custom nades
  387.     switch (get_entvar(entity, var_flTimeStepSound))
  388.     {
  389.         case 3333.0: // Frost Grenade
  390.         {
  391.             frost_explode(entity)
  392.             return HAM_SUPERCEDE
  393.         }
  394.     }
  395.     return HAM_IGNORED
  396. }
  397.  
  398. // Frost Grenade Explosion
  399. frost_explode(ent)
  400. {
  401.     // Get origin
  402.     static Float:origin[3]
  403.     get_entvar(ent, var_origin, origin)
  404.    
  405.     // Make the explosion
  406.     create_blast3(origin)
  407.    
  408.     // Frost nade explode sound
  409.     static sound[SOUND_MAX_LENGTH]
  410.     ArrayGetString(g_szFrostGrenadeExplodeSound, random_num(0, ArraySize(g_szFrostGrenadeExplodeSound) - 1), sound, charsmax(sound))
  411.     emit_sound(ent, CHAN_WEAPON, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
  412.    
  413.     // Collisions
  414.     if (!get_pcvar_num(g_pCvarHitType))
  415.     {
  416.         new victim = -1
  417.        
  418.         while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, origin, get_pcvar_float(g_pCvarFrostRadius))) != 0)
  419.         {
  420.             // Only effect alive zombies, If player not released yet don't freeze him
  421.             if (!is_user_alive(victim) || !ze_is_user_zombie(victim) || !g_bZombieReleased)
  422.                 continue
  423.            
  424.             set_freeze(victim)
  425.         }
  426.     }
  427.     else
  428.     {
  429.         new Float:flNadeOrigin[3], Float:flVictimOrigin[3], Float:flDistance, tr = create_tr2(), Float:flFraction
  430.         get_entvar(ent, var_origin, flNadeOrigin)
  431.        
  432.         for(new iVictim = 1; iVictim <= g_iMaxClients; iVictim++)
  433.         {
  434.             if (!is_user_alive(iVictim) || !ze_is_user_zombie(iVictim) || !g_bZombieReleased)
  435.                 continue
  436.            
  437.             get_entvar(iVictim, var_origin, flVictimOrigin)
  438.            
  439.             // Get distance between nade and player
  440.             flDistance = vector_distance(flNadeOrigin, flVictimOrigin)
  441.            
  442.             if(flDistance > get_pcvar_float(g_pCvarFrostRadius))
  443.                 continue
  444.            
  445.             flNadeOrigin[2] += 2.0;
  446.             engfunc(EngFunc_TraceLine, flNadeOrigin, flVictimOrigin, DONT_IGNORE_MONSTERS, ent, tr);
  447.             flNadeOrigin[2] -= 2.0;
  448.            
  449.             get_tr2(tr, TR_flFraction, flFraction);
  450.            
  451.             if(flFraction != 1.0 && get_tr2(tr, TR_pHit) != iVictim)
  452.                 continue;
  453.            
  454.             set_freeze(iVictim)
  455.         }
  456.        
  457.         // Free the trace handler
  458.         free_tr2(tr);
  459.     }
  460.    
  461.     // Get rid of the grenade
  462.     engfunc(EngFunc_RemoveEntity, ent)
  463. }
  464.  
  465. set_freeze(victim)
  466. {
  467.     // Already frozen
  468.     if (g_bIsFrozen[victim])
  469.         return false
  470.    
  471.     // Allow other plugins to decide whether player should be frozen or not
  472.     ExecuteForward(g_iForwards[FW_USER_FREEZE_PRE], g_iForwardReturn, victim)
  473.    
  474.     if (g_iForwardReturn >= PLUGIN_HANDLED)
  475.     {
  476.         // Get player's origin
  477.         static origin2[3]
  478.         get_user_origin(victim, origin2)
  479.        
  480.         // Broken glass sound
  481.         static sound[SOUND_MAX_LENGTH]
  482.         ArrayGetString(g_szFrostGrenadeBreakSound, random_num(0, ArraySize(g_szFrostGrenadeBreakSound) - 1), sound, charsmax(sound))
  483.         emit_sound(victim, CHAN_BODY, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
  484.        
  485.         // Glass shatter
  486.         message_begin(MSG_PVS, SVC_TEMPENTITY, origin2)
  487.         write_byte(TE_BREAKMODEL) // TE id
  488.         write_coord(origin2[0]) // x
  489.         write_coord(origin2[1]) // y
  490.         write_coord(origin2[2]+24) // z
  491.         write_coord(16) // size x
  492.         write_coord(16) // size y
  493.         write_coord(16) // size z
  494.         write_coord(random_num(-50, 50)) // velocity x
  495.         write_coord(random_num(-50, 50)) // velocity y
  496.         write_coord(25) // velocity z
  497.         write_byte(10) // random velocity
  498.         write_short(g_iGlassSpr) // model
  499.         write_byte(10) // count
  500.         write_byte(25) // life
  501.         write_byte(0x01) // flags
  502.         message_end()
  503.        
  504.         return false
  505.     }
  506.    
  507.     // Freeze icon?
  508.     if (get_pcvar_num(g_pCvarFrostHudIcon))
  509.     {
  510.         message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, victim)
  511.         write_byte(0) // damage save
  512.         write_byte(0) // damage take
  513.         write_long(DMG_DROWN) // damage type - DMG_FREEZE
  514.         write_coord(0) // x
  515.         write_coord(0) // y
  516.         write_coord(0) // z
  517.         message_end()
  518.     }
  519.    
  520.     // Set frozen flag
  521.     g_bIsFrozen[victim] = true
  522.    
  523.     // Freeze sound
  524.     static sound[SOUND_MAX_LENGTH]
  525.     ArrayGetString(g_szFrostGrenadePlayerSound, random_num(0, ArraySize(g_szFrostGrenadePlayerSound) - 1), sound, charsmax(sound))
  526.     emit_sound(victim, CHAN_BODY, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
  527.    
  528.     // Add a blue tint to their screen
  529.     message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, victim)
  530.     write_short(0) // duration
  531.     write_short(0) // hold time
  532.     write_short(0x0004) // fade type
  533.     write_byte(0) // red
  534.     write_byte(50) // green
  535.     write_byte(200) // blue
  536.     write_byte(100) // alpha
  537.     message_end()
  538.    
  539.     // Update player entity rendering
  540.     ApplyFrozenRendering(victim)
  541.    
  542.     // Set a task to remove the freeze
  543.     set_task(get_pcvar_float(g_pCvarFrostDuration), "RemoveFreeze", victim+TASK_FROST_REMOVE)
  544.     return true
  545. }
  546.  
  547. ApplyFrozenRendering(id)
  548. {
  549.     // Get current rendering
  550.     new rendering_fx = get_entvar(id, var_renderfx)
  551.     new Float:rendering_color[3]
  552.     get_entvar(id, var_rendercolor, rendering_color)
  553.     new rendering_render = get_entvar(id, var_rendermode)
  554.     new Float:rendering_amount
  555.     get_entvar(id, var_renderamt, rendering_amount)
  556.    
  557.     // Already set, no worries...
  558.     if (rendering_fx == kRenderFxGlowShell && rendering_color[0] == 0.0 && rendering_color[1] == 100.0
  559.         && rendering_color[2] == 200.0 && rendering_render == kRenderNormal && rendering_amount == 25.0)
  560.         return
  561.    
  562.     // Save player's old rendering
  563.     g_iFrozenRenderingFx[id] = get_entvar(id, var_renderfx)
  564.     get_entvar(id, var_rendercolor, g_fFrozenRenderingColor[id])
  565.     g_iFrozenRenderingRender[id] = get_entvar(id, var_rendermode)
  566.     get_entvar(id, var_renderamt, g_fFrozenRenderingAmount[id])
  567.    
  568.     // Light blue glow while frozen
  569.     Set_Rendering(id, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
  570. }
  571.  
  572. // Remove freeze task
  573. public RemoveFreeze(taskid)
  574. {
  575.     // Remove frozen flag
  576.     g_bIsFrozen[ID_FROST_REMOVE] = false
  577.    
  578.     // Restore rendering
  579.     new iRed = floatround(g_fFrozenRenderingColor[ID_FROST_REMOVE][0]),
  580.     iGreen = floatround(g_fFrozenRenderingColor[ID_FROST_REMOVE][1]),
  581.     iBlue = floatround(g_fFrozenRenderingColor[ID_FROST_REMOVE][2])
  582.  
  583.     Set_Rendering(ID_FROST_REMOVE, g_iFrozenRenderingFx[ID_FROST_REMOVE], iRed, iGreen, iBlue, g_iFrozenRenderingRender[ID_FROST_REMOVE], floatround(g_fFrozenRenderingAmount[ID_FROST_REMOVE]))
  584.  
  585.     // Gradually remove screen's blue tint
  586.     message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, ID_FROST_REMOVE)
  587.     write_short((1<<12)) // duration
  588.     write_short(0) // hold time
  589.     write_short(0x0000) // fade type
  590.     write_byte(0) // red
  591.     write_byte(50) // green
  592.     write_byte(200) // blue
  593.     write_byte(100) // alpha
  594.     message_end()
  595.    
  596.     // Broken glass sound
  597.     static sound[SOUND_MAX_LENGTH]
  598.     ArrayGetString(g_szFrostGrenadeBreakSound, random_num(0, ArraySize(g_szFrostGrenadeBreakSound) - 1), sound, charsmax(sound))
  599.     emit_sound(ID_FROST_REMOVE, CHAN_BODY, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
  600.    
  601.     // Get player's origin
  602.     static origin[3]
  603.     get_user_origin(ID_FROST_REMOVE, origin)
  604.    
  605.     // Glass shatter
  606.     message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
  607.     write_byte(TE_BREAKMODEL) // TE id
  608.     write_coord(origin[0]) // x
  609.     write_coord(origin[1]) // y
  610.     write_coord(origin[2]+24) // z
  611.     write_coord(16) // size x
  612.     write_coord(16) // size y
  613.     write_coord(16) // size z
  614.     write_coord(random_num(-50, 50)) // velocity x
  615.     write_coord(random_num(-50, 50)) // velocity y
  616.     write_coord(25) // velocity z
  617.     write_byte(10) // random velocity
  618.     write_short(g_iGlassSpr) // model
  619.     write_byte(10) // count
  620.     write_byte(25) // life
  621.     write_byte(BREAK_GLASS) // flags
  622.     message_end()
  623.    
  624.     ExecuteForward(g_iForwards[FW_USER_UNFROZEN], g_iForwardReturn, ID_FROST_REMOVE)
  625. }
  626.  
  627. // Frost Grenade: Freeze Blast
  628. create_blast3(const Float:originF[3])
  629. {
  630.     // Smallest ring
  631.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  632.     write_byte(TE_BEAMCYLINDER) // TE id
  633.     engfunc(EngFunc_WriteCoord, originF[0]) // x
  634.     engfunc(EngFunc_WriteCoord, originF[1]) // y
  635.     engfunc(EngFunc_WriteCoord, originF[2]) // z
  636.     engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  637.     engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  638.     engfunc(EngFunc_WriteCoord, originF[2]+385.0) // z axis
  639.     write_short(g_iExplodeSpr) // sprite
  640.     write_byte(0) // startframe
  641.     write_byte(0) // framerate
  642.     write_byte(4) // life
  643.     write_byte(60) // width
  644.     write_byte(0) // noise
  645.     write_byte(0) // red
  646.     write_byte(100) // green
  647.     write_byte(200) // blue
  648.     write_byte(200) // brightness
  649.     write_byte(0) // speed
  650.     message_end()
  651.    
  652.     // Medium ring
  653.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  654.     write_byte(TE_BEAMCYLINDER) // TE id
  655.     engfunc(EngFunc_WriteCoord, originF[0]) // x
  656.     engfunc(EngFunc_WriteCoord, originF[1]) // y
  657.     engfunc(EngFunc_WriteCoord, originF[2]) // z
  658.     engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  659.     engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  660.     engfunc(EngFunc_WriteCoord, originF[2]+470.0) // z axis
  661.     write_short(g_iExplodeSpr) // sprite
  662.     write_byte(0) // startframe
  663.     write_byte(0) // framerate
  664.     write_byte(4) // life
  665.     write_byte(60) // width
  666.     write_byte(0) // noise
  667.     write_byte(0) // red
  668.     write_byte(100) // green
  669.     write_byte(200) // blue
  670.     write_byte(200) // brightness
  671.     write_byte(0) // speed
  672.     message_end()
  673.    
  674.     // Largest ring
  675.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  676.     write_byte(TE_BEAMCYLINDER) // TE id
  677.     engfunc(EngFunc_WriteCoord, originF[0]) // x
  678.     engfunc(EngFunc_WriteCoord, originF[1]) // y
  679.     engfunc(EngFunc_WriteCoord, originF[2]) // z
  680.     engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  681.     engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  682.     engfunc(EngFunc_WriteCoord, originF[2]+555.0) // z axis
  683.     write_short(g_iExplodeSpr) // sprite
  684.     write_byte(0) // startframe
  685.     write_byte(0) // framerate
  686.     write_byte(4) // life
  687.     write_byte(60) // width
  688.     write_byte(0) // noise
  689.     write_byte(0) // red
  690.     write_byte(100) // green
  691.     write_byte(200) // blue
  692.     write_byte(200) // brightness
  693.     write_byte(0) // speed
  694.     message_end()
  695. }
Mark wrote:
3 Weeks Ago
Post your Frost Nade Code.
NeVeR DiE | Zombie Escape
IP : 139.59.90.127:40000
Image

User avatar
Muhammet20
Veteran Member
Veteran Member
Turkey
Posts: 408
Joined: 1 Year Ago
Location: Turkey
Has thanked: 36 times
Been thanked: 5 times
Age: 15
Contact:

#26

Post by Muhammet20 » 1 Week Ago

karan wrote:
3 Weeks Ago
Mohamed Alaa wrote:
1 Month Ago
For the menu try:

Code: Select all

#include <zombie_escape>

native ze_is_user_nemesis(id)
native ze_set_user_nemesis(id, bool:set)

// Access to start nemesis menu
#define NEMESISMENU_ACCESS ADMIN_LEVEL_H
#define MENU_PAGE_PLAYERS g_menu_data[id]

const OFFSET_CSMENUCODE = 205

new g_menu_data[33]

public plugin_natives()
{
	register_native("ze_open_nemesis_menu", "native_ze_open_nemesis_menu", 1)
}

public plugin_init()
{
	register_plugin("[ZE] Nemesis Menu", "1.0", "Jack")
	register_concmd("ze_nemmenu", "cmd_nemmenu", NEMESISMENU_ACCESS)
}

public cmd_nemmenu(id, level, cid)
{
	if (!cmd_access(id, NEMESISMENU_ACCESS, cid, 0))
	{
		client_print(id, print_console, "You don't have access.")
		return PLUGIN_HANDLED
	}
	
	open_nemesis_menu(id)
	return PLUGIN_HANDLED
}

public open_nemesis_menu(id)
{
	static szMenu[250], szName[32]
	new iMenuID, index, buffer[2]

	iMenuID = menu_create("Make nemesis", "menu_player_list")

	for (index = 0; index <= get_member_game(m_nMaxPlayers); index++)
	{
		if (!is_user_alive(index))
			continue
		
		get_user_name(index, szName, charsmax(szName))
		formatex(szMenu, charsmax(szMenu), "%s \r[%s]", szName, ze_is_user_zombie(index) ? "Zombie" : "Human")

		buffer[0] = index
		buffer[1] = 0
		menu_additem(iMenuID, szMenu, buffer)
	}

	// Back - Next - Exit
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_BACK")
	menu_setprop(iMenuID, MPROP_BACKNAME, szMenu)
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_NEXT")
	menu_setprop(iMenuID, MPROP_NEXTNAME, szMenu)
	formatex(szMenu, charsmax(szMenu), "%L", id, "MENU_EXIT")
	menu_setprop(iMenuID, MPROP_EXITNAME, szMenu)
	
	MENU_PAGE_PLAYERS = min(MENU_PAGE_PLAYERS, menu_pages(iMenuID) - 1)
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	menu_display(id, iMenuID, MENU_PAGE_PLAYERS)
}

public menu_player_list(id, menuid, item)
{
	if (item == MENU_EXIT)
	{
		MENU_PAGE_PLAYERS = 0
		menu_destroy(menuid)
		open_nemesis_menu(id)
		return PLUGIN_HANDLED
	}
	
	// Remember player's menu page
	MENU_PAGE_PLAYERS = item / 7
	
	// Retrieve player id
	new buffer[2], dummy, player
	menu_item_getinfo(menuid, item, dummy, buffer, charsmax(buffer), _, _, dummy)
	player = buffer[0]
	
	if (is_user_alive(player))
	{
		new szName[2][32]
		get_user_name(id, szName[0], charsmax(szName))
		get_user_name(player, szName[1], charsmax(szName))
		ze_set_user_nemesis(player, !ze_is_user_nemesis(player))
		ze_colored_print(0, "!tAdmin !g%s!n: !g%s !tturned into %s!n.", szName[0], szName[1], ze_is_user_nemesis(player) ? "zombie" : "nemesis")
	}
	else
		ze_colored_print(id, "Player isn't alive.")
	
	menu_destroy(menuid)
	open_nemesis_menu(id)
	return PLUGIN_HANDLED
}

public native_ze_open_nemesis_menu(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
		return -1
	}

	open_nemesis_menu(id)
	return true
}
What do you mean by external skin?
now frost nade is not working for nemesis; can u fix it plz
Set ze_nemesis_freeze to 1 and the nemesis will be frozen when they attacked with frost nade
[Learning HTML coding language]
[Learning Unreal Engine 4]
[Learning Adobe programs]

User avatar
Muhammet20
Veteran Member
Veteran Member
Turkey
Posts: 408
Joined: 1 Year Ago
Location: Turkey
Has thanked: 36 times
Been thanked: 5 times
Age: 15
Contact:

#27

Post by Muhammet20 » 1 Week Ago

Finally someone made/fixed that addon
Nice work and thanks bro @Mohamed
[Learning HTML coding language]
[Learning Unreal Engine 4]
[Learning Adobe programs]

BandiT
Member
Member
Romania
Posts: 13
Joined: 1 Month Ago
Has thanked: 0
Been thanked: 0
Contact:

#28

Post by BandiT » 1 Week Ago

So it-s working now this nemesis plugin ?

karan
Mod Tester
Mod Tester
India
Posts: 61
Joined: 2 Years Ago
Location: India
Has thanked: 1 time
Been thanked: 3 times
Age: 22
Contact:

#29

Post by karan » 1 Week Ago

no round ambience + no countdown and major bug is core's rules means when players disconnect the server it spamming restart can anyone fix it?
NeVeR DiE | Zombie Escape
IP : 139.59.90.127:40000
Image

User avatar
Muhammet20
Veteran Member
Veteran Member
Turkey
Posts: 408
Joined: 1 Year Ago
Location: Turkey
Has thanked: 36 times
Been thanked: 5 times
Age: 15
Contact:

#30

Post by Muhammet20 » 6 Days Ago

karan wrote:
1 Week Ago
no round ambience + no countdown and major bug is core's rules means when players disconnect the server it spamming restart can anyone fix it?
Wow wait wait wait
WTF that so much
@Raheem + @Mohamed

We Need HELP here
[Learning HTML coding language]
[Learning Unreal Engine 4]
[Learning Adobe programs]

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests