Command's:
/hauserstellen | Haus im Spiel erstellen
/deletehaus | Haus im Spiel löschen
/buyhaus | Haus kaufen
/sellhaus | Haus verkaufen
/lockhaus | Haus auf- und zuschließen
Beiträge von RG_
-
-
Soll die Länge des Strings also zwischen 1 und 64 liegen? Dann machs so:
if(strlen(reason) > 1 && strlen(reason) < 64)
//oder
new len = strlen(reason);
if(len >1 && len < 64) -
Ja das sind die Rückgabewerte, die DU angeben kannst, sprich in diesem Callback.
Du kannst darin also die Sync von bestimmten Spielern unterbrechen -
Achso, wenn also dieses Callback so aussieht:
public OnPlayerUpdate(playerid)
{
return 1;
}
Erwartest du also, dass es ggf. mal wenn es grade will 0 ausgibt?
Hier mal mein altes AFK Sys, vllt kann mans ja gebrauchen:
#include a_samp
#undef MAX_PLAYERS
#define MAX_PLAYERS 32
new playertimer, playeractive[MAX_PLAYERS], playerafktime[MAX_PLAYERS], str[50];
forward afkcheck();public OnFilterScriptInit(){
playertimer = SetTimer("afkcheck",1000,1);
}public OnFilterScriptExit(){
KillTimer(playertimer);
}public afkcheck(){
for(new i=0;i<MAX_PLAYERS;i++){
if(!IsPlayerConnected(i)) continue;
if(!playeractive[i]){
playerafktime[i]++;
if(playerafktime[i] >= 4)
{
format(str,50,"Desktop/Menü [%d sek]", playerafktime[i]);
SetPlayerChatBubble(i, str, 0xFFFFFFFF, 50.0, 1000);
}
}
else playerafktime[i] = 0;
playeractive[i] = 0;
}
}public OnPlayerUpdate(playerid){
playeractive[playerid] = 1;
return 1;
} -
Nein Kaliber, so wird das nicht funktionieren
Was willst du denn damit bezwecken, dass du das unter Umständen leere Callback "OnPlayerUpdate" aufrufst?
Du musst via Timer eine Variable immer auf 0 setzen und in OnPlayerUpdate auf 1.
Dann kannst du an der gewünschten Stelle abfragen, ob die Var den Wert 0 (Inaktiv, Menü/Desktop), oder 1 (Aktiv im Spiel) hat. -
Du frägst einfach ab, ob pID der playerid entspricht
dcmd_fesselnweg(playerid,params[])
{
new pID;
if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_RED,"Befehl: /fesseln [playerid]");
if(pID == playerid) return SendClientMessage(playerid,COLOR_RED,"Du kannst dich nicht selbst befreien!");
if(SInfo[playerid][pLeader] == 4 || SInfo[playerid][pMember] == 4 || SInfo[playerid][pLeader] == 1 || SInfo[playerid][pMember] == 1 || SInfo[playerid][pLeader] == 2 || SInfo[playerid][pMember] == 2)
{
new string[300];
new enname[MAX_PLAYERS];
GetPlayerName(pID, pname, sizeof(pname));
GetPlayerName(playerid, enname, sizeof(enname));
format(string, sizeof(string), "* %s hat es geschafft %s zu entfesseln!", enname, pname);
ProxDetector(20.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
SInfo[pID][pFesseln] = 0;
}
else
{
SendClientMessage(playerid,COLOR_RED,"Du bist in keiner Gang/Mafia!");
}
return 1;
} -
So schönen Abend,
Ich habe mich die letzten Tage mal an ein KalkulationsSystem gewagt, mit dem es möglich ist, "komplexe" Rechenaufgaben, wie z.B. "1+(10-20)*-10*-1+200*((10+9)*-8 )*-1" zu berechnen.
Zu Anfang gab es noch Probleme mit der Klammernauflösung, dann mit den Minuszahlen. Aber jetzt funktionierten bisher alle meine Testrechenaufgaben.
Das System ist insgesamt nicht sauber gecodet und wird von mir mit Sicherheit in der nächsten Zeit neu geschrieben. Nur bisher erfüllt es seine Testzwecke gut und ich bin insgesamt zufrieden mit dieser Arbeit.
Es werden alle Rechenregeln befolgt, d.h. Klammern vor Punkt, Punkt vor Strich.
Zudem sind Klammern in der Klammer auch kein Problem. Sollte es noch weitere Fehler geben bitte ich euch, dass ihr sie mir in diesem Thread, oder per PM mitteiltDie Anwendung:
Die Anwendung ist so simpel, wie bei einem handelsüblichem Taschenrechner. Ihr gebt der Methode "Calc" eine Rechnung an, und sie gibt das Ergebnis im Typ int zurück
#include Calculator
public OnFilterScriptInit(){
printf("ERGEBNIS: %d",Calc("1+(10-20)*-10*-1+200*((10+9)*-8)*-1")); // Ergibt 30301
return 1;
}Geplant sind noch Funktionen, wie Hoch, Wurzel, Tangenz, Sinus & Kosinus. Allerdings werde ich mir dafür noch zeit lassen, bis das System effizienter und schöner neu geschrieben wurde
Download:
PasteBin -
Dann such mal schön
24.01.2012 SA-MP.com:
http://forum.sa-mp.com/showpost.php?p=1626554&postcount=3ZitatI use this and it works great
stock GetVehicleSpeed(vehicleid)
{
new Float:xPos[3]:
GetVehicleVelocity(vehicleid, xPos[0], xPos[1], xPos[2]);
return floatround(floatsqroot(xPos[0] * xPos[0] + xPos[1] * xPos[1] + xPos[2] * xPos[2]) * 170.00);
}Edit: Saw your last post, this just reutrn the KMH though..
Nenn mal xPos in Q um...
Dann haste das selbe.Zitat
Ehm...nicht wirklich ocmd hat gerade mal 40 Zeilen und da sagt keiner
dass das ein Script Schnipsel ist, aber bei über 100 Zeilen ist es dann
ein Script Schnipsel ahja40 Zeilen voll durchdachtem Code, der die Handhabung der Cmds deutlicht vereinfacht.
Deine über 100 Zeilen sind dagegen beiweitem nicht so hilfreich, wie ein solches System. -
Die Bewertungen hier kann ich wiedereinmal absolut nicht nachvollziehen...
Die Methode "GetVehicleSpeed" findet man 100% identisch in vielen anderen Beiträgen & Foren, noch dazu ist "IsPlayerAtTanke" auch nicht sonderlich schön gelöst. Ein Array wäre dafür viel geschickter, da einerseits die Methode selbst nicht so vollgestopft ist, und es noch dazu viel leichter fällt, neue Tankstellen zu adden (sei es über ein dynamisches System, oder einfach durch bloßes Einfügen der Zeile).
Zusätzlich ist die Tatsache, dass man nur tanken kann, wenn das Auto über 50% Sprit hat, komplett sinnbefreit. Ich meine, in echt kann ich auch 0.1 Liter tanken, wenn ich Lust und Laune hab...
Zuguterletzt ist zu sagen, dass das keine Include, sondern eher ein zusammengeschusteter Scriptschnipsel ohne nennenswerte Besonderheiten ist. Der Sprit kostet ja nichtmal was und es gibt auch keinerlei Anzeigen, die es für den Spieler ersichtlich machen, wieviel Sprit er denn noch in seinem Auto hat. Hierbei wäre ein von dir erstellter Textdraw vielleicht doch noch sehr wünschenswert gewesen. -
Schonmal versucht zu hupen, gegen zu lenken, oder sonstige andere Keys zu drücken und dabei trotzdem noch zu beschleunigen? Dürfte nicht funktionieren...
Ace spielt damit auf das hier an:
SA:MP WIKI -
Kommt denn eigentlich nach dem /licht Befehl noch was? Denn sonst könntest du auch einfach das mit dem strtok wieder rausnehmen und die if(strcmp Abfrage wiefolg ändern:
if(strcmp(cmdtext,"/licht",true)==0) -
Wo erstellst du denn den String cmd? Ich sehe darin auch keine Zuweisung... Denn wenn cmd leer ist, dann gleicht strcmp einen leeren String mit dem String "/licht" ab, dabei returnt strcmp immer null, falls einer der beiden Strings leer ist.
Die Zuweisung sieht in der Regel (GF) so aus:
public OnPlayerCommandText(cmdtext[])
{
new idx,cmd[64]; //Da bei dir anscheinend cmd global definiert ist, kannst/musst du das "cmd" hier dann auch weglassen, oder die globale Definition löschen
cmd = strtok(cmdtext, idx);
} -
Habe ein Problem und zwar:
Wenn ich das Filterscript drin habe gehen keine Befehle mehr von mir warum?
Änder die Zeile 303 in dem Script von
return 1;zu
return 0;
-
Bannst du ihn denn schon davor? Wenn ja, setz das Ban( ? ); nach dem Senden der Nachricht
-
format(string, sizeof(string), "Admin: %s Grund: %s Zeitpunkt des Bans: (%d-%d-%d)", sendername, (result),month,day,year);
SendClientMessage(playerid,COLOR_LIGHTRED, string);
---------------------------^
---------------------------|
Hier muss der Spieler hin, der die Nachricht erhalten soll (playerid?) -
Das mit dem Dollar zeichen, daran habe ich nicht gedacht, werde ich gleich mal machen, aber mit einer for-Schleife ist das nicht direkt möglich, da man mit strfind arbeiten muss und das nicht einfach erhöhen kann...sprich sowas:
for(new z = strfind(format, "$", true); z<strlen(format); z++)macht gar keinen Sinn, hast du da eine bessere Idee ?
Mach doch:
new pos = strfind(str,"$$",true);
while(pos != -1){
strdel(str,pos,pos);
pos = strfind(str,"$$",true);
} -
if(newstate == PLAYER_STATE_DRIVER)
{
new Vehicle = GetPlayerVehicleID(playerid);
if(Vehicle == rentroller3 ||vehicle == rentroller2 || vehicle == rentroller2)
{
SendClientMessage(playerid,Gelb,"Mit /rentroller kannst du diesen Roller mieten, wenn du nicht möchtest, dann /exit.");
TogglePlayerControllable(playerid,0);
return 1;
}
}
}public OnPlayerExitVehicle(playerid, vehicleid)
{
new Vehicle = GetPlayerVehicleID(playerid);
if(Vehicle == rentroller3 ||vehicle == rentroller2 || vehicle == rentroller2)
{
SetVehicleToRespawn(GetPlayerVehicleID(playerid)); //Respawnt den Rentroller
}
return 1;
} -
@byBSE
Oder:
mysql_SetString("accounts","Verwarnungen","Verwarnungen + 1","Name",SpielerInfo[pID][pName]);Oder alternativ einfach den Query manuell erstellen:
new str[64];
format(str,sizeof str, "UPDATE accounts SET Verwarnungen = Verwarnungen + '1' WHERE Name = '%s'",SpielerInfo[pID][pName]);
mysql_query(str); -
Das könnte man aber durch ein vor der while-Schleife aufgerufenes "fread" leicht beheben.
-
Das mit dem \n ist ganz einfach:
ocmd:test(playerid,params[])
{
new File:BusiBank = fopen("Startup.txt",io_read);
new read[128],str[256];//Größen sollten je nach Inhalt der TXT angepasst werden
while(fread(BusiBank,read))
{
format(str,sizeof str, "%s\n%s",str,read);//Mit jeder neu gelesenen Zeile adden wir einfach manuel ein \n
}
ShowPlayerDialog(playerid,DIALOG_BANLIST,DIALOG_STYLE_MSGBOX,"{33AA33}Bannliste",str,"Okay","");
return 1;
}
//edit, es sollte dann auch str und nicht read ausgegeben werden...