Da steht nichts von SendClientMessage...
Setz mal vor dem 'SendClientMessage' ( wo auch immer das ist ) ein return hin..
Beiträge von ErikSon
-
-
ocmd:setcarheal(playerid,params[])
{
if(PlayerInfo[playerid][pAdmin] < 4)return SendClientMessage(playerid,rot,"Du hast nicht den nötigen Admin Rang!");
new car,Float:carheal,string[128];
if(sscanf(params,"if",car,carheal))return SendClientMessage(playerid,rot,"Benutzung: /setcarheal [FahrzeugID] [Fahrzeug Health]");
SetVehicleHealth(car,carheal);
format(string,sizeof(string),"Du hast das Auto mit %.2f Carheal ausgerüstet",carheal); //1.
return SendClientMessage(playerid,gelb,string); //2.
}Probiers mal so!
-
Achso, so meint ihr das
So tu ich das doch schon, oder versteh ich euch falsch?Wenn ich mal wieder Zeit habe, setze ich mich mal dran und erweitere das Ganze gegen paar Cleomods..
-
Zitat von »ErikSon«
Zitat von »JustMe.exe«
Kannst du auch irgendwie Cleos detecten?Ne, dafür müsste ich ja schon ein Anti-Cheat Client machen..
Schwachsinn, man kann einige CLEOs auch ohne Client busten, sogar Sprunkguard und Silent Aimbot.
So und nun mal schauen, wann die ersten Posts kommen, die die Möglichkeit, solche CLEOs zu busten, in Frage stellen.
Wie soll das denn beim connecten gehen, wenn man kein Zugriff auf das Verzeichniss hat? -
Sieht Nice aus werde das mal bald testen.
Warum hast du kein Anti Aimbot drin, nicht hingekriegt :D?
Ne, wird aber folgen
Kommen ja noch n paar Funktionen rein..
Sieht klasse aus,werde es mal testen.Weiter so
Danke dir#E Diese Version ist wesentlich Bugfreier
-
Hier mal ein Update..
Aktuelle Funktionen
Spoiler anzeigen |AntiCheat Version 1.0|
Anti Jetpack
Anti Weaponhack
Anti Healthhack
Anti Armourhack
Anti Moneyhack
Pingkick
Anti Badword
Anti Speedhack
Anti C-Bug
Anti Spawnkill
Anti Fakekill
Anti Driveby
Anti Spam
Anti IP-Spam
Anti TuningHack
Anti Flyhack
|AntiCheat Version 2.0|
Anti Airbrake
Anti Joypad
Anti Godmode
Anti Rapid-Fire
Anti Vehicle Teleport
Anti Teleporthack
Anti Carsurf -
Zur Umsetzung und zu den Methoden um gewisse elemente zu detecten möchte ich nichts sagen jedoch gebe ich dir paar Verbesserungsmöglichkeiten mit.
Angefangen mit den waffen:
new Brass[MAX_PLAYERS],
Golf[MAX_PLAYERS],
NiteStick[MAX_PLAYERS],
Knife[MAX_PLAYERS],
BaseBall[MAX_PLAYERS],nutz doch ein enum
enum Weapons {
Brass,
Golf,
---
}new PlayerWeapons[MAX_PLAYERS][Weapons];
das ist deutlich übersichtlicher und zum resetten erspart dir das enorm viel zeit im sinne von tipparbeit:
for(new i; i != _:Weapons; ++i)PlayerWeapons[playerid][Weapons:i] = 0;
Ich kann dir ja mal ein kleinen codeschnipsel da lassen von meiner detect weise von den waffen hacks
new Waffen[13][2];
for (new i=1; i != 13; ++i)
{
GetPlayerWeaponData(playerid, i, Waffen[i][0], Waffen[i][1]);
if (1 <= Waffen[i][0] <= 18){
if(!(AntiCheat[playerid][aWeapons1] & (1 << Waffen[i][0])))SendClientMessage(playerid,-1,"Du benutzt einen Waffencheat!");
}
else if (22 <= Waffen[i][0] <= 46){
if(!(AntiCheat[playerid][aWeapons2] & (1 << (Waffen[i][0]-22))))SendClientMessage(playerid,-1,"Du benutzt einen Waffencheat!");
}
}so nebenssächlich sollte man noch erwähnen das switch + case schneller ist als if + else if
Ja, in der neuen Version wird es nicht mehr so sein..
Und das mit switch & case .. Das ist mir klarDa ich einige Funktionen nicht ohne Testperson testen kann, suche ich hier eine Person, die sich zu Verfügung stellt.
Voraussetzung ist Hamachi, da ich keinen Testserver habe..
Bitte hier melden, falls jemand machen will -
Ich meine dass man ohne einen launcher kein sobeit benutzen kann
Geht schlecht, da man mit PAWN nicht auf den PC zugreifen kann..
Ohne Launcher kann man Sobeit nicht direkt beim Start detecten -
Schaffst du auch was gegen s0beit zu machen
Naja, diese Funktionen wurden mit Sobeit und auch Cleo Mods usw getestet..
Wie genau meinst du das? -
Sieht eigentlich recht sauber aus, wurden die oben gennanten Funktionen den auch ausgibig getestet?
Würde mich mal interessieren.
Aber ansonsten saubere Arbeit
Danke dirNaja, in der nächsten Version wird es, wie von Slider gesagt wurde, etwas sparender mit den Variablen und auch etwas sicherer mit den Funktionen
Es wurde zwar eig gut getestet, jedoch wurde auch schon ein Fail von MrPawn angegeben..
Also, in der nächsten Version wirds schon etwas sicherer sein, da sollte dann eig nichts mehr schief gehen..Falls ihr noch neue Anti-Funktionen hat, bitte posten
-
Der Flyhack würde so eig nicht klappen
if(!strcmp(lib, "SWIM", true))if(IsPlayerInWater(playerid))return SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Flyhack!",Name(playerid)),Kick(playerid);
Du fragst so nur ab ob er schwimmt wenn schon müsstest du es so machenif(!strcmp(lib, "SWIM", true && !IsPlayerInWater(playerid))return SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Flyhack!",Name(playerid)),Kick(playerid);
Danke dir, habe das übersehenalso es folgt folgendes:
Zitat|AntiCheat Version 2.0|
Anti Airbreak
Anti Aimbot
Anti Godmode
Anti RapidFire
Anti CarsurfUnd bitte, wenn ihr eine Verbesserung postet ( neue Anti-Funktion ) bitte auch dazuschreiben, was es ist...
-
Aber wie kann ich zum Beispiel sowas auslesen?
1.Hausid: 1
2. Preis: 2000
3. Interior: 4
4. Kasse: 2000//
1,2000,4,2000
//Wie kann ich das hier auslesen?
// Das wird ja glaube bei GFs benutzt und da alles in einer Reihe ist, muss man dann nicht 10 Reihen fuer ein Haus machen..
Wie macht man sowas, dass man dann zum Beispiel bei meinem Beispiel nur den Preis ausgeben lassen kann?
Sowas moechte ich wissen, nicht so einfaches Zeug, wie ich ganz einfach etwas in eine Datei schreiben kann..Gibt es dazu vlt schon ein Tutorial?
Sowas ist eig fuer vieles viel
besser.. -
hier ist doch ein downloadlink!
http://www.2shared.com/file/w_XuamN_/sarp.html -
Nutz doch einfach den Sscanf Code..
http://wiki.sa-mp.com/wiki/Sscanf_code -
stock LoadHaus()
{new rows, fields, content[MAX_PLAYER_NAME],query[60];
cache_get_data(rows, fields);
format(query,sizeof(query),"SELECT * FROM `house`");
mysql_query(1,query);
mysql_store_result();
if(!rows)return 1;
for(new i = 0; i != rows; i++)
{
cache_get_row(i, 0, content);
hausInfo[i][hID] = strval(content);cache_get_row(i, 1, content);
hausInfo[i][hPreis] = strval(content);cache_get_row(i, 2, content);
format(hausInfo[i][hBesitzer], MAX_PLAYER_NAME, "%s", content);cache_get_row(i, 3, content);
hausInfo[i][hInterior] = strval(content);cache_get_row(i, 4, content);
hausInfo[i][hX] = floatstr(content);cache_get_row(i, 5, content);
hausInfo[i][hY] = floatstr(content);cache_get_row(i, 6, content);
hausInfo[i][hZ] = floatstr(content);CreateHouseOnMap(i);
}
return printf("- | IFNO: Es wurden %i Häuser geladen. INFO | -", rows);}
Das hättest du aber auch selber machen können..
Zitatshould return a value
Ist doch klar?!
-
Kannst du auch irgendwie Cleos detecten?
Ne, dafür müsste ich ja schon ein Anti-Cheat Client machen.. -
dcmd_adminmachen(playerid, params[])
{
new sID,prang,sIDName[MAX_PLAYER_NAME],PlayerName[MAX_PLAYER_NAME];
if(sscanf(params, "ui", sID, prang))return SendClientMessage(playerid, ROT, "Verwendung: /adminmachen [Spielerid][rang]");
/*Siehe Ende diese Zeile*/if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid, ROT, "Du bist kein Admin, oder hast nicht die Benötigten rechte"); // Er ist kein Admin ! Die Funktion wird beendet und es wird zu Letzt nur noch eine Nachricht gesendet
{//?
SpielerD[sID][Adminlevel] = prang;
new str[128];
format (st,sizeof(str),"Du hast %s den adminrang %i gegeben!",GetPlayerName(sID,sIDName,sizeof sIDName),prang);
SendClientMessage(playerid, GRÜN, str);
format(str,sizeof(str),"Du hast von %s den Adminrang %i bekommen!",GetPlayerName(playerid,PlayerName,sizeof PlayerName),prang);
SendClientMessage(sID, GRÜN, str);
return 1;
}//?
return 1;
}Sollte klappen
Wird es aber nicht.. ( siehe markierte Stellen ) -
ja ganz genau. Es lieg meiner meinung nach an hier dran. Ich weiß nur nicht wie ich es wegbekomme:
format
(adminmachennachrichtanadmin,sizeof(adminmachennachrichtanadmin),"Du
hast %s den adminrang %i gegeben!",GetPlayerName(sID),prang);GetPlayerName(sID),prang
Es muss daran liegen, denke ich
MFG
Kempfer
Ja, daran liegt es auch..Mach den Code so:
dcmd_adminmachen(playerid, params[])
{
new sID,prang;
if(sscanf(params, "ui", sID, prang))return SendClientMessage(playerid, ROT, "Verwendung: /adminmachen [Spielerid][rang]");
if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid, ROT, "Du bist kein Admin, oder hast nicht die benötigten Rechte!");
SpielerD[sID][Adminlevel] = prang;
new nachricht[128],pname[MAX_PLAYER_NAME];
GetPlayerName(sID,pname,MAX_PLAYER_NAME);
format (nachricht,sizeof(nachricht),"Du hast %s den adminrang %i gegeben!",pname,prang);
SendClientMessage(playerid, GRÜN, nachricht);
GetPlayerName(playerid,pname,MAX_PLAYER_NAME);
format(nachricht,sizeof(nachricht),"Du hast von %s den Adminrang %i bekommen!",pname,prang);
return SendClientMessage(sID, GRÜN, nachricht);
} -
Ich nehme an es liegt an diesen beiden Stellen..
oder?format (adminmachennachrichtanadmin,sizeof(adminmachennachrichtanadmin),"Du hast %s den adminrang %i gegeben!",GetPlayerName(sID),prang);
format(adminmachennachrichtanbekommer,sizeof(adminmachennachrichtanbekommer),"Du hast von %s den Adminrang %i bekommen!",GetPlayerName(playerid),prang);
-
Ja, meine ich.
Werde es bearbeiten