Securizare mod XP

Tutoriale scripting, cod si portiuni de cod.

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

15 Feb 2014, 13:12

Am vazut ca tot mai multi incepatori lucreaza la moduri de XP,insa uita cel mai important aspect,securizarea acestore.

In primul rand:

1.Blocare nickname change
| Afiseaza codul
Codul urmator va bloca comanda name nume data in consola.
Comanda retry nu poate fi blocata,deoarece este trimisa de catre client. Putem doar sa o detectam.
Codul:

a)Include fakemeta cu ajutorul liniei:

Code: Select all

#include <fakemeta>
b) Inregistram forwardul <<FM_ClientUserInfoChanged>> cu ajutorul liniei:

Code: Select all

register_forward(FM_ClientUserInfoChanged, "fwClientUserInfoChanged");
=>FM_ClientUserInfoChanged forwardul nostru
=>fwClientUserInfoChanged publicul in care forwardul se va executa.
=>Forwardul se executa(in cazul nostru) atunci cand acesta incearca sa isi schimbe numele

c) Creem publicul fwCLientUserInfoChanged. Veti gasi explicatiile necesare in cod

Code: Select all

public fwClientUserInfoChanged(id,buffer) //indexul nostru este id{
	
	if (!is_user_connected(id)) { //daca nu este conectat returnam FMRES_IGNORED
		return FMRES_IGNORED;
	}
	
	static val[32]//variabila statica val(vector) cu 32 de pozitii
	static name[32]//variabila statica name(vector) cu 32 de pozitii.
	get_user_name(id, name, 31) //detectam numele jucatorului
	engfunc(EngFunc_InfoKeyValue, buffer, "name", val, sizeof val- 1)
	
	if (equal(val, name)) {
		return FMRES_IGNORED
	}
	engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name) //ii setam vechiul nume
	console_print(id,"Name change is disabled on this server.")//ii scriem un mesaj de avertizare.
	
	return PLUGIN_HANDLED
}
Optional puteti face ca la 3 avertizari sa primeasta kick. Astfel trebuie sa faceti:

i)Faceti o noua variabila(vector) count:

Code: Select all

 new count[33]
ii) Acum publicul nostru va arata asa:

Code: Select all

public fwClientUserInfoChanged(id,buffer) {
	
	if (!is_user_connected(id)) {
		return FMRES_IGNORED;
	}
	
	static val[32]
	static name[32]
	get_user_name(id, name, 31)
	engfunc(EngFunc_InfoKeyValue, buffer, "name", val, sizeof val- 1)
	
	if (equal(val, name)) {
		return FMRES_IGNORED
	}
	engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name)
	count[id]++ //adunam 1 variabilei 
	
	console_print(id,"Name change is disabled on this server.")
	console_print(id,"You have %i from 3 warns.At 3 warns you will be automatically kicked",count[id]) //ii scriem un mesaj
	
	if(count[id]==3) {//verificam daca a incercat de 3 ori sa schimbe numele
		
		client_cmd(id,"disconnect") //il deconectam
		console_print(id,"Ai fost deconectat pentru ca ai incercat de 3 ori sa iti schimbi numele") //ii scriem un mesajl
		count[id]=0 //resetam variabila count
	}
	
	return PLUGIN_HANDLED
}

2.Blocarea caracterului <<#>> din nume.
| Afiseaza codul
Dupa cum stiti(sau ar trebui) nvault prezinta un bug,nick-urile cu caracterul <<#>>  pierd din xp.
Codul:

a) Creem publicul <<client_authorized>> cu paramul id.

Code: Select all

public client_authorized(id) {
	
	new name[32]//creeam o noua variabila(vector) name cu 32 de pozitii
	get_user_name(id,name,31)//detectam numele
	if(containi(name,"#") ) {//verificam daca numele contine caracterul #
		
		replace_all(name,31,"#","")//stergem caracterul # din nume
		
	}
	
	set_user_info(id,"name",name)//ii setam noul nume
	client_print(id,print_chat,"Ti-a fost sters din nume caracterul # pentru a evita un bug.Va rugam sa nu il schimbati inapoi")//ii printam un mesaj.
	
}
Functiile folosite:

i)containi:

Code: Select all

containi(const a[],const b[])
const a[]=variabila noastra
const b[]=caracterul pe care il verificam
ii)replace_all

Code: Select all

replace_all(string,lungime,const a[],const b[])
string=variabila
lungime=lungimea variabilei(vectorului)
const a[]=pe cine inlocuim
const b[]=cu ce inlocuim
3. Detectare cerere xp.
| Afiseaza codul
Optional puteti bloca anumite cuvinte,sau sa pedepsiti jucatorul cand acestea sunt scrise in chat.
Codul:

a) Dam hook comenzii say si say_team.

Code: Select all

register_clcmd( "say", "Func_Say" );
register_clcmd( "say_team", "Func_Say" );
b) Creem 2 publicul Func_Say cu paramul id.

Code: Select all

public Func_Say( id ) {
	
	new szSaid[ 192 ]; //facem o noua variabila 
	read_args( szSaid, sizeof( szSaid ) -1 ); //citim ceea ce scrie
	remove_quotes( szSaid );
	if( containi( szSaid, "ceva" ) != -1)//verificam daca ce a scris contine cuvantul "ceva"
	{
		client_cmd(id,"disconnect")//il deconectam.
		console_print(id,"Ai fost deconectat pentru ca ai cerut xp")
	}
	
}

Daca sunt greseli de ortografie,va rog sa ma scuzati pentru ca sunt obosit. Daca am uitat ceva,la fel,anunta-mi si corectez.
Daca vreti ajutorul meu, nu dati bump la topic, fara intrebari de genu "cat mai dureaza/mai astept mult?".
RoyalServer 2
User avatar
Adventx
Membru, skill +4
Membru, skill +4
Posts: 1785
Joined: 17 Sep 2013, 21:44
Detinator Steam: Da
Reputatie: Fost moderator ajutator
Has thanked: 128 times
Been thanked: 142 times
Contact:

15 Feb 2014, 13:20

Foarte bun Tutorialul Hamlet!
Bravo!! =D>
munir
Membru eXtream
Membru eXtream
Posts: 3193
Joined: 30 Aug 2012, 22:16
Detinator Steam: Da
CS Status: Fost scripter
Detinator server CS: Nu
SteamID: -
Reputatie: Fost super moderator
Restrictie schimbare nume
Nume anterior: falseq, cruyff
Location: Bucuresti
Has thanked: 342 times
Been thanked: 571 times
Contact:

15 Feb 2014, 14:27

Code: Select all

count[id]++ //adunam 1 variabilei 
->

Code: Select all

count[id]++ //incrementam vectorul cu 1

Code: Select all

i)containi:
Trebuia sa mentionezi ca, containi e cazul insensibil. Adica, mai pe inteles, va returna true chiar daca cuvantul ceva e scris cu litere mari sau litere mici, nu va exista diferente.
Insa, contain e caz sensibil. Adica, va return true doar daca cuvantul ceva este scris fix asa, cu litere mici. In cazul in care este scris cu litere mari gen

Code: Select all

cEva
Va returna valoarea false. (negasit)
Retras
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

15 Feb 2014, 14:39

O sa editez cu mai multe informatii despre contain si containi.

Cat despre incrementare nu am de gand sa editez. As vrea sa intelegeti,voi scripterii mari si tari ca incepatorii habar nu au ce e aia incrementare. De ce sa folosesti termeni care ii fac sa fie confuzi,cand poti explica pe limbajul lor ?

Edit:

De acord,ca asa e explicat si acolo,dar ce rost ar avea ? De ce sa explici in termenii din pawn pe care un incepator nu ii intelege ? E mai bine sa ii zici simplu,ca sa inteleaga ce si cum. Are destul timp cand va sti temeinic pawn sa invete si termenii.

P.S: nu am nici o problema fixa,stai linistit.
Last edited by HamletEagle on 15 Feb 2014, 14:47, edited 3 times in total.
Daca vreti ajutorul meu, nu dati bump la topic, fara intrebari de genu "cat mai dureaza/mai astept mult?".
munir
Membru eXtream
Membru eXtream
Posts: 3193
Joined: 30 Aug 2012, 22:16
Detinator Steam: Da
CS Status: Fost scripter
Detinator server CS: Nu
SteamID: -
Reputatie: Fost super moderator
Restrictie schimbare nume
Nume anterior: falseq, cruyff
Location: Bucuresti
Has thanked: 342 times
Been thanked: 571 times
Contact:

15 Feb 2014, 14:44

HamletEagle wrote:O sa editez cu mai multe informatii despre contain si containi.

Cat despre incrementare nu am de gand sa editez. As vrea sa intelegeti,voi scripterii mari si tari ca incepatorii habar nu au ce e aia incrementare. De ce sa folosesti termeni care ii fac sa fie confuzi,cand poti explica pe limbajul lor ?
Subliniez voi scripterii mari si tari se pare ca inca ai o problema fixa. Nu sunt scripter mare si tare, eu sincer nici nu ma consider scripter.
De ce sa explici intr-un limbaj total aiurea, inloc sa explici pe limbajul clasic al pawn-ului? Cauta si pe site-ul amxmodx sa vezi ca explica la fel, incrementare si decrementare. Nu adunare si scadere.
Oricum, eu doar ti-am zis, nu ma intereseaza daca editezi sau nu; insa tu ai facut topicul, tu ar fi trebuit sa spui partea corecta, pentru ca in pawn nu e vorba de matematica de clasa a 3 - a, adunare si scadere.
Asta-i ultimul meu raspuns aici.
Retras
LordOfNothing
Membru, skill +1
Membru, skill +1
Posts: 387
Joined: 19 Jul 2013, 15:51
Detinator Steam: Nu
Reputatie: Restrictie PM
Has thanked: 11 times
Been thanked: 35 times

16 Feb 2014, 11:51

Pai partea cu cerere xp e cea mai mare prostie care am auzito :)))

Iar despre restu tutoriallului e inutil , doar puneti salvarea pe STEAM
User avatar
KronoS eXtream
Fost administrator
Fost administrator
Posts: 4378
Joined: 02 Apr 2009, 19:18
Detinator Steam: Da
Reputatie: Fost administrator
Fost detinator Zombie-Land.eXtream.Ro
Contribuitor
Fost Scripter eXtreamCS
Dezvoltator al listei de seriozitate eXtreamCS
Location: Bucharest
Has thanked: 551 times
Been thanked: 820 times
Contact:

16 Feb 2014, 12:22

Nu ai nevoie de 2.Blocarea caracterului <<#>> din nume.
Se poate folosi % ca separator atunci cand se salveaza/incarca datele din nvault.In plus, mai exista un workaround pentru a rezolva problemele legate de salvarea xp-ului.Faceti un bool g_XPLoaded[ 33 ] caruia ii setati valoarea false atunci cand un jucator intra pe server.Atunci cand primeste spawn, daca valoarea lui g_XPLoaded este falsa, atunci se incarca datele din nvault si se schimba valoarea variabilei in true.La deconectarea jucatorului, datele se vor salva doar daca valoarea lui g_XPLoaded este adevarata, altfel exista riscul sa fie suprascrise aiurea datele.
Nu efectuez tranzactii pe mess, skype etc. Aveti grija la indivizii care se dau drept mine!
Nu mai ofer suport asa ca nu imi mai trimiteti mesaje in legatura cu asta!


Zombie Plague Shade 1.2-debug1 [with Item Limiter] (12 September 2015) - Bombardier Branch
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

16 Feb 2014, 18:09

LordOfNothing wrote:Pai partea cu cerere xp e cea mai mare prostie care am auzito :)))

Iar despre restu tutoriallului e inutil , doar puneti salvarea pe STEAM
1. Te-ai gandit asa putin ca nu toti au steam id si ca multa lume prefera salvarea pe nume ?
2. Cum tu m-ai rugat sa nu ma mai bag in topicurile tale,asa te rog si eu sa iti ti vastele cunostinte si replici departe de topicurile mele sau iti voi face report.
3. Nu e cea mai mare prostie,multi mi-au cerut asa ceva. Iarasi vorbeste prostia din tine.
4. Chiar daca salvezi pe steam id tot trebuie sa eviti bugul cu "#"

Kronos:" Se poate folosi % ca separator atunci cand se salveaza/incarca datele din nvault "

Perfect de acord,insa mi s-a parut mai simplu de explicat asa, voi da edit si voi include sugestia ta.
Daca vreti ajutorul meu, nu dati bump la topic, fara intrebari de genu "cat mai dureaza/mai astept mult?".
User avatar
CryWolf
Administrator
Administrator
Posts: 6505
Joined: 07 Aug 2008, 16:33
Detinator Steam: Da
Reputatie: Administrator
Fost Scripter
Manager CS2.eXtream.Ro
Fost Detinator ZM.eXtream.Ro
Fost manager CS.eXtream.Ro
Fost manager CSGO.eXtream.Ro
Fost manager global
Location: Botosani
Discord: crywolf1989
Has thanked: 202 times
Been thanked: 850 times
Contact:

16 Feb 2014, 20:07

Foarte bun tutorialul prietene. :D
NU IMI MAI DA-TI PM CU CERERE AJUTOR/SAMD, FOLOSITI FORUMUL, CITESC MAJORITATEA TOPICURILOR.
www.dark-arena.com , SERVERE CS / CS2 / L4D AU REVENIT ONLINE.
www.diasporaiptv.ro - SERVICII PREMIUM IPTV

Image

Image
User avatar
KronoS eXtream
Fost administrator
Fost administrator
Posts: 4378
Joined: 02 Apr 2009, 19:18
Detinator Steam: Da
Reputatie: Fost administrator
Fost detinator Zombie-Land.eXtream.Ro
Contribuitor
Fost Scripter eXtreamCS
Dezvoltator al listei de seriozitate eXtreamCS
Location: Bucharest
Has thanked: 551 times
Been thanked: 820 times
Contact:

16 Feb 2014, 20:19

HamletEagle wrote:
LordOfNothing wrote:Pai partea cu cerere xp e cea mai mare prostie care am auzito :)))

Iar despre restu tutoriallului e inutil , doar puneti salvarea pe STEAM
1. Te-ai gandit asa putin ca nu toti au steam id si ca multa lume prefera salvarea pe nume ?
2. Cum tu m-ai rugat sa nu ma mai bag in topicurile tale,asa te rog si eu sa iti ti vastele cunostinte si replici departe de topicurile mele sau iti voi face report.
3. Nu e cea mai mare prostie,multi mi-au cerut asa ceva. Iarasi vorbeste prostia din tine.
4. Chiar daca salvezi pe steam id tot trebuie sa eviti bugul cu "#"

Kronos:" Se poate folosi % ca separator atunci cand se salveaza/incarca datele din nvault "

Perfect de acord,insa mi s-a parut mai simplu de explicat asa, voi da edit si voi include sugestia ta.
Da, este bine si ce ai spus tu, insa nu este o metoda "ortodoxa" deoarece impui anumite restrictii asupra jucatorilor (imposibilitatea de a folosi un anumit caracter in nume) :)
Nu efectuez tranzactii pe mess, skype etc. Aveti grija la indivizii care se dau drept mine!
Nu mai ofer suport asa ca nu imi mai trimiteti mesaje in legatura cu asta!


Zombie Plague Shade 1.2-debug1 [with Item Limiter] (12 September 2015) - Bombardier Branch
User avatar
KronoS eXtream
Fost administrator
Fost administrator
Posts: 4378
Joined: 02 Apr 2009, 19:18
Detinator Steam: Da
Reputatie: Fost administrator
Fost detinator Zombie-Land.eXtream.Ro
Contribuitor
Fost Scripter eXtreamCS
Dezvoltator al listei de seriozitate eXtreamCS
Location: Bucharest
Has thanked: 551 times
Been thanked: 820 times
Contact:

16 Feb 2014, 20:22

Desi fac dublu post, imi asum acest risc.Din ce am remarcat eu in ultimii ani, problema nu vine de la separatorul #.AMXX-ul e in stare sa isi dea seama singur de tipurile de date stocate in nvault si sa le separe.Aplicand a doua metoda sugerata de mine (cea cu bool-ul g_XPLoaded) scapati de aceasta problema legata de pierderea de date.
Nu efectuez tranzactii pe mess, skype etc. Aveti grija la indivizii care se dau drept mine!
Nu mai ofer suport asa ca nu imi mai trimiteti mesaje in legatura cu asta!


Zombie Plague Shade 1.2-debug1 [with Item Limiter] (12 September 2015) - Bombardier Branch
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

17 Feb 2014, 16:37

KronoS # GG wrote:Desi fac dublu post, imi asum acest risc.Din ce am remarcat eu in ultimii ani, problema nu vine de la separatorul #.AMXX-ul e in stare sa isi dea seama singur de tipurile de date stocate in nvault si sa le separe.Aplicand a doua metoda sugerata de mine (cea cu bool-ul g_XPLoaded) scapati de aceasta problema legata de pierderea de date.

Ok Kronos,voi detalia printr-un cod explicatia ta in topic cand am timp+adaugarea mai multor informatii. Totusi din testele mele am remarcat ca "#" cauzeaza si el anumite buguri(nu am testat si metoda ta)
Daca vreti ajutorul meu, nu dati bump la topic, fara intrebari de genu "cat mai dureaza/mai astept mult?".
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 8 guests