Bank System v3.1 Update 03.07.2015

Pluginuri facute de utilizatorii forumului eXtream.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

User avatar
HamletEagle
Fost moderator
Fost moderator
Posts: 750
Joined: 21 Sep 2013, 15:05
Detinator Steam: Da
CS Status: Inactiv cateva zile.
SteamID: privat
Reputatie: Fost Scripter eXtreamCS.com
Fost Moderator ajutator
Has thanked: 19 times
Been thanked: 85 times

20 Jul 2015, 13:10

Ideea e frumoasa si chiar usoara, iti arat eu cum sa faci daca vrei.
RoyalServer
User avatar
FaTzZu
Fost moderator
Fost moderator
Posts: 1206
Joined: 22 Dec 2012, 18:37
Detinator Steam: Da
Reputatie: Fost moderator ajutator
Has thanked: 114 times
Been thanked: 168 times

20 Jul 2015, 19:36

Code: Select all

	if(equal(szArgs,"/retrage",strlen("/retrage")))
	{
		replace_all(szArgs,charsmax(szArgs),"/","")
		client_cmd(id,"amx_%s",szArgs)
	}
	else if(equal(szArgs,"/depune",strlen("/depune")))
	{
		replace_all(szArgs,charsmax(szArgs),"/","")
		client_cmd(id,"amx_%s",szArgs)
	}
	else if(equal(szArgs,"/transfer",strlen("/transfer")))
	{
		replace_all(szArgs,charsmax(szArgs),"/","")
		client_cmd(id,"amx_%s",szArgs)
	}
	else if(equal(szArgs,"/money",strlen("/money")))
	{
		replace_all(szArgs,charsmax(szArgs),"/","")
		client_cmd(id,"amx_%s",szArgs)
	}
De ce nu le pui intr-o constantă gen
g_szCommands[][] = {
"/x",
"/y"
} etc ..
iar apoi cu for?
User avatar
YONTU
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 2466
Joined: 10 May 2013, 14:25
Detinator Steam: Nu
CS Status: Everyone is looking at ur shoes
Reputatie: Moderator ajutator
Fost scripter eXtreamCS
Location: Gura Humorului
Has thanked: 256 times
Been thanked: 288 times
Contact:

20 Jul 2015, 19:47

O alta idee ar fi:
Ai putea face sa arate toti banii din banca in hud. Ex: am 50k, poti face sa arate in hud 50000 $.
| Afiseaza codul
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Money"), _, id);
   write_long(iMoney[id]);
   write_byte(1);
   message_end();
Ai putea face un stock prin care sa setezi banii astfel:
| Afiseaza codul
stock set_user_money(id, money, save)
{
	if(!is_user_connected(id))
		return false;

	if(abs(money) < 0)
	{
		iMoney[id] += money;
		if(iMoney[id] < 0)
		{
			iMoney[id] = 0;
		}
	}
	else
	{
		iMoney[id] += money;
	}
	if(save)
	{
		SaveData(id);
	}

	// arata toti banii pe care ii ai in banca in HUD
	message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Money"), _, id);
	write_long(iMoney[id]);
	write_byte(1);
	message_end();

	return true;	
}
si sa inlocuiesti in pluginul tau folosind stock-ul:
cmdTransfer(id) | Afiseaza codul
public cmdTransfer(id) {
	new szArgs[35],szArgs2[10],ammount,target,name_e[32]
	read_argv(1,szArgs,charsmax(szArgs))
	read_argv(2,szArgs2,charsmax(szArgs2))

	ammount = str_to_num(szArgs2)
	target = cmd_target(id,szArgs,8)
	
	if(id == target)
	{
		color(id,"!team[Banca]!yNu-ti poti transfera singur bani.")
		return 1
	}
	if(equal(szArgs,"") || equal(szArgs2,"") || !ammount)
	{
		color(id,"!team[Banca]!y/transfer <nume> <cantitate>")
		return 1
	}
	if(!target)
	{
		color(id,"!team[Banca]!yAcest jucator nu exista.")
		return 1
	}
	if(ammount > iMoney[id])
	{
		color(id,"!team[Banca]!ySuma pe care vrei sa i-o dai este prea mare fata de ce ai tu in banca.")
		return 1
	}
	get_user_name(target,name_e,charsmax(name_e))

	iMoney[target]+= ammount
	iMoney[id]-= ammount

	color(target,"!team[Banca] !g%s !yti-a transferat !g%i$ !yin cont.",name(id),ammount)
	color(id,"!team[Banca]!yI-ai transferat cu succes player-ului !g%s !ysuma de !g%i$.",name_e,ammount)
	return 1
}
->
| Afiseaza codul
public cmdTransfer(id) {
	new szArgs[35],szArgs2[10],ammount,target,name_e[32]
	read_argv(1,szArgs,charsmax(szArgs))
	read_argv(2,szArgs2,charsmax(szArgs2))

	ammount = str_to_num(szArgs2)
	target = cmd_target(id,szArgs,8)
	
	if(id == target)
	{
		color(id,"!team[Banca]!yNu-ti poti transfera singur bani.")
		return 1
	}
	if(equal(szArgs,"") || equal(szArgs2,"") || !ammount)
	{
		color(id,"!team[Banca]!y/transfer <nume> <cantitate>")
		return 1
	}
	if(!target)
	{
		color(id,"!team[Banca]!yAcest jucator nu exista.")
		return 1
	}
	if(ammount > iMoney[id])
	{
		color(id,"!team[Banca]!ySuma pe care vrei sa i-o dai este prea mare fata de ce ai tu in banca.")
		return 1
	}
	get_user_name(target,name_e,charsmax(name_e))

	set_user_money(target, ammount, 1)
	set_user_money(id, -ammount, 1)

	color(target,"!team[Banca] !g%s !yti-a transferat !g%i$ !yin cont.",name(id),ammount)
	color(id,"!team[Banca]!yI-ai transferat cu succes player-ului !g%s !ysuma de !g%i$.",name_e,ammount)
	return 1
}
Bafta.
User avatar
HamletEagle
Fost moderator
Fost moderator
Posts: 750
Joined: 21 Sep 2013, 15:05
Detinator Steam: Da
CS Status: Inactiv cateva zile.
SteamID: privat
Reputatie: Fost Scripter eXtreamCS.com
Fost Moderator ajutator
Has thanked: 19 times
Been thanked: 85 times

21 Jul 2015, 22:36

Code: Select all

#include <amxmodx>
#include <amxmisc>

enum CommandArgs {Ammount, Time}
enum _:TimeStampTypes {CurrentTimeStamp, ReturnTimeStamp}

new BarrowFilePath[120]
new Trie:TriePlayerBarrows

public plugin_init()
{
	register_clcmd("amx_barrow", "ClientCommand_Barrow")
	
	TriePlayerBarrows = TrieCreate()
	
	get_configsdir(BarrowFilePath, charsmax(BarrowFilePath))
	format(BarrowFilePath, charsmax(BarrowFilePath), "%s/%s", BarrowFilePath, "bank_barrows.ini")
	
	new FilePointer = fopen(BarrowFilePath, "rt")
	if(FilePointer)
	{
		new FileData[256], PlayerAuthId[35], BarrowTime[10], ReturnTime[10], TimeArray[TimeStampTypes]
		while(!feof(FilePointer))
		{
			fgets(FilePointer, FileData, charsmax(FileData))
			parse(FileData, PlayerAuthId, charsmax(PlayerAuthId), BarrowTime, charsmax(BarrowTime), ReturnTime, charsmax(ReturnTime))
			
			TimeArray[CurrentTimeStamp] = str_to_num(BarrowTime)
			TimeArray[ReturnTimeStamp ] = str_to_num(ReturnTime)
			
			TrieSetArray(TriePlayerBarrows, PlayerAuthId, TimeArray, sizeof TimeArray)
		}
		fclose(FilePointer)
	}
}

public plugin_end()
{
	TrieDestroy(TriePlayerBarrows)
}

public ClientCommand_Barrow(id)
{
	if(!is_user_connected(id))
	{
		return 1
	}
	
	new Arguments[CommandArgs][30]
	read_argv(1, Arguments[Ammount], charsmax(Arguments[]))
	read_argv(2, Arguments[Time   ], charsmax(Arguments[]))
	
	new CurrentDate[10]; get_time("%d:%m:%Y", CurrentDate, charsmax(CurrentDate))
	
	new TimeStamps[TimeStampTypes]
	
	TimeStamps[CurrentTimeStamp] = parse_time(CurrentDate, "%d:%m:%Y")
	TimeStamps[ReturnTimeStamp ] = str_to_num(Arguments[Time]) * 86400 //after how many days in seconds he would return the money
	
	new PlayerAuthId[35]; get_user_authid(id, PlayerAuthId, charsmax(PlayerAuthId))
	TrieSetArray(TriePlayerBarrows, PlayerAuthId, TimeStamps, sizeof TimeStamps)
	
	new FilePointer = fopen(BarrowFilePath, "a")
	if(FilePointer)
	{ 
		fprintf(FilePointer, "%s %s %s", PlayerAuthId, TimeStamps[CurrentTimeStamp], TimeStamps[ReturnTimeStamp])	
		fclose(FilePointer)
	}
	
	return 1
}

stock bool:UserHasOutStandings(id)
{
	new PlayerAuthId[35]; get_user_authid(id,PlayerAuthId, charsmax(PlayerAuthId))
	if(TrieKeyExists(TriePlayerBarrows, PlayerAuthId))
	{
		new ArrayTime[TimeStampTypes]
		TrieGetArray(TriePlayerBarrows, PlayerAuthId, ArrayTime, sizeof ArrayTime))
		
		new CurrentDate[10]; get_time("%d:%m:%Y", CurrentDate, charsmax(CurrentDate))
		new CurrentTime = parse_time(CurrentDate, "%d:%m:%Y")
		
		if(CurrentTime >  ArrayTime[ReturnTimeStamp] + ArrayTime[CurrentTimeStamp])
		{
			return true
		}
	}
	
	return false
}
Ca tot nu am ce face, ti-am facut eu ideea cu imprumuturi, ce ai de facut e sa o integrezi in codul tau, sa testezi si eventual sa pui o limita, sa nu poata spune ca da banii inapoi peste 15 ani. Ca sa stii daca nu a platiti e suficient sa faci

Code: Select all

if(UserHasOutStandings(id))
Nu am testat, poate e nevoie de mici modificari, insa asa se face.

Ceea ce zice FaTzZu e pur estetic, insa ti-as recomanda sa faci asa, nu e placut sa vezi acelasi cod de 15 ori. Insa, cand verifici in for daca aia e comanda trebuie sa pui break ca sa eviti sa caute in continuare aiurea,

Ce nu imi place ne cand cineva care nu are cunostintele necesare sa dea sfaturi o face. Atat timp cat nu stii destul pentru tine, nu incerca sa ii incurci si pe altii.

Yontu:

1. get_user_msgid("Money") are aceeasi valoare mereu, ar trebui salvat intr-o variabila in plugin_init de exemplu. O alta chestie, ar trebui sa folosesti MSG_ONE si MSG_ONE_UNRELIABLE. De ce ?

a)Mesajele care sunt reliable sunt trimite in mod sigur catre un player. E adevarat ca unreliable este mai sigur deoarece in cazul in care nu poate sa fie trimis corect nu da crash clientului.
b)Cand trimite acest mesaj, jocul foloseste MSG_ONE si nu MSG_ONE_UNRELIABLE

Code: Select all

 MESSAGE_BEGIN( MSG_ONE, gmsgMoney, NULL, ENT( pev ) );
        WRITE_LONG( m_iAccount );
        WRITE_BYTE( bTrackChange );
    MESSAGE_END();
https://github.com/Arkshine/CSSDK/blob/ ... player.cpp

Nu e gresit daca folosesti unreliable, insa ar fi de preferat sa te gandesti bine ce alegi.

Care e faza cu stockul pentru bani ? Mi se pare inutil si probabil gresit.

Code: Select all

if(abs(money) < 0)
Cum poate modulul unui numar sa fie mai mic decat 0 ? Modulul este valoarea absoluta... In plus, de ce ai seta bani cu valoare negativa stiind ca stockul oricum o face pozitiva ?
Daca vreti ajutorul meu, nu dati bump la topic, fara intrebari de genu "cat mai dureaza/mai astept mult?".
User avatar
Traficant De Wi-Fi
Membru, skill +3
Membru, skill +3
Posts: 1277
Joined: 29 Mar 2015, 22:22
Detinator Steam: Da
SteamID: traficant_de_wifi
Reputatie: Membru Club eXtreamCS (2 luni)
Location: Arad
Been thanked: 14 times
Contact:

10 Mar 2018, 20:20

Stiu ca este vechi pluginul.. dar as dori daca se poate o mica modificare in care sa poti transfera banii in cont tuturor jucatorilor...
sau la ora fixa 18:00 -19:00 -20:00 toti jucatorii online sa primeasca x bani in cont!
Discord: lucifer_xro
Post Reply

Return to “Pluginuri eXtream”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 7 guests