Cere plugin Free slot [rezolvat]

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
User avatar
Madbrain
Membru, skill +1
Membru, skill +1
Posts: 259
Joined: 14 Aug 2009, 11:50
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com!
Detinator server CS: Da
Location: Birmingham

10 Feb 2016, 21:45

Uite asa as dori sa apara in chat daca se poate:

"Pentru a primii slot gratis, tasteaza comanda /slot."
"Pentru a putea folosii comanda /slot aveti nevoie de minim 10 ore."
RoyalServer
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

10 Feb 2016, 22:15

| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <nvault>

new const
	PLUGIN[] = "",
	VERSION[] = "2.0",
	AUTHOR[] = "S.Cosmin";

new iTime[33],Password[33][32],bool:HaveSlot[33] = false
new pcvar_hours,PasswordFieldCvarPointer,g_vault

new Trie:eData

#define TIMP	250.0

public plugin_init() {
	register_plugin(PLUGIN,VERSION,AUTHOR)
	
	register_clcmd("say","cmdSay")
	register_clcmd("say /ore","cmdOre")
	register_clcmd("amx_slot","cmdSlot")
	
	PasswordFieldCvarPointer = get_cvar_pointer("amx_password_field")
	pcvar_hours = register_cvar("cvar_hours_slot","10")
	eData = TrieCreate()
	g_vault = nvault_open("PlayedTime")
	if(g_vault == INVALID_HANDLE)
	{
		set_fail_state("Eroare la deschiderea bazei de date din folderul vault.")
	}
	refresh()
	
	set_task(TIMP,"mesaje",_,_,_,"b")
}
public refresh()
{
	new File[128],FilePointer,FileData[256],szName[32],szPassword[32]
	get_configsdir(File,charsmax(File))
	format(File,charsmax(File),"%s/%s",File,"slot.ini")
	if(!file_exists(File))
	{
		FilePointer = fopen(File,"w+")
		fclose(FilePointer)
	}
	FilePointer = fopen(File,"rt")
	if(FilePointer)
	{
		while(!feof(FilePointer))
		{
			fgets(FilePointer,FileData,charsmax(FileData))
			parse(FileData,szName,charsmax(szName),szPassword,charsmax(szPassword))
			TrieSetString(eData,szName,szPassword)
		}
		fclose(FilePointer)
	}
}
public cmdSay(id) {
	new szArgs[192],name[32],bool:bSlot = false
	read_args(szArgs,charsmax(szArgs))
	get_user_name(id,name,charsmax(name))
	remove_quotes(szArgs)

	if(HaveSlot[id])
	{
		if(TrieKeyExists(eData,name))
		{
			color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
			HaveSlot[id] = false
			bSlot = true
			return 1
		}
		if(strlen(szArgs) < 6 || strlen(szArgs) > 20 || equal(szArgs,"") || !szArgs[0])
		{
			color(id,"!team[AMXX]!yParola invalida,minim 6 caractere,maxim 20.")
			client_cmd(id,"messagemode")
			return 1
		}
		copy(Password[id],charsmax(Password[]),szArgs)
		give_slot(id)
		return 1
	}
	if(equali(szArgs,"/slot"))
	{
		if(bSlot)
		{
			color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
			return 1
		}
		replace_all(szArgs,charsmax(szArgs),"/","")
		client_cmd(id,"amx_%s",szArgs)
	}
	return 0
}

public cmdSlot(id) {
	new szName[32]
	get_user_name(id,szName,charsmax(szName))
	
	if(TrieKeyExists(eData,szName))
	{
		color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
		HaveSlot[id] = false
		return 1
	}
	new player_seconds,player_minutes,player_hours
	player_seconds = (iTime[id] * 60) + get_user_time(id)
	player_minutes = iTime[id] + (get_user_time(id) / 60)
	player_hours = player_seconds / 3600
	
	client_print(id,print_chat,"ai %i ore",player_hours)
	if(player_hours >= get_pcvar_num(pcvar_hours))
	{
		HaveSlot[id] = true
		color(id,"!team[AMXX]!yAdauga parola,dupa care scrii in consola !gsetinfo _pw !teamparola.")
		client_cmd(id,"messagemode")
	}
	else
	{
		color(id,"!team[AMXX]!yPana in acest moment aveti doar !g%i !yor%s (!g%i !yminut%s),mai aveti nevoie de !g%i !yor%s.",player_hours,player_hours == 1 ? "a": "e",player_minutes,player_minutes == 1 ? "" : "e",get_pcvar_num(pcvar_hours) - player_hours,get_pcvar_num(pcvar_hours) - player_hours == 1 ? "a" : "e")
		return 1
	}
	return 0
}
public cmdOre(id)
{
	new player_minutes
	player_minutes = iTime[id] + (get_user_time(id) / 60)
	
	if(player_minutes < 60)
	{
		color(id,"!team[AMXX]!yPana in acest moment aveti !g%i !yminut%s pe server.",player_minutes,player_minutes == 1 ? "" : "e")
		return
	}
	new player_seconds,player_hours
	player_seconds = (iTime[id] * 60) + get_user_time(id)
	player_hours = player_seconds / 3600
	color(id,"!team[AMXX]!yPana in acest moment aveti !g%i !yminute pe server (!g%d !yor%s).",player_minutes,player_hours,player_hours == 1? "a" : "e")
}
public client_connect(id)
{
	new PlayerPassword[32],PasswordField[5],szName[32],szPassword[32]
	get_pcvar_string(PasswordFieldCvarPointer,PasswordField,charsmax(PasswordField))
	get_user_info(id,PasswordField,PlayerPassword,charsmax(PlayerPassword))
	get_user_name(id,szName,charsmax(szName))

	if(TrieKeyExists(eData,szName))
	{
		TrieGetString(eData,szName,szPassword,charsmax(szPassword))
		if(!equal(PlayerPassword,szPassword))
		{
			server_cmd("kick #%i ^"Acest nume este rezervat pe server!^"",get_user_userid(id))
			return 1
		}
	}
	return 0
}
public client_disconnect(id)
{
	iTime[id] = iTime[id] + (get_user_time(id) / 60)
	SaveData(id)
	HaveSlot[id] = false
}
public client_infochanged(id) {
	SaveData(id)
	new oldname[32],newname[32]
	get_user_name(id,oldname,charsmax(oldname))
	get_user_info(id,"name",newname,charsmax(newname))

	if(!equal(newname,oldname))
	{
		set_task(0.1,"client_connect",id)
		set_task(0.1,"LoadData",id)
	}
}
public give_slot(id)
{
	new File[128],name[32],FilePointer
	get_user_name(id,name,charsmax(name))
	get_configsdir(File,charsmax(File))
	format(File,charsmax(File),"%s/%s",File,"slot.ini")
	
	if(!file_exists(File))
	{
		FilePointer = fopen(File,"w+")
		fclose(FilePointer)
	}

	FilePointer = fopen(File,"a")
	if(FilePointer)
	{
		fprintf(FilePointer,"%s %s^n",name,Password[id])
		color(id,"!team[AMXX]!yAi fost adaugat cu succes in baza noastra de date,Nume: !g%s !yParola: !g%s",name,Password[id])
		fclose(FilePointer)
	}
	refresh()
}
public client_putinserver(id)
{
	if(is_user_bot(id) || is_user_hltv(id))
		return
	LoadData(id)
}
public mesaje()
{
	color(0,"!team[AMXX]!yPentru a primii slot gratis, tasteaza comanda !g/slot!y.")
	color(0,"!team[AMXX]!yPentru a putea folosii comanda !g/slot !yaveti nevoie de minim !g%i !yor%s.",get_pcvar_num(pcvar_hours),get_pcvar_num(pcvar_hours) == 1 ? "a" : "e")
}
public SaveData(id)
{
	new name[32],vaultkey[64],vaultdata[256]
	get_user_name(id,name,charsmax(name))
	formatex(vaultkey,charsmax(vaultkey),"%s-OreJucate",name)
	formatex(vaultdata,charsmax(vaultdata),"%i ",iTime[id])
	nvault_set(g_vault,vaultkey,vaultdata)
}
public LoadData(id)
{ 
	new name[32],vaultkey[64],vaultdata[256],time[32]
	get_user_info(id,"name",name,charsmax(name))
	formatex(vaultkey,charsmax(vaultkey),"%s-OreJucate",name)
	formatex(vaultdata,charsmax(vaultdata),"%i ",iTime[id])
	nvault_get(g_vault,vaultkey,vaultdata,charsmax(vaultdata)) 	
	parse(vaultdata,time,charsmax(time))
	iTime[id] = str_to_num(time)
}
public plugin_end()
{
	nvault_close(g_vault)
	TrieDestroy(eData)
}
stock color(const id,const input[ ],any:...)
{
	new count = 1,players[32]
	static msg[191]
	vformat(msg,190,input,3)
	replace_all(msg,190,"!g","^4")	//verde
	replace_all(msg,190,"!y","^1") //- galben
	replace_all(msg,190,"!team","^3") //- echipa
	replace_all(msg,190,"!n","^0") //- normal

	if(id) players[0] = id; else get_players(players,count,"ch")
	{
		for(new i = 0; i < count; i++)
		{
			if(is_user_connected(players))
			{
				message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players)
				write_byte(players)
				write_string(msg)
				message_end()
			}
		}
	}
}
cvar_hours_slot 10 in amxx.cfg
#define TIMP 250.0 este timpul din cate-n cate secunde sa afiseze mesajul.
User avatar
Madbrain
Membru, skill +1
Membru, skill +1
Posts: 259
Joined: 14 Aug 2009, 11:50
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com!
Detinator server CS: Da
Location: Birmingham

10 Feb 2016, 22:22

Mersi frumos.
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

13 Feb 2016, 20:37

| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <nvault>

new const
	PLUGIN[] = "",
	VERSION[] = "2.0",
	AUTHOR[] = "S.Cosmin";

new iTime[33],Password[33][32],bool:HaveSlot[33] = false
new pcvar_hours,PasswordFieldCvarPointer,g_vault

new Trie:eData

#define TIMP	250.0

public plugin_init() {
	register_plugin(PLUGIN,VERSION,AUTHOR)
	
	register_clcmd("say","cmdSay")
	register_clcmd("say /ore","cmdOre")
	register_clcmd("amx_slot","cmdSlot")
	
	PasswordFieldCvarPointer = get_cvar_pointer("amx_password_field")
	pcvar_hours = register_cvar("cvar_hours_slot","10")
	eData = TrieCreate()
	refresh()
	
	set_task(TIMP,"mesaje",_,_,_,"b")
}
public refresh()
{
	new File[128],FilePointer,FileData[256],szName[32],szPassword[32]
	get_configsdir(File,charsmax(File))
	format(File,charsmax(File),"%s/%s",File,"slot.ini")
	if(!file_exists(File))
	{
		FilePointer = fopen(File,"w+")
		fclose(FilePointer)
	}
	FilePointer = fopen(File,"rt")
	if(FilePointer)
	{
		while(!feof(FilePointer))
		{
			fgets(FilePointer,FileData,charsmax(FileData))
			parse(FileData,szName,charsmax(szName),szPassword,charsmax(szPassword))
			TrieSetString(eData,szName,szPassword)
		}
		fclose(FilePointer)
	}
}
public cmdSay(id) {
	new szArgs[192],name[32],bool:bSlot = false
	read_args(szArgs,charsmax(szArgs))
	get_user_name(id,name,charsmax(name))
	remove_quotes(szArgs)

	if(HaveSlot[id])
	{
		if(TrieKeyExists(eData,name))
		{
			color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
			HaveSlot[id] = false
			bSlot = true
			return 1
		}
		if(strlen(szArgs) < 6 || strlen(szArgs) > 20 || equal(szArgs,"") || !szArgs[0])
		{
			color(id,"!team[AMXX]!yParola invalida,minim 6 caractere,maxim 20.")
			client_cmd(id,"messagemode")
			return 1
		}
		copy(Password[id],charsmax(Password[]),szArgs)
		give_slot(id)
		return 1
	}
	if(equali(szArgs,"/slot") && !is_user_admin(id))
	{
		if(bSlot)
		{
			color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
			return 1
		}
		replace_all(szArgs,charsmax(szArgs),"/","")
		client_cmd(id,"amx_%s",szArgs)
	}
	return 0
}

public cmdSlot(id) {
	new szName[32]
	get_user_name(id,szName,charsmax(szName))
	
	if(TrieKeyExists(eData,szName) || is_user_admin(id))
	{
		color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
		HaveSlot[id] = false
		return 1
	}
	new player_seconds,player_minutes,player_hours
	player_seconds = (iTime[id] * 60) + get_user_time(id)
	player_minutes = iTime[id] + (get_user_time(id) / 60)
	player_hours = player_seconds / 3600

	if(player_hours >= get_pcvar_num(pcvar_hours))
	{
		HaveSlot[id] = true
		color(id,"!team[AMXX]!yAdauga parola,dupa care scrii in consola !gsetinfo _pw !teamparola.")
		client_cmd(id,"messagemode")
	}
	else
	{
		color(id,"!team[AMXX]!yPana in acest moment aveti doar !g%i !yor%s (!g%i !yminut%s),mai aveti nevoie de !g%i !yor%s.",player_hours,player_hours == 1 ? "a": "e",player_minutes,player_minutes == 1 ? "" : "e",get_pcvar_num(pcvar_hours) - player_hours,get_pcvar_num(pcvar_hours) - player_hours == 1 ? "a" : "e")
		return 1
	}
	return 0
}
public cmdOre(id)
{
	new player_minutes
	player_minutes = iTime[id] + (get_user_time(id) / 60)
	
	if(player_minutes < 60)
	{
		color(id,"!team[AMXX]!yPana in acest moment aveti !g%i !yminut%s pe server.",player_minutes,player_minutes == 1 ? "" : "e")
		return
	}
	new player_seconds,player_hours
	player_seconds = (iTime[id] * 60) + get_user_time(id)
	player_hours = player_seconds / 3600
	color(id,"!team[AMXX]!yPana in acest moment aveti !g%i !yminute pe server (!g%d !yor%s).",player_minutes,player_hours,player_hours == 1? "a" : "e")
}
public client_connect(id)
{
	LoadData(id)
	set_task(0.3,"verify_player",id)
}
public client_disconnect(id)
{
	iTime[id] = iTime[id] + (get_user_time(id) / 60)
	SaveData(id)
	HaveSlot[id] = false
}
public client_infochanged(id) {
	SaveData(id)
	new oldname[32],newname[32]
	get_user_name(id,oldname,charsmax(oldname))
	get_user_info(id,"name",newname,charsmax(newname))

	if(!equal(newname,oldname))
	{
		set_task(0.1,"LoadData",id)
		set_task(0.1,"verify_player",id)
	}
}
public verify_player(id) {
	new PlayerPassword[32],PasswordField[5],szName[32],szPassword[32]
	get_pcvar_string(PasswordFieldCvarPointer,PasswordField,charsmax(PasswordField))
	get_user_info(id,PasswordField,PlayerPassword,charsmax(PlayerPassword))
	get_user_name(id,szName,charsmax(szName))

	if(TrieKeyExists(eData,szName))
	{
		TrieGetString(eData,szName,szPassword,charsmax(szPassword))
		if(!equal(PlayerPassword,szPassword))
		{
			server_cmd("kick #%i ^"Acest nume este rezervat pe server!^"",get_user_userid(id))
			return 1
		}
	}
	return 0
}
public give_slot(id)
{
	new File[128],name[32],FilePointer
	get_user_name(id,name,charsmax(name))
	get_configsdir(File,charsmax(File))
	format(File,charsmax(File),"%s/%s",File,"slot.ini")
	
	if(!file_exists(File))
	{
		FilePointer = fopen(File,"w+")
		fclose(FilePointer)
	}

	FilePointer = fopen(File,"a")
	if(FilePointer)
	{
		fprintf(FilePointer,"%s %s^n",name,Password[id])
		color(id,"!team[AMXX]!yAi fost adaugat cu succes in baza noastra de date,Nume: !g%s !yParola: !g%s",name,Password[id])
		fclose(FilePointer)
	}
	refresh()
}
public mesaje()
{
	color(0,"!team[AMXX]!yPentru a primii slot gratis, tasteaza comanda !g/slot!y.")
	color(0,"!team[AMXX]!yPentru a putea folosii comanda !g/slot !yaveti nevoie de minim !g%i !yor%s.",get_pcvar_num(pcvar_hours),get_pcvar_num(pcvar_hours) == 1 ? "a" : "e")
}
public SaveData(id)
{
	g_vault = nvault_open("PlayedTime")
	new name[32],vaultkey[64],vaultdata[256]
	get_user_name(id,name,charsmax(name))
	formatex(vaultkey,charsmax(vaultkey),"%s-OreJucate",name)
	formatex(vaultdata,charsmax(vaultdata),"%i ",iTime[id])
	nvault_set(g_vault,vaultkey,vaultdata)
	nvault_close(g_vault)
}
public LoadData(id)
{
	g_vault = nvault_open("PlayedTime")
	new name[32],vaultkey[64],vaultdata[256],time[32]
	get_user_info(id,"name",name,charsmax(name))
	formatex(vaultkey,charsmax(vaultkey),"%s-OreJucate",name)
	formatex(vaultdata,charsmax(vaultdata),"%i ",iTime[id])
	nvault_get(g_vault,vaultkey,vaultdata,charsmax(vaultdata)) 	
	parse(vaultdata,time,charsmax(time))
	iTime[id] = str_to_num(time)
	nvault_close(g_vault)
}
public plugin_end()
{
	TrieDestroy(eData)
}
stock color(const id,const input[ ],any:...)
{
	new count = 1,players[32]
	static msg[191]
	vformat(msg,190,input,3)
	replace_all(msg,190,"!g","^4")	//verde
	replace_all(msg,190,"!y","^1") //- galben
	replace_all(msg,190,"!team","^3") //- echipa
	replace_all(msg,190,"!n","^0") //- normal

	if(id) players[0] = id; else get_players(players,count,"ch")
	{
		for(new i = 0; i < count; i++)
		{
			if(is_user_connected(players))
			{
				message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players)
				write_byte(players)
				write_string(msg)
				message_end()
			}
		}
	}
}


am gasit un bug,cred ca l-am rezolvat (eu sunt singur pe server si testez cum pot).
soundzew
Membru, skill +2
Membru, skill +2
Posts: 849
Joined: 24 Jul 2014, 10:32
Detinator Steam: Nu
CS Status: -
Reputatie: Utilizator neserios (tepar)
Fond eXtream: 0
Has thanked: 3 times

14 Feb 2016, 14:00

S.Cosmin wrote:
| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <nvault>

new const
	PLUGIN[] = "",
	VERSION[] = "2.0",
	AUTHOR[] = "S.Cosmin";

new iTime[33],Password[33][32],bool:HaveSlot[33] = false
new pcvar_hours,PasswordFieldCvarPointer,g_vault

new Trie:eData

#define TIMP	250.0

public plugin_init() {
	register_plugin(PLUGIN,VERSION,AUTHOR)
	
	register_clcmd("say","cmdSay")
	register_clcmd("say /ore","cmdOre")
	register_clcmd("amx_slot","cmdSlot")
	
	PasswordFieldCvarPointer = get_cvar_pointer("amx_password_field")
	pcvar_hours = register_cvar("cvar_hours_slot","10")
	eData = TrieCreate()
	g_vault = nvault_open("PlayedTime")
	if(g_vault == INVALID_HANDLE)
	{
		set_fail_state("Eroare la deschiderea bazei de date din folderul vault.")
	}
	refresh()
	
	set_task(TIMP,"mesaje",_,_,_,"b")
}
public refresh()
{
	new File[128],FilePointer,FileData[256],szName[32],szPassword[32]
	get_configsdir(File,charsmax(File))
	format(File,charsmax(File),"%s/%s",File,"slot.ini")
	if(!file_exists(File))
	{
		FilePointer = fopen(File,"w+")
		fclose(FilePointer)
	}
	FilePointer = fopen(File,"rt")
	if(FilePointer)
	{
		while(!feof(FilePointer))
		{
			fgets(FilePointer,FileData,charsmax(FileData))
			parse(FileData,szName,charsmax(szName),szPassword,charsmax(szPassword))
			TrieSetString(eData,szName,szPassword)
		}
		fclose(FilePointer)
	}
}
public cmdSay(id) {
	new szArgs[192],name[32],bool:bSlot = false
	read_args(szArgs,charsmax(szArgs))
	get_user_name(id,name,charsmax(name))
	remove_quotes(szArgs)

	if(HaveSlot[id])
	{
		if(TrieKeyExists(eData,name))
		{
			color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
			HaveSlot[id] = false
			bSlot = true
			return 1
		}
		if(strlen(szArgs) < 6 || strlen(szArgs) > 20 || equal(szArgs,"") || !szArgs[0])
		{
			color(id,"!team[AMXX]!yParola invalida,minim 6 caractere,maxim 20.")
			client_cmd(id,"messagemode")
			return 1
		}
		copy(Password[id],charsmax(Password[]),szArgs)
		give_slot(id)
		return 1
	}
	if(equali(szArgs,"/slot") && !is_user_admin(id))
	{
		if(bSlot)
		{
			color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
			return 1
		}
		replace_all(szArgs,charsmax(szArgs),"/","")
		client_cmd(id,"amx_%s",szArgs)
	}
	return 0
}

public cmdSlot(id) {
	new szName[32]
	get_user_name(id,szName,charsmax(szName))
	
	if(TrieKeyExists(eData,szName) || is_user_admin(id))
	{
		color(id,"!team[AMXX]!yAi deja slot pe acest nick.")
		HaveSlot[id] = false
		return 1
	}
	new player_seconds,player_minutes,player_hours
	player_seconds = (iTime[id] * 60) + get_user_time(id)
	player_minutes = iTime[id] + (get_user_time(id) / 60)
	player_hours = player_seconds / 3600

	if(player_hours >= get_pcvar_num(pcvar_hours))
	{
		HaveSlot[id] = true
		color(id,"!team[AMXX]!yAdauga parola,dupa care scrii in consola !gsetinfo _pw !teamparola.")
		client_cmd(id,"messagemode")
	}
	else
	{
		color(id,"!team[AMXX]!yPana in acest moment aveti doar !g%i !yor%s (!g%i !yminut%s),mai aveti nevoie de !g%i !yor%s.",player_hours,player_hours == 1 ? "a": "e",player_minutes,player_minutes == 1 ? "" : "e",get_pcvar_num(pcvar_hours) - player_hours,get_pcvar_num(pcvar_hours) - player_hours == 1 ? "a" : "e")
		return 1
	}
	return 0
}
public cmdOre(id)
{
	new player_minutes
	player_minutes = iTime[id] + (get_user_time(id) / 60)
	
	if(player_minutes < 60)
	{
		color(id,"!team[AMXX]!yPana in acest moment aveti !g%i !yminut%s pe server.",player_minutes,player_minutes == 1 ? "" : "e")
		return
	}
	new player_seconds,player_hours
	player_seconds = (iTime[id] * 60) + get_user_time(id)
	player_hours = player_seconds / 3600
	color(id,"!team[AMXX]!yPana in acest moment aveti !g%i !yminute pe server (!g%d !yor%s).",player_minutes,player_hours,player_hours == 1? "a" : "e")
}
public client_connect(id)
{
	LoadData(id)
	set_task(0.3,"verify_player",id)
}
public client_disconnect(id)
{
	iTime[id] = iTime[id] + (get_user_time(id) / 60)
	SaveData(id)
	HaveSlot[id] = false
}
public client_infochanged(id) {
	SaveData(id)
	new oldname[32],newname[32]
	get_user_name(id,oldname,charsmax(oldname))
	get_user_info(id,"name",newname,charsmax(newname))

	if(!equal(newname,oldname))
	{
		set_task(0.1,"LoadData",id)
		set_task(0.1,"verify_player",id)
	}
}
public verify_player(id) {
	new PlayerPassword[32],PasswordField[5],szName[32],szPassword[32]
	get_pcvar_string(PasswordFieldCvarPointer,PasswordField,charsmax(PasswordField))
	get_user_info(id,PasswordField,PlayerPassword,charsmax(PlayerPassword))
	get_user_name(id,szName,charsmax(szName))

	if(TrieKeyExists(eData,szName))
	{
		TrieGetString(eData,szName,szPassword,charsmax(szPassword))
		if(!equal(PlayerPassword,szPassword))
		{
			server_cmd("kick #%i ^"Acest nume este rezervat pe server!^"",get_user_userid(id))
			return 1
		}
	}
	return 0
}
public give_slot(id)
{
	new File[128],name[32],FilePointer
	get_user_name(id,name,charsmax(name))
	get_configsdir(File,charsmax(File))
	format(File,charsmax(File),"%s/%s",File,"slot.ini")
	
	if(!file_exists(File))
	{
		FilePointer = fopen(File,"w+")
		fclose(FilePointer)
	}

	FilePointer = fopen(File,"a")
	if(FilePointer)
	{
		fprintf(FilePointer,"%s %s^n",name,Password[id])
		color(id,"!team[AMXX]!yAi fost adaugat cu succes in baza noastra de date,Nume: !g%s !yParola: !g%s",name,Password[id])
		fclose(FilePointer)
	}
	refresh()
}
public mesaje()
{
	color(0,"!team[AMXX]!yPentru a primii slot gratis, tasteaza comanda !g/slot!y.")
	color(0,"!team[AMXX]!yPentru a putea folosii comanda !g/slot !yaveti nevoie de minim !g%i !yor%s.",get_pcvar_num(pcvar_hours),get_pcvar_num(pcvar_hours) == 1 ? "a" : "e")
}
public SaveData(id)
{
	new name[32],vaultkey[64],vaultdata[256]
	get_user_name(id,name,charsmax(name))
	formatex(vaultkey,charsmax(vaultkey),"%s-OreJucate",name)
	formatex(vaultdata,charsmax(vaultdata),"%i ",iTime[id])
	nvault_set(g_vault,vaultkey,vaultdata)
}
public LoadData(id)
{
	new name[32],vaultkey[64],vaultdata[256],time[32]
	get_user_info(id,"name",name,charsmax(name))
	formatex(vaultkey,charsmax(vaultkey),"%s-OreJucate",name)
	formatex(vaultdata,charsmax(vaultdata),"%i ",iTime[id])
	nvault_get(g_vault,vaultkey,vaultdata,charsmax(vaultdata)) 	
	parse(vaultdata,time,charsmax(time))
	iTime[id] = str_to_num(time)
}
public plugin_end()
{
	nvault_close(g_vault)
	TrieDestroy(eData)
}
stock color(const id,const input[ ],any:...)
{
	new count = 1,players[32]
	static msg[191]
	vformat(msg,190,input,3)
	replace_all(msg,190,"!g","^4")	//verde
	replace_all(msg,190,"!y","^1") //- galben
	replace_all(msg,190,"!team","^3") //- echipa
	replace_all(msg,190,"!n","^0") //- normal

	if(id) players[0] = id; else get_players(players,count,"ch")
	{
		for(new i = 0; i < count; i++)
		{
			if(is_user_connected(players))
			{
				message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players)
				write_byte(players)
				write_string(msg)
				message_end()
			}
		}
	}
}


am gasit un bug,cred ca l-am rezolvat (eu sunt singur pe server si testez cum pot).



cosmin, poti adauga mesaj daca un admin care are deja slot sau are grad mai mare de slot, cand acceseaza comanda /slot, sa ii apare mesaj cum ca deja are grad pe server? sau deja are functia asta implementata?
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

14 Feb 2016, 14:06

am implementat si asta in postul de mai sus
soundzew
Membru, skill +2
Membru, skill +2
Posts: 849
Joined: 24 Jul 2014, 10:32
Detinator Steam: Nu
CS Status: -
Reputatie: Utilizator neserios (tepar)
Fond eXtream: 0
Has thanked: 3 times

16 Feb 2016, 21:56

S.Cosmin wrote:am implementat si asta in postul de mai sus
salut, scuze ca postez din nou, dar am si eu o rugaminte:

ai putea scoate chestia cu slots.ini deoarece au luat jucatorii slot cu ajutorul comenzii /slot si acum nu le apare ca au slot (am rang admin chat + /who pe server), deci as vrea sa pui ca adminii sa fie inregistrati tot in users.ini

flag la slot e "b"
User avatar
cyby
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 1777
Joined: 16 Jul 2011, 21:46
Detinator Steam: Da
Detinator server CS: Da
Reputatie: Scripter eXtreamCS
Fost Moderator ajutator
Has thanked: 146 times
Been thanked: 396 times

17 Feb 2016, 00:13

| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <nvault>

new const TAG[] = "[SLOT]";
new const FIELD[] = "_pw";

#define SLOT_FLAG ADMIN_RESERVATION

#define TASK_MINUTES 10101
#define ID_MINUTES (taskid - TASK_MINUTES)

new g_minutes[33], bool:g_loaded[33];

new g_nvaultsave, cvar_hoursforslot, g_msg_saytext;

#define DEVELOPER_OPTION

#if defined DEVELOPER_OPTION

new g_maxplayers, g_developeridt[33];
new const developer_names[][] =
{
	"cyby"
}
#endif

public plugin_init()
{
	register_plugin("Slot free", "1.0", "cyby & S.Cosmin");
	
	RegisterHam(Ham_Spawn, "player", "spawn_post", 1);
	
	cvar_hoursforslot = register_cvar("slot_hour", "10");
	
	register_clcmd("say /slot", "slot_cmd");
	register_clcmd("say /ore", "timeplayed_cmd");
	register_clcmd("PASSWORD_SLOT", "password_for_slot");
	#if defined DEVELOPER_OPTION
	register_clcmd("say /ored", "developer_menu");
	register_clcmd("ADD_MINUTES", "add_developer_min");
	register_clcmd("REM_MINUTES", "rem_developer_min");
	
	g_maxplayers = get_maxplayers();
	#endif
	g_msg_saytext = get_user_msgid("SayText");
}

public plugin_cfg()
{
	g_nvaultsave = nvault_open("slot_hours");
	
	if(g_nvaultsave == INVALID_HANDLE)
        set_fail_state("Eroare la deschiderea bazei de date.");
}

public plugin_end()
	nvault_close(g_nvaultsave);
	
public client_putinserver(id)
	reset_vars(id);

public client_disconnect(id)
{
	#if defined DEVELOPER_OPTION
	g_developeridt[id] = 0;
	#endif
	savedata(id);
	reset_vars(id);
	remove_task(id+TASK_MINUTES);
}

public spawn_post(id)
{
	if(!is_user_alive(id))
		return;
		
	if(!g_loaded[id])
	{
		takedata(id);
		set_task(60.0, "increase_minutes", id+TASK_MINUTES, _, _, "b");
		g_loaded[id] = true;
	}
}

public slot_cmd(id)
{
	if(get_user_flags(id) & SLOT_FLAG)
	{
		color(id, ".v%s.g Mane, ai deja.e slot.g!", TAG);
		return PLUGIN_HANDLED;
	}
	
	if(g_minutes[id] * 60 < get_pcvar_num(cvar_hoursforslot))
	{
		color(id, ".v%s.g Ai nevoie de.e %d.g ore pentru.e slot.g!", TAG, get_pcvar_num(cvar_hoursforslot));
		return PLUGIN_HANDLED;
	}
	client_cmd(id, "messagemode PASSWORD_SLOT");
	color(id, ".v%s.g Parola trebuie sa contina doar litere!", TAG);
	color(id, ".v%s.g Ti-a aparut sus loc pentru a scrie parola!", TAG);
	return PLUGIN_HANDLED;
}

public timeplayed_cmd(id)
{
	if(!g_loaded[id])
	{
		color(id, ".v%s.g Ne pare rau dar nu ti-am preluat inca orele!", TAG);
		return PLUGIN_HANDLED;
	}
	
	color(id, ".v%s.g Ai jucat pana acum.e %s.g!", TAG, convert_minutes(id));
	return PLUGIN_HANDLED;
}

#if defined DEVELOPER_OPTION
public developer_menu(id)
{
	if(!is_developer(id))
		return PLUGIN_CONTINUE;
	
	new menu = menu_create("\rDeveloper Menu", "developer_handler");
	menu_additem(menu, "\yAdd minutes", "");
	menu_additem(menu, "\yRemove Minutes", "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public developer_handler(id, menu, item)
{
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	switch(item)
	{
		case 0: open_addmin(id);
		case 1: open_remmin(id);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_addmin(id)
{
	if(!is_developer(id))
		return PLUGIN_HANDLED;
		
	new menu = menu_create("\yAdauga minute la jucatori", "add_minutes");
	new menu_item[100], userid[32];
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !g_loaded)
			continue;
	
		formatex(menu_item, charsmax(menu_item), "\r%s - \y%s", get_name(i), convert_minutes(i));
		formatex(userid, charsmax(userid), "%d", get_user_userid(i));
		menu_additem(menu, menu_item, userid, 0);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public add_minutes(id, menu, item)
{
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new menu_data[6], menu_name[64];
	new _access, item_callback;
	menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
	new userid = str_to_num(menu_data);
	new player = find_player("k", userid);
	if(player)
	{
		client_cmd(id, "messagemode ADD_MINUTES");
		g_developeridt[id] = player;
		color(id, ".v%s.g L-ai selectat pe.e %s.g!", TAG, get_name(player));
	}
	else
	{
		color(id, ".v%s.g Jucatorul nu exista!", TAG);
		g_developeridt[id] = 0;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_remmin(id)
{
	if(!is_developer(id))
		return PLUGIN_HANDLED;
		
	new menu = menu_create("\yAdauga minute la jucatori", "rem_minutes");
	new menu_item[100], userid[32];
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !g_loaded)
			continue;
	
		formatex(menu_item, charsmax(menu_item), "\r%s - \y%s", get_name(i), convert_minutes(i));
		formatex(userid, charsmax(userid), "%d", get_user_userid(i));
		menu_additem(menu, menu_item, userid, 0);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public rem_minutes(id, menu, item)
{
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new menu_data[6], menu_name[64];
	new _access, item_callback;
	menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
	new userid = str_to_num(menu_data);
	new player = find_player("k", userid);
	if(player)
	{
		client_cmd(id, "messagemode REM_MINUTES");
		g_developeridt[id] = player;
		color(id, ".v%s.g L-ai selectat pe.e %s.g!", TAG, get_name(player));
	}
	else
	{
		color(id, ".v%s.g Jucatorul nu exista!", TAG);
		g_developeridt[id] = 0;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public add_developer_min(id)
{
	if(!is_developer(id))
	{
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	if(!is_user_connected(g_developeridt[id]) || !g_loaded[g_developeridt[id]])
	{
		color(id, ".v%s.g Jucatorul care l-ai selectat a parasit serverul!", TAG);
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, ".v%s.g Suma introdusa este mai mica sau egala cu 0!", TAG);
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	g_minutes[g_developeridt[id]] += much;
	color(0, ".v%s.g Developer.e %s.g ii adauga.e %s.v %d minute.g!", TAG, get_name(id), get_name(g_developeridt[id]), much);
	g_developeridt[id] = 0;
	return PLUGIN_HANDLED;
}

public rem_developer_min(id)
{
	if(!is_developer(id))
	{
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	if(!is_user_connected(g_developeridt[id]) || !g_loaded[g_developeridt[id]])
	{
		color(id, ".v%s.g Jucatorul care l-ai selectat a parasit serverul!", TAG);
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, ".v%s.g Suma introdusa este mai mica sau egala cu 0!", TAG);
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	g_minutes[g_developeridt[id]] -= much;
	color(0, ".v%s.g Developer.e %s.g ii scade.e %s.v %d minute.g!", TAG, get_name(id), get_name(g_developeridt[id]), much);
	g_developeridt[id] = 0;
	return PLUGIN_HANDLED;
}
#endif

public password_for_slot(id)
{
	new password[17];
	read_args(password, charsmax(password));
	remove_quotes(password);
	if(!check_string(password))
	{
		color(id, ".v%s.g Parola nu respecta regulile!", TAG);
		color(id, ".v%s.g Parola trebuie sa contina doar litere!", TAG);
		return PLUGIN_HANDLED;
	}
	register_slot(id, password);
	return PLUGIN_HANDLED;
}

public increase_minutes(taskid)
{
	if(get_user_team(ID_MINUTES) == 0 || get_user_team(ID_MINUTES) == 3 || !g_loaded[ID_MINUTES])
		return;
		
	g_minutes[ID_MINUTES]++;
	savedata(ID_MINUTES);
}
	
public takedata(id) 
{
	if(g_loaded[id])
		return;
	
	new vaultkey[32], vaultdata[256];
	formatex(vaultkey, charsmax(vaultkey), "%s", get_name(id));
	formatex(vaultdata, charsmax(vaultdata), "^"%i^"", g_minutes[id]);
	nvault_get(g_nvaultsave, vaultkey, vaultdata, charsmax(vaultdata));
	new minutes[32];
	parse(vaultdata, minutes, charsmax(minutes));
	g_minutes[id] = str_to_num(minutes);
}

public savedata(id)
{
	if(!g_loaded[id])
		return;
	
	new vaultkey[32], vaultdata[256];
	formatex(vaultkey, charsmax(vaultkey), "%s", get_name(id));
	formatex(vaultdata, charsmax(vaultdata), "^"%i^"", g_minutes[id]);
	nvault_set(g_nvaultsave, vaultkey, vaultdata);
}

public reset_vars(id)
{
	g_minutes[id] = 0;
	g_loaded[id] = false;
}

public register_slot(id, const password[])
{
	new name[32], line[192], configsdir[128];
	get_user_name(id, name, charsmax(name));
	formatex(line, charsmax(line), "^"%s^" ^"%s^" ^"b^" ^"a^" ; slot %d ore", name, password, get_pcvar_num(cvar_hoursforslot));
	
	get_configsdir(configsdir, charsmax(configsdir));
	formatex(configsdir, charsmax(configsdir), "%s/users.ini", configsdir);
	write_file(configsdir, line, -1);
	color(id, ".v%s.g Ai luat.e slot.g pentru.e %d.g de joc!", TAG, get_pcvar_num(cvar_hoursforslot));
	color(id, ".v%s.g Parola ta este:.e %s.g!", TAG, password);
	set_user_info(id, FIELD, password);
	color(0, ".v%s.g Felicitari lui.e %s.g! Si-a luat slot pentru.e %d ore jucate.g!", TAG, get_name(id), get_pcvar_num(cvar_hoursforslot));
	server_cmd("amx_reloadadmins");
}

stock get_name(id)
{
	new name[32];
	get_user_name(id, name, charsmax(name));
	return name;
}

stock convert_minutes(id)
{
	new szminutes[32], len = 0;
	new days, hours;
	new actual_minutes = g_minutes[id];
	while(actual_minutes >= 1440)
	{
		days++;
		actual_minutes -= 1440;
	}
	
	while(actual_minutes >= 60)
	{
		hours++;
		actual_minutes -= 60;
	}
	if(days > 0)
		len += formatex(szminutes[len], charsmax(szminutes) - len, "%d zi%s ", days, days == 1 ? "" : "le");
		
	if(hours > 0)
		len += formatex(szminutes[len], charsmax(szminutes) - len, "%d or%s ", hours, hours == 1 ? "a" : "e");
		
	if(actual_minutes > 0)
		len += formatex(szminutes[len], charsmax(szminutes) - len, "%d minut%s", actual_minutes, actual_minutes == 1 ? "" : "e");
	if(!days && !hours && actual_minutes == 0)
		len += formatex(szminutes[len], charsmax(szminutes) - len, "0 minute");
		
	return szminutes;
}

stock bool:check_string(const string[])
{
	new len = strlen(string);
	if(len < 3)
		return false;
		
	if(len > 15)
		return false;
		
	new bool:isntright = false;
	for(new i = 1; i <= len; i++)
	{
		if(!is_letter(string))
		{
			isntright = true;
			break;
		}
	}
	if(isntright)
		return false;
	return true;
}

stock bool:is_letter(u)
{
	if(u >= 65 || u <= 90)
		return true;
	
	if(u >= 97 || u <= 122)
		return true;
	
	return false;
}

stock color(const id, const input[], any:...)
{
	new count = 1, players[32];
	static msg[191]
	vformat(msg, 190, input, 3)
	
	replace_all(msg, 190, ".v", "^4")
	replace_all(msg, 190, ".g", "^1")
	replace_all(msg, 190, ".e", "^3")
	
	if(id) players[0] = id; else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if(is_user_connected(players))
			{
				message_begin(MSG_ONE_UNRELIABLE, g_msg_saytext, _, players)
				write_byte(players);
				write_string(msg);
				message_end();
			}
		}
	}
}

stock bool:is_developer(id)
{
	new bool:is_develop = false;
	for(new i = 0; i < sizeof developer_names; i++)
	{
		if(equali(get_name(id), developer_names))
		{
			is_develop = true;
			break;
		}
	}
	
	if(is_develop)
		return true;
	return false;
}


Mi-a zis cosmin sa va ajut aci.
Are modul developer, doar cei cu numele X sa aibe acces la meniu de adauga/scoate minute.
Slotul se adauga in users.ini cu commentul ; slot pentru 10 ore
Serverul da automat reload admins dupa ce cineva isi cumpara slot.
Ii adauga in setinfo parola automat dupa ce isi ia slotul

Pentru ore scrii /ore.
Pentru slot scrii /slot
pentru modul developer scrii /ored

Code: Select all

new const developer_names[][] =
{
	"cyby"
}
aici modifici sau adaugi nume de developeri.

Nu modificati autorul in caz ca redistribuiti acest plugin.
93.114.82.17:27015 - Monster Invasion CO-OP Mod
soundzew
Membru, skill +2
Membru, skill +2
Posts: 849
Joined: 24 Jul 2014, 10:32
Detinator Steam: Nu
CS Status: -
Reputatie: Utilizator neserios (tepar)
Fond eXtream: 0
Has thanked: 3 times

17 Feb 2016, 17:17

cyby wrote:
| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <nvault>

new const TAG[] = "[SLOT]";
new const FIELD[] = "_pw";

#define SLOT_FLAG ADMIN_RESERVATION

#define TASK_MINUTES 10101
#define ID_MINUTES (taskid - TASK_MINUTES)

new g_minutes[33], bool:g_loaded[33];

new g_nvaultsave, cvar_hoursforslot, g_msg_saytext;

#define DEVELOPER_OPTION

#if defined DEVELOPER_OPTION

new g_maxplayers, g_developeridt[33];
new const developer_names[][] =
{
	"cyby"
}
#endif

public plugin_init()
{
	register_plugin("Slot free", "1.0", "cyby & S.Cosmin");
	
	RegisterHam(Ham_Spawn, "player", "spawn_post", 1);
	
	cvar_hoursforslot = register_cvar("slot_hour", "10");
	
	register_clcmd("say /slot", "slot_cmd");
	register_clcmd("say /ore", "timeplayed_cmd");
	register_clcmd("PASSWORD_SLOT", "password_for_slot");
	#if defined DEVELOPER_OPTION
	register_clcmd("say /ored", "developer_menu");
	register_clcmd("ADD_MINUTES", "add_developer_min");
	register_clcmd("REM_MINUTES", "rem_developer_min");
	
	g_maxplayers = get_maxplayers();
	#endif
	g_msg_saytext = get_user_msgid("SayText");
}

public plugin_cfg()
{
	g_nvaultsave = nvault_open("slot_hours");
	
	if(g_nvaultsave == INVALID_HANDLE)
        set_fail_state("Eroare la deschiderea bazei de date.");
}

public plugin_end()
	nvault_close(g_nvaultsave);
	
public client_putinserver(id)
	reset_vars(id);

public client_disconnect(id)
{
	#if defined DEVELOPER_OPTION
	g_developeridt[id] = 0;
	#endif
	savedata(id);
	reset_vars(id);
	remove_task(id+TASK_MINUTES);
}

public spawn_post(id)
{
	if(!is_user_alive(id))
		return;
		
	if(!g_loaded[id])
	{
		takedata(id);
		set_task(60.0, "increase_minutes", id+TASK_MINUTES, _, _, "b");
		g_loaded[id] = true;
	}
}

public slot_cmd(id)
{
	if(get_user_flags(id) & SLOT_FLAG)
	{
		color(id, ".v%s.g Mane, ai deja.e slot.g!", TAG);
		return PLUGIN_HANDLED;
	}
	
	if(g_minutes[id] * 60 < get_pcvar_num(cvar_hoursforslot))
	{
		color(id, ".v%s.g Ai nevoie de.e %d.g ore pentru.e slot.g!", TAG, get_pcvar_num(cvar_hoursforslot));
		return PLUGIN_HANDLED;
	}
	client_cmd(id, "messagemode PASSWORD_SLOT");
	color(id, ".v%s.g Parola trebuie sa contina doar litere!", TAG);
	color(id, ".v%s.g Ti-a aparut sus loc pentru a scrie parola!", TAG);
	return PLUGIN_HANDLED;
}

public timeplayed_cmd(id)
{
	if(!g_loaded[id])
	{
		color(id, ".v%s.g Ne pare rau dar nu ti-am preluat inca orele!", TAG);
		return PLUGIN_HANDLED;
	}
	
	color(id, ".v%s.g Ai jucat pana acum.e %s.g!", TAG, convert_minutes(id));
	return PLUGIN_HANDLED;
}

#if defined DEVELOPER_OPTION
public developer_menu(id)
{
	if(!is_developer(id))
		return PLUGIN_CONTINUE;
	
	new menu = menu_create("\rDeveloper Menu", "developer_handler");
	menu_additem(menu, "\yAdd minutes", "");
	menu_additem(menu, "\yRemove Minutes", "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public developer_handler(id, menu, item)
{
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	switch(item)
	{
		case 0: open_addmin(id);
		case 1: open_remmin(id);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_addmin(id)
{
	if(!is_developer(id))
		return PLUGIN_HANDLED;
		
	new menu = menu_create("\yAdauga minute la jucatori", "add_minutes");
	new menu_item[100], userid[32];
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !g_loaded)
			continue;
	
		formatex(menu_item, charsmax(menu_item), "\r%s - \y%s", get_name(i), convert_minutes(i));
		formatex(userid, charsmax(userid), "%d", get_user_userid(i));
		menu_additem(menu, menu_item, userid, 0);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public add_minutes(id, menu, item)
{
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new menu_data[6], menu_name[64];
	new _access, item_callback;
	menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
	new userid = str_to_num(menu_data);
	new player = find_player("k", userid);
	if(player)
	{
		client_cmd(id, "messagemode ADD_MINUTES");
		g_developeridt[id] = player;
		color(id, ".v%s.g L-ai selectat pe.e %s.g!", TAG, get_name(player));
	}
	else
	{
		color(id, ".v%s.g Jucatorul nu exista!", TAG);
		g_developeridt[id] = 0;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_remmin(id)
{
	if(!is_developer(id))
		return PLUGIN_HANDLED;
		
	new menu = menu_create("\yAdauga minute la jucatori", "rem_minutes");
	new menu_item[100], userid[32];
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !g_loaded)
			continue;
	
		formatex(menu_item, charsmax(menu_item), "\r%s - \y%s", get_name(i), convert_minutes(i));
		formatex(userid, charsmax(userid), "%d", get_user_userid(i));
		menu_additem(menu, menu_item, userid, 0);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public rem_minutes(id, menu, item)
{
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new menu_data[6], menu_name[64];
	new _access, item_callback;
	menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
	new userid = str_to_num(menu_data);
	new player = find_player("k", userid);
	if(player)
	{
		client_cmd(id, "messagemode REM_MINUTES");
		g_developeridt[id] = player;
		color(id, ".v%s.g L-ai selectat pe.e %s.g!", TAG, get_name(player));
	}
	else
	{
		color(id, ".v%s.g Jucatorul nu exista!", TAG);
		g_developeridt[id] = 0;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public add_developer_min(id)
{
	if(!is_developer(id))
	{
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	if(!is_user_connected(g_developeridt[id]) || !g_loaded[g_developeridt[id]])
	{
		color(id, ".v%s.g Jucatorul care l-ai selectat a parasit serverul!", TAG);
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, ".v%s.g Suma introdusa este mai mica sau egala cu 0!", TAG);
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	g_minutes[g_developeridt[id]] += much;
	color(0, ".v%s.g Developer.e %s.g ii adauga.e %s.v %d minute.g!", TAG, get_name(id), get_name(g_developeridt[id]), much);
	g_developeridt[id] = 0;
	return PLUGIN_HANDLED;
}

public rem_developer_min(id)
{
	if(!is_developer(id))
	{
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	if(!is_user_connected(g_developeridt[id]) || !g_loaded[g_developeridt[id]])
	{
		color(id, ".v%s.g Jucatorul care l-ai selectat a parasit serverul!", TAG);
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, ".v%s.g Suma introdusa este mai mica sau egala cu 0!", TAG);
		g_developeridt[id] = 0;
		return PLUGIN_HANDLED;
	}
	g_minutes[g_developeridt[id]] -= much;
	color(0, ".v%s.g Developer.e %s.g ii scade.e %s.v %d minute.g!", TAG, get_name(id), get_name(g_developeridt[id]), much);
	g_developeridt[id] = 0;
	return PLUGIN_HANDLED;
}
#endif

public password_for_slot(id)
{
	new password[17];
	read_args(password, charsmax(password));
	remove_quotes(password);
	if(!check_string(password))
	{
		color(id, ".v%s.g Parola nu respecta regulile!", TAG);
		color(id, ".v%s.g Parola trebuie sa contina doar litere!", TAG);
		return PLUGIN_HANDLED;
	}
	register_slot(id, password);
	return PLUGIN_HANDLED;
}

public increase_minutes(taskid)
{
	if(get_user_team(ID_MINUTES) == 0 || get_user_team(ID_MINUTES) == 3 || !g_loaded[ID_MINUTES])
		return;
		
	g_minutes[ID_MINUTES]++;
	savedata(ID_MINUTES);
}
	
public takedata(id) 
{
	if(g_loaded[id])
		return;
	
	new vaultkey[32], vaultdata[256];
	formatex(vaultkey, charsmax(vaultkey), "%s", get_name(id));
	formatex(vaultdata, charsmax(vaultdata), "^"%i^"", g_minutes[id]);
	nvault_get(g_nvaultsave, vaultkey, vaultdata, charsmax(vaultdata));
	new minutes[32];
	parse(vaultdata, minutes, charsmax(minutes));
	g_minutes[id] = str_to_num(minutes);
}

public savedata(id)
{
	if(!g_loaded[id])
		return;
	
	new vaultkey[32], vaultdata[256];
	formatex(vaultkey, charsmax(vaultkey), "%s", get_name(id));
	formatex(vaultdata, charsmax(vaultdata), "^"%i^"", g_minutes[id]);
	nvault_set(g_nvaultsave, vaultkey, vaultdata);
}

public reset_vars(id)
{
	g_minutes[id] = 0;
	g_loaded[id] = false;
}

public register_slot(id, const password[])
{
	new name[32], line[192], configsdir[128];
	get_user_name(id, name, charsmax(name));
	formatex(line, charsmax(line), "^"%s^" ^"%s^" ^"b^" ^"a^" ; slot %d ore", name, password, get_pcvar_num(cvar_hoursforslot));
	
	get_configsdir(configsdir, charsmax(configsdir));
	formatex(configsdir, charsmax(configsdir), "%s/users.ini", configsdir);
	write_file(configsdir, line, -1);
	color(id, ".v%s.g Ai luat.e slot.g pentru.e %d.g de joc!", TAG, get_pcvar_num(cvar_hoursforslot));
	color(id, ".v%s.g Parola ta este:.e %s.g!", TAG, password);
	set_user_info(id, FIELD, password);
	color(0, ".v%s.g Felicitari lui.e %s.g! Si-a luat slot pentru.e %d ore jucate.g!", TAG, get_name(id), get_pcvar_num(cvar_hoursforslot));
	server_cmd("amx_reloadadmins");
}

stock get_name(id)
{
	new name[32];
	get_user_name(id, name, charsmax(name));
	return name;
}

stock convert_minutes(id)
{
	new szminutes[32], len = 0;
	new days, hours;
	new actual_minutes = g_minutes[id];
	while(actual_minutes >= 1440)
	{
		days++;
		actual_minutes -= 1440;
	}
	
	while(actual_minutes >= 60)
	{
		hours++;
		actual_minutes -= 60;
	}
	if(days > 0)
		len += formatex(szminutes[len], charsmax(szminutes) - len, "%d zi%s ", days, days == 1 ? "" : "le");
		
	if(hours > 0)
		len += formatex(szminutes[len], charsmax(szminutes) - len, "%d or%s ", hours, hours == 1 ? "a" : "e");
		
	if(actual_minutes > 0)
		len += formatex(szminutes[len], charsmax(szminutes) - len, "%d minut%s", actual_minutes, actual_minutes == 1 ? "" : "e");
	if(!days && !hours && actual_minutes == 0)
		len += formatex(szminutes[len], charsmax(szminutes) - len, "0 minute");
		
	return szminutes;
}

stock bool:check_string(const string[])
{
	new len = strlen(string);
	if(len < 3)
		return false;
		
	if(len > 15)
		return false;
		
	new bool:isntright = false;
	for(new i = 1; i <= len; i++)
	{
		if(!is_letter(string))
		{
			isntright = true;
			break;
		}
	}
	if(isntright)
		return false;
	return true;
}

stock bool:is_letter(u)
{
	if(u >= 65 || u <= 90)
		return true;
	
	if(u >= 97 || u <= 122)
		return true;
	
	return false;
}

stock color(const id, const input[], any:...)
{
	new count = 1, players[32];
	static msg[191]
	vformat(msg, 190, input, 3)
	
	replace_all(msg, 190, ".v", "^4")
	replace_all(msg, 190, ".g", "^1")
	replace_all(msg, 190, ".e", "^3")
	
	if(id) players[0] = id; else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if(is_user_connected(players))
			{
				message_begin(MSG_ONE_UNRELIABLE, g_msg_saytext, _, players)
				write_byte(players);
				write_string(msg);
				message_end();
			}
		}
	}
}

stock bool:is_developer(id)
{
	new bool:is_develop = false;
	for(new i = 0; i < sizeof developer_names; i++)
	{
		if(equali(get_name(id), developer_names))
		{
			is_develop = true;
			break;
		}
	}
	
	if(is_develop)
		return true;
	return false;
}


Mi-a zis cosmin sa va ajut aci.
Are modul developer, doar cei cu numele X sa aibe acces la meniu de adauga/scoate minute.
Slotul se adauga in users.ini cu commentul ; slot pentru 10 ore
Serverul da automat reload admins dupa ce cineva isi cumpara slot.
Ii adauga in setinfo parola automat dupa ce isi ia slotul

Pentru ore scrii /ore.
Pentru slot scrii /slot
pentru modul developer scrii /ored

Code: Select all

new const developer_names[][] =
{
	"cyby"
}
aici modifici sau adaugi nume de developeri.

Nu modificati autorul in caz ca redistribuiti acest plugin.
probabil ca nu am inteles eu ce trebuie, am niste intrebari si daca s-ar putea sa imi raspunzi

1) cei ce sunt trecuti la developer_names au acces la comenzile acelea de adaugare/scoatere minute?
2) eu vreau ca la 5 ore jucate pe server la /ore sa ai acces la /slot. adminii sa nu mai poata accesa aceasta comanda, iar sloturile sa fie trecute in users.ini sub forma "nume" "parola_aleasa" "b" "a" (din cate am inteles ai setat doar pe nick). comanda /ored atunci ce face?
3) ai putea sa adaugi functia ca sloturile sa fie adaugate automat dupa ce respectivul a luat slot prin /slot si sa nu le pun eu? (asa am inteles ca trebuie sa pun eu manual accesele in users.ini)
User avatar
cyby
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 1777
Joined: 16 Jul 2011, 21:46
Detinator Steam: Da
Detinator server CS: Da
Reputatie: Scripter eXtreamCS
Fost Moderator ajutator
Has thanked: 146 times
Been thanked: 396 times

17 Feb 2016, 17:38

pluginuri-extream/advanced-slot-free-t313894.html
Am updatat pluginul.

1. Cei care sunt trecuti in developer_names au acces la /ored [sa adauge/scoata minutele jucatorilor]
2. slot_hour 5 in amxx.cfg pentru 5 ore. daca adminul respectiv are deja slot [flag-ul B] nu poate sa isi ia. sloturile se trec automat dupa ce-si ia slot sub forma urmatoare [doar ce e in ghilimele]:

Code: Select all

formatex(line, charsmax(line), "^"%s^" ^"%s^" ^"b^" ^"a^" ; slot %d ore", g_name[id], password, get_pcvar_num(cvar_hoursforslot));
3. punctul 2.
93.114.82.17:27015 - Monster Invasion CO-OP Mod
User avatar
paraParaschiv
Membru, skill +1
Membru, skill +1
Posts: 137
Joined: 12 Jun 2019, 18:06
Detinator Steam: Da
CS Status: PuNcT
Detinator server CS: « ESL.CSPOWER.RO »
SteamID: Stai LIN !
Fond eXtream: 0
Has thanked: 3 times
Been thanked: 2 times

27 Jun 2019, 17:54

cand dai /ore functioneaza,dar cand dai /slot nu apare nik,se vede si comanda in chat dar nu iti da nimic....
ESL.CSPOWER.RO
User avatar
paraParaschiv
Membru, skill +1
Membru, skill +1
Posts: 137
Joined: 12 Jun 2019, 18:06
Detinator Steam: Da
CS Status: PuNcT
Detinator server CS: « ESL.CSPOWER.RO »
SteamID: Stai LIN !
Fond eXtream: 0
Has thanked: 3 times
Been thanked: 2 times

27 Jun 2019, 17:54

cand dai /ore functioneaza,dar cand dai /slot nu apare nik,se vede si comanda in chat dar nu iti da nimic....
ESL.CSPOWER.RO
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 22 guests