Wie mach ich ein /me befehl
Ich will das mal machen und das wenn man beispiel an der BAr /vodka eingibt komm %s hat Wodka getrunken als wie du bsp. /me hat Wodka getrunken
mfg
Wie mach ich ein /me befehl
Ich will das mal machen und das wenn man beispiel an der BAr /vodka eingibt komm %s hat Wodka getrunken als wie du bsp. /me hat Wodka getrunken
mfg
Willst du jetzt nen /vodka oder /me befehl?
new string[64], name[24];
GetPlayerName(playerid, name, 24);
format(string, 64, "Spieler %s hat 2L Vodka getrunken !",name);
SendClientMessageToAll(0xFFFFFF, string);
SendClientMessageToAll halt nicht, sondern irgentwas was einen Radius bei dir hat
mfg.
Ne ich will ein /me Befehl das mit dem Vodka schaff ich selber
Dann speicher' deinen Namen in einer Variable, formatiere Text mit "format" und sende ihn mit einer beliebigen Farbe mittels "SendClientMessage".
if(strcmp(cmd, "/me", true) == 0)// Command name
{// opening bracket
new length = strlen(cmdtext);// forgot how to explain this
while ((idx < length) && (cmdtext[idx] <= ' ')) {//forgot this part =D
idx++;
}
new offset = idx;
new result[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) {
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;// untill here :)
if(!strlen(result)) { // if he wrote nothing infront of /me
SendClientMessage(playerid, 0xFFFFFFFF, " /me [action]");// sending a message
return 1;// returning 'true'
}
format(string, sizeof(string), "* %s %s", sendername, result);// formatting the message
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);//sending the message to nearby players
return 1;// returning 'true'
}//closing bracket
Google ist was feines
mfg.
rCmd[s]->me(playerid,success,text[64]) //Der Befehl, hab ihn grad mit rcmd gemacht
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,deinefarbe,"Du bist kein Administrator!"); //Das ist ne RCON Abfrage, musst es halt an deine Anpassen. Wichtig ist das ! was not oder halt den Wert 0 wiederspiegelt
/*Kleiner Tipp:
oben ins Script:
#undef MAX_PLAYERS
#define MAX_PLAYERS deineslotanzahl
Musst du halt durch deine Spieleranzahl ergänze, das kann die amx als mehr um die hälfte schrumpfen lassen. */
new i = 0, Float:x,Float:y,Float:z, name[24]; GetPlayerPos(playerid,x,y,z); GetPlayerName(playerid,name,24);
for; i < MAX_PLAYERS; i++) //Die Schleife
{
if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(playerid,15.0,x,y,z)) //Fragt ab ob der Spieler connected ist & in der nähe (15.0) meter von dir ist.
{
new string[100]; format(string,100,"%s %s",name,text);
SendClientMessage(playerid,deinefarbe,string);
}
}
return true;
}
So, oder so ähnlich.
Weiß nisch obs geht, bin kein schleifen-profi.
Die Schleife muss bei dir so aussehen Dominik:
for(i < MAX_PLAYERS; i++)
PS: Nicht jeder nutzt rCmd, ich glaube außer dir und dem Erfinder (vielleicht) keiner
mfg.
if(strcmp(cmd, "/me", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 0)
{
SendClientMessage(playerid, COLOR_GREY, " Du bist noch nicht eingeloggt!");
return 1;
}
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "NUTZUNG: /me [aktion]");
return 1;
}
format(string, sizeof(string), "* %s %s", sendername, result);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
printf("%s", string);
}
return 1;
}
forward ProxDetectorS(Float:radi, playerid, targetid);
public ProxDetectorS(Float:radi, playerid, targetid)
{
if(IsPlayerConnected(playerid)&&IsPlayerConnected(targetid))
{
new Float:posx, Float:posy, Float:posz;
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
//radi = 2.0; //Trigger Radius
GetPlayerPos(targetid, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
tempposz = (oldposz -posz);
//printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}
Verständlicher ist das ganze mit dem stock "strget", welches
den komplizierten strtok Befehl um einiges leichter macht.
Zum Beispiel:
if(strcmp(strget(cmdtext,0),"/me",true)==0)
{
if(strlen(strget(cmdtext,1)==0) return SendClientMessage(playerid,COLOUR_RED,"Benutze: /me [AKTION]"); // Falls jemand nur /me eingibt kommt ein Error.
new aktion[200]=cmdtext; // Die Variable hat nun den kompletten eingegeben Text eingespeichert.
new name[MAX_PLAYER_NAME]; // Variablenerstellung zum Speichern des Namens
GetPlayerName(name,sizeof(name)); // Spielername in die Variable speichern
strdel(aktion,0,4); // wir löschen das /me aus der Variable, damit nicht da steht: "/me USER trinkt Wein."
format(aktion,sizeof(aktion),"%s %s",name,aktion); // Formatieren des Ausgabetextes
new Float:x,Float:y,Float:z; // Variablenerstellung für die Koordinaten des Spielers
GetPlayerPos(playerid,x,y,z); // Koordinaten werden hineingespeichert
for(new i=0;i<MAX_PLAYERS;i++) // ALle Spieler werden überprüft,
{
if(!IsPlayerConnected(i)) continue; // Wenn sie nicht mit dem Server verbunden sind, -> Weiter
if(!IsPlayerInRangeOfPoint(i,5,x,y,z)) continue; // Wenn sie nicht in Reichweite des Spielers sind -> Weiter
SendClientMessage(i,string); // Ausgabetext für alle Spieler die in Reichweite des Punktes sind.
}
return 1;
}
Hoffe ich konnte helfen