Woran machst du fest ob das Vehicle ein Diesel oder Benziner ist?
Nützliche Codeschnipsel
- breadfish
- Geschlossen
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Woran machst du fest ob das Vehicle ein Diesel oder Benziner ist?
steht in der handling.cfg
http://gta.wikia.com/Handling.cfg/GTASA -
Cool, wusst ich nocht gar nicht. Merkt man aber beim Spielen auch eigentlich nix von
-
#include <a_samp>
#define RESET_ON_CHANGE 10 // Maximal 10x wird das Geld gezählt nach dem verändern danach setzt sich die Liste zurück und eine neue wird erstellt
#define MAX_WARN 3 // 3 mal wird man gewarnt sobald man das Geld einfriert danach > Ban!
forward moneyTask();
main()
{
print("\n----------------------------------");
print(" Anti Money Hack - by [BFX]Explosion");
print("----------------------------------\n");
}
randomStr(len)
{
new rStr[32];
if(len < 0 || len > 31)return rStr;
for(new i = 0;i<len;i++)
{
new key;
do{key = random(90);}
while(key < 65);
rStr[i] = key;
}
return rStr;
}unqKey(playerid)
{
new rkey[16];
do{format(rkey,sizeof rkey,"gk_%s",randomStr(8));}while(GetPVarInt(playerid,rkey) != 0);
return rkey;
}
zusammen(playerid)
{
new nm[16],value;
for(new j = 0;j<GetPVarsUpperIndex(playerid);j++)
{
GetPVarNameAtIndex(playerid,j,nm,sizeof nm);
if(!strcmp(nm,"gk_",true,2))
{
value+=GetPVarInt(playerid,nm);
if(GetPVarInt(playerid,nm) == 0)DeletePVar(playerid,nm);
}
}
return value;
}reset(playerid)
{
new nm[16],value;
for(new j = 0;j<GetPVarsUpperIndex(playerid);j++)
{
GetPVarNameAtIndex(playerid,j,nm,sizeof nm);
if(!strcmp(nm,"gk_",true,2))
{
value+=GetPVarInt(playerid,nm);
DeletePVar(playerid,nm);
}
}
return SetPVarInt(playerid,unqKey(playerid),value);
}
public moneyTask()
{
for(new i = 0;i<MAX_PLAYERS;i++)
{
if(IsPlayerNPC(i) || !IsPlayerConnected(i))continue;
new gt = zusammen(i);
if(!gt)continue;
new warn = 0;
while(GetPlayerMoney(i) != gt)
{
GivePlayerMoney(i,-GetPlayerMoney(i));
GivePlayerMoney(i,gt);
SetPVarInt(i,"_reset",GetPVarInt(i,"_reset")+1);
if(GetPVarInt(i,"_reset") >= RESET_ON_CHANGE)reset(i);
warn++;
if(warn == MAX_WARN)Ban(i);
}
}
}// Funktionen
stock nGivePlayerMoneyEx(playerid,geld)
{
if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid))return 0;
return SetPVarInt(playerid,unqKey(playerid),geld);
}
stock nGetPlayerMoneyEx(playerid)return zusammen(playerid);Hier ein Ausschnitt aus einem meiner Anti Money Cheat Systeme, dieses System ist anders und arbeitet über Zufallsschlüssel die für den Spieler generiert werde, die Beträge werden gesammelt und sobald sich das Geld verändert zusammen gezählt sprich auch Visuell aktualisert. Will der Spieler Geld einfrieren versucht das System die aktualisierung solange bis er die maximale Anzahl an Warnungen erreicht hat und verbannt den Spieler, wird die Anzeige jedoch erfolgreich auf das echte momentane Spielergeld gesetzt so bleibt alles im grünen Bereich.
Nach 10 aktualisierungen werden die Beträge zusammen gezählt und in einen einzelnen Schlüssel transferiert danach verschwinden die anderen und es existiert ein Schlüssel für den Spieler der den echten Betrag hält, natürlich werden weitere Beträge wieder in einer Liste abgespeichert und 10x aktualisiert usw...
Nicht vergessen den Timer moneyTask zu setzen, es reicht wenn er alle 2 Sekunden aktualisiert
Mit einem Zufallsschlüssel/variablen System wird es für den noch Spieler schwerer irgendwas anzurichten, ich werde in nächster Zeit noch etwas nachbessern um es sicherer zu machen
-
Suche derzeit ein System.
Wo ein Radio bei der Position erstellt wird und dann alle in der nähe. denn Sender hören.kann mir einer helfen?.
-
PlayAudioStreamForPlayer?
Schau dir mal die (englische) SA:MP Wiki an. -
englische
Ist down seid gestern abend -
Ist down seid gestern abend
Bei mir gehts?@[LyH]Enrico: such mal im Englishen Forum nach "Boombox"
-
Ist down seid gestern abendNein.
Das Forum, die Wiki nicht.http://wiki.sa-mp.com/wiki/PlayAudioStreamForPlayer
Schau dir die Parameter an
-
Ist down seid gestern abend
Schau mal da...
Enrico
Wenn ich es mir denke wie du es haben willst mach es so:
Object erstellen
Schleife durch alle Spieler,
Abfragen ob sie in den Radius des Radios sind
Sind sie es dann PlayAudioStreamForPlayer
Sind sie es nicht dann
StopAudioStreamForPlayer
Schaltet man das Radio ab, dann löscht du das Object und stoppst den Stream bei den die in den Radius sind -
-
Ist ja gut jetzt
-
Schau mal da...
Enrico
Wenn ich es mir denke wie du es haben willst mach es so:
Object erstellen
Schleife durch alle Spieler,
Abfragen ob sie in den Radius des Radios sind
Sind sie es dann PlayAudioStreamForPlayer
Sind sie es nicht dann
StopAudioStreamForPlayer
Schaltet man das Radio ab, dann löscht du das Object und stoppst den Stream bei den die in den Radius sinddas habe ich nur gebraucht PlayAudioStreamForPlayer danke
-
Hier bin ich mal so nett und nehme euch die Arbeit ab
stock GetWeaponNameById(weaponid)
{
new name[64] = "Fehler";switch(weaponid)
{
case 1: name = "Bass Knuckles";
case 2: name = "Golf Club";
case 3: name = "Nightstick";
case 4: name = "Knife";
case 5: name = "Baseball Bat";
case 6: name = "Shovel";
case 7: name = "Pool Cue";
case 8: name = "Katana";
case 9: name = "Chainsaw";
case 10: name = "Double-ended Dildo";
case 11: name = "Dildo";
case 12: name = "Vibrator";
case 13: name = "Silver Vibrator";
case 14: name = "Flowers";
case 15: name = "Cane";
case 16: name = "Grenade";
case 17: name = "Tear Gas";
case 18: name = "Molotov Cocktail";
case 22: name = "9mm";
case 23: name = "Tazer";
case 24: name = "Desert Eagle";
case 25: name = "Shotgun";
case 26: name = "Sawnoff Shotgun";
case 27: name = "Combat Shotgun";
case 28: name = "Micro SMG / Uzi";
case 29: name = "MP5";
case 30: name = "AK-47";
case 31: name = "M4";
case 32: name = "Tec-9";
case 33: name = "Country Rifle";
case 34: name = "Sniper Rifle";
case 35: name = "RPG";
case 36: name = "HS Rocket";
case 37: name = "Flamethrower";
case 38: name = "Minigun";
case 39: name = "Satchel Charge";
case 40: name = "Detonator";
case 41: name = "Spraycan";
case 42: name = "Fire Extinguisher";
case 43: name = "Camera";
case 44: name = "Nights Vus Goggles";
case 45: name = "Thermal Googles";
case 46: name = "Parachute";
}
return name;Der stock funktioniert auch!
-
Aber es gibt doch schon GetWeaponName. Warum also das Rad neu erfinden?^^
-
Warum also das Rad neu erfinden?^^
Weil -> Important Note: Returns null for ids: 18, 44 and 45. -
Naja aber dann würde es doch reichen wenn man nur bei den 3 den Namen manuell ausgibt. Also iwie so
stock GetWeaponNameByID(wID) {
new wName[32];
switch (wID) {
case 1 .. 17, 22 .. 43, 46: GetWeaponName(wID,wName,32);
case 0: format(wName,32,"Fist");
case 18: format(wName,32,"Molotov Cocktail");
case 44: format(wName,32,"Night Vis Goggles");
case 45: format(wName,32,"Thermal Goggles");
default: format(wName,32,"Invalid Weapon Id");
}
return wName;
} -
Wäre es so nicht viel einfacher?
new WaffenName[][] =
{
"Faust","Schlagring","Golfschläger","Schlagstock","Messer","Baseballschläger","Schaufel","Billiard Schläger","Katana","Kettensäge",
"Dildo","Vibrator","Vibrator","Dildo","Blumen","Stock","Granate","Tränengas","Molotow Coctail","-","-","-",
"9mm Pistole","SDPistole","Deagle","Shotgun","Sawn-Off Shotgun","Combat Shotgun","Micro Uzi","MP5","AK47","M4","Tec9",
"Rifle","Sniper","RPG","Raketenwerfer","Flammenwerfer","Minigun","Rucksackbomben","Detonator","Sprühdose","Feuerlöscher",
"Kamera","Nachtsichtgerät","Infrarotsichtgerät","Fallschirm"
}; -
Wäre es so nicht viel einfacher?
Einfacher ist immer relativ. Einer findet das einfacher, ein anderer das Andere. Du kannst es natürlich so machen, ist auf jeden Fall das Schnellste. Letztendlich aber unerheblich schneller. -
Ich frage mich sowieso was solche Zusatzfunktionen bringen sollen die wieder andere Funktionen aufrufen die im Prinzip das Selbe tun, lieber arbeite ich direkt sprich nativ.