Jump to content

Tutorial: sistem foarte simplu de ANTICHEAT pentru roleplay.


ImTouchk

Recommended Posts

Bună dimineața dragi colegi, am pregătit acest tutorial pentru serverele de RPG sau de ROLEPLAY, un mini-sistem de anti-cheat.

În primul rând, ne trebuie variabila pMoney în enum-ul pInfo.

enum pInfo
{
	pMoney,
	ce catrafoaise mai ai tu aci
}

Acum adăugam funcția pInfo[playerid][pMoney] în fiecare comandă unde primești bani sau plătești bani, precum și în PAYDAY.

Exemplu:

CMD:givecash(playerid, params[])
{
	new targetid, targetn[MAX_PLAYER_NAME], playern[MAX_PLAYER_NAME];
	new money, str[128];
	if(pInfo[playerid][pAdmin] != 4) return SendClientMessage(playerid, -1, "panaramo vr bani a?"); // inlocuieste pInfo[playerid][pAdmin] cu variabila TA.
	if(sscanf(params,"ud",targetid,money)) return SendClientMessage(playerid, -1, "/givecash [playerid] [suma]");
	if(targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "Ai specificat un ID invalid.");
	if(money > 999999) return SendClientMessage(playerid, -1, "Hoo, mai usor cu $$");
	GetPlayerName(playerid, playern, MAX_PLAYER_NAME);
	GetPlayerName(targetid, targetn, MAX_PLAYER_NAME);
	format(str, sizeof(str), "I-ai dat lui %s suma de $%d", targetn, money);
	SendClientMessage(playerid, -1, str);
	format(str, sizeof(str), "Ai primit $%d de la muhamedul %s!", money, playern);
	SendClientMessage(targetid, -1, str);
	GivePlayerMoney(targetid, money);
	PlayerInfo[playerid][pMoney] +money; // ASTA
	return 1;
}

O variabilă ca pMoney poate fi folosită de exemplu și la arme , nu? Încercați tot ce vă vine, fiți creativi!

După ce am făcut acest lucru, putem începe script-ul:

Începem cu un forward care îl punem sus de tot în script:

forward AntiCheat(playerid);

După, intrăm în OnPlayerConnect și folosim un timer ce se repetă în fiecare milisecundă :
 

public OnPlayerConnect(playerid)
{
	SetTimerEx("AntiCheat", 100, true, "i", playerid);
	// anticheat reprezinta functia la care am dat forward
	// 100 reprezinta in milisecunde la cat timp sa se repete timer-ul (verificarea)
	// true reprezinta repetarea acestei variabile repetata
	// i este un integer.
	// playerid este cel caruia ii aplicam acest timer

	// ce mai ai tu aci
	return 1;
}

Nu uitați să păstrați literele mari indiferent de situație, altfel veți primii erori! Funcția pe care v-am dat-o trebuie să rămână NESCHIMBATĂ.

 

Bun. După ce am ajuns în acest pas, facem public-ul AntiCheat.

public AntiCheat(playerid)
{
	if(GetPlayerMoney(playerid) != PlayerInfo[playerid][pMoney])
	{
		new playern[MAX_PLAYER_NAME], str[128];
		GetPlayerName(playerid, playern, MAX_PLAYER_NAME); // afla numele jucatorului
		ResetPlayerMoney(playerid);  // ii reseteaza banii
		GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]); // ii da la loc banii pe care ii avea
		format(str, sizeof(str), "Jucatorul %s a incercat sa isi adauge bani printr-un hack!", playern);
		SendAdminMessage(-1, str); // daca vreti sa dea mesaj administratorilor, aceasta functie trebuie definita de catre VOI. Nu va dau totul pe tava!
	}
	return 1;
}

Iar în loc de resetat puteți schimba cu Kick, Ban, chiar orice. SendAdminMessage nu vi-l las fiindcă nu este corect să vă las totul pe tavă.

 

Și atât este acest tutorial, acum putem să fim liniștiți când vine vorba despre cei ce folosesc hack-uri.

REȚINEȚI, FOARTE IMPORTANT! Dacă nu puneți acel pInfo la fiecare comandă care îți dă sau îți ia bani o să se buguiască sistemul și o să-i reseteze banii chiar dacă nu a folosit un hack. Deci aveți grijă la primii pași.

 

Succes!

Edited by ImTouchk
  • Upvote 1

:D

Link to comment
Share on other sites

1 hour ago, ImTouchk said:

Bună dimineața dragi colegi, am pregătit acest tutorial pentru serverele de RPG sau de ROLEPLAY, un mini-sistem de anti-cheat.

În primul rând, ne trebuie variabila pMoney în enum-ul pInfo.

enum pInfo
{
	pMoney,
	ce catrafoaise mai ai tu aci
}

Acum adăugam funcția pInfo[playerid][pMoney] în fiecare comandă unde primești bani sau plătești bani, precum și în PAYDAY.

Exemplu:

CMD:givecash(playerid, params[])
{
	new targetid, targetn[MAX_PLAYER_NAME], playern[MAX_PLAYER_NAME];
	new money, str[128];
	if(pInfo[playerid][pAdmin] != 4) return SendClientMessage(playerid, -1, "panaramo vr bani a?"); // inlocuieste pInfo[playerid][pAdmin] cu variabila TA.
	if(sscanf(params,"dd",targetid,money)) return SendClientMessage(playerid, -1, "/givecash [playerid] [suma]");
	if(targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "Ai specificat un ID invalid.");
	if(money > 999999) return SendClientMessage(playerid, -1, "Hoo, mai usor cu $$");
	GetPlayerName(playerid, playern, MAX_PLAYER_NAME);
	GetPlayerName(targetid, targetn, MAX_PLAYER_NAME);
	format(str, sizeof(str), "I-ai dat lui %s suma de $%d", targetn, money);
	SendClientMessage(playerid, -1, str);
	format(str, sizeof(str), "Ai primit $%d de la muhamedul %s!", money, playern);
	SendClientMessage(targetid, -1, str);
	GivePlayerMoney(targetid, money);
	PlayerInfo[playerid][pMoney] +money; // ASTA
	return 1;
}

O variabilă ca pMoney poate fi folosită de exemplu și la arme , nu? Încercați tot ce vă vine, fiți creativi!

După ce am făcut acest lucru, putem începe script-ul:

Începem cu un forward care îl punem sus de tot în script:

forward AntiCheat(playerid);

După, intrăm în OnPlayerConnect și folosim un timer ce se repetă în fiecare milisecundă :
 

public OnPlayerConnect(playerid)
{
	SetTimerEx("AntiCheat", 100, true, "i", playerid);
	// anticheat reprezinta functia la care am dat forward
	// 100 reprezinta in milisecunde la cat timp sa se repete timer-ul (verificarea)
	// true reprezinta repetarea acestei variabile repetata
	// i este un integer.
	// playerid este cel caruia ii aplicam acest timer

	// ce mai ai tu aci
	return 1;
}

Nu uitați să păstrați literele mari indiferent de situație, altfel veți primii erori! Funcția pe care v-am dat-o trebuie să rămână NESCHIMBATĂ.

 

Bun. După ce am ajuns în acest pas, facem public-ul AntiCheat.

public AntiCheat(playerid)
{
	if(GetPlayerMoney(playerid) != PlayerInfo[playerid][pMoney])
	{
		new playern[MAX_PLAYER_NAME], str[128];
		GetPlayerName(playerid, playern, MAX_PLAYER_NAME); // afla numele jucatorului
		ResetPlayerMoney(playerid);  // ii reseteaza banii
		GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]); // ii da la loc banii pe care ii avea
		format(str, sizeof(str), "Jucatorul %s a incercat sa isi adauge bani printr-un hack!", playern);
		SendAdminMessage(-1, str); // daca vreti sa dea mesaj administratorilor, aceasta functie trebuie definita de catre VOI. Nu va dau totul pe tava!
	}
	return 1;
}

Iar în loc de resetat puteți schimba cu Kick, Ban, chiar orice. SendAdminMessage nu vi-l las fiindcă nu este corect să vă las totul pe tavă.

 

Și atât este acest tutorial, acum putem să fim liniștiți când vine vorba despre cei ce folosesc hack-uri.

REȚINEȚI, FOARTE IMPORTANT! Dacă nu puneți acel pInfo la fiecare comandă care îți dă sau îți ia bani o să se buguiască sistemul și o să-i reseteze banii chiar dacă nu a folosit un hack. Deci aveți grijă la primii pași.

 

Succes!

La sscanf,parametrul pentru nume/ id player este 'u'.

**********************************

Servicii Scripting de calitate:

*********************************

Future Project: ExpertGame

*********************************

Link to comment
Share on other sites

Just now, Tud0r. said:

Interesant. Dar exista o gramaaada de AC-uri pe net, care contin acest sistem, cum ar fi: Nex-Ac

Oricum, ai +1, pentru munca depusa

Mulțumesc. Mă gândeam la acest sistem deoarece cred că e aiurea să stai să copiezi decât să înveți. Așa poate fi „modelat” de către fiecare după plac.

:D

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.