Guest Posted December 6, 2016 Posted December 6, 2016 (edited) 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 December 6, 2016 by ImTouchk
Daedric-Fox Posted December 6, 2016 Posted December 6, 2016 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 *********************************
Guest Posted December 6, 2016 Posted December 6, 2016 1 minute ago, DaEdRiC-FoX said: La sscanf,parametrul pentru nume/ id player este 'u'. Mulțumesc, asta nu știam Eu puneam „d” ca parametru și uneori ieșea buguit.
Kingsley Posted December 6, 2016 Posted December 6, 2016 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 Retras
Guest Posted December 6, 2016 Posted December 6, 2016 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.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now