Jump to content

[ TuT ] Soukromnej Chat (např: admin chat, vip chat a pod.)


Aberon

Recommended Posts

Tak hledal jsem to ae nenasel, jestli to uz tu je tak bylo by fajn kdyby to moderator smazal.

 

Krok 1.

 

Defin:

 

#define SCM SendClientMessage
#define GPN GetPlayerName
#define pi playerid

 

#define SCM SendClientMessage - Vubec neni nutny, len skratka pro SendClientMessage, proste "SCM".

#define GPN GetPlayerName - To stejny pouha skratka "GetPlayerName".

#define pi playerid - skratka

 

Stocky:

	stock PlayerName(pi) {
  new name[MAX_PLAYER_NAME];
  GPN(pi, name, MAX_PLAYER_NAME);
  return name;
}
stock Chat(const string[])
{
SMTSCHAT(0x0080FFFF, string);
}
stock SMTSCHAT(c, const string[])
{
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) == 1) // posle tem ktery jsou pripojeni
{
if(alvl[i]) // dejte svoji podminku !!
{
SCM(i, c, string); // odesle zpravu
}
}
}
return 1; // ukonceni 
}

 

Pozor!:

 

stock PlayerName(pi) {

new name[MAX_PLAYER_NAME];

GPN(pi, name, MAX_PLAYER_NAME);

return name;

= Pokud uz mate, tk to tam nedavejte, jestli mate misto PlayerName jmeno a tk, tk si len prepiste z "PlayerName" na to "Jmeno" - priklad. (taky nedavat ae prepsat to v prikazu.)

 

a taky:

 

if(alvl) - dejte tam svoji podminku, kdo nevi a chtel by pro rcon admina tak: dejte misto toho todle: if (!IsPlayerAdmin(i))

 

Krok 2.

 

Samotny Prikaz:

 

Nekam do modu ae ne do publicu!

 

		dcmd_chat(pi, params[]) // prikaz si klidne zmente to "chat"
{
if (!IsPlayerAdmin(playerid)) return  SCM(pi,  0xFB0000FF, "[  Error  ] Nejsi Rcon Admin."); // kdyz neni rcon admin.
{
new string[256];
if(!strlen(params)) return SCM(pi, 0xFB0000FF, "[  Error  ] Pouzij: /chat [Text]"); // kdyz spatne pouzije
format(string, 255, "* [  AdminChat  ][ %s ]: [ %s ]", PlayerName(playerid),params); // Nick + Text
Chat(string); // = Odesle zpravu.
}
return true; // konec
}

 

a nahoru do public OnPlayerCommandText

 

dcmd(chat, 4,cmdtext); // chat - ma 4 pismenko proto 4, kdyby jste to chteli jinak( napr: achat - tak tam bude 5 misto 4).

 

Trosku pro pochopeni:

if (!IsPlayerAdmin(playerid)) return SCM(pi, 0xFB0000FF, "[ Error ] Nejsi Rcon Admin.");

= Podminka a co se stane kdyz ji nesplni

if(!strlen(params)) return SCM(pi, 0xFB0000FF, "[ Error ] Pouzij: /chat [Text]");

= Kdyz napise proste /chat bez textu.

new string[256];

= String, aspon myslim, protoze mi to pokazdy delalo (nezarucuju, kdyztak opravte), max pismen co to napise v chatu.

format(string, 255, "* [ AdminChat ][ %s ]: [ %s ]", PlayerName(pi),params);

= Napise to do chatu to co napsal a pouze adminum, pokud tam bude Chat(string);.

= Uvedu priklad: napsal jsem /chat ahoj - v chatu se objevi:

= * [ AdminChat ][ NoXieroN ]: [ Ahoj ]

no a return snad znate ukonceni.

 

Pokud uz to je tak nic no... problemy piste mozna jsem nekde neco zapomnel, (doufam ze ne, ae vsecko je mozny).

 

a fakt doufam ze to tady neni :d

Link to comment
Share on other sites

Guest [BJ]boban88

hmmm podla mna zbytocnosti + som to tusim videl v helpoch tu a aj na pawnboxu

a myslim ze toto je ovela jednoduchsie

if(cmdtext[1] == '!') {// toto '!'znamena ak da do chatboxu pred spravu ! 
new string[256];
new name[24];
GetPlayerName(playerid, name, 24);
format(string, sizeof(string), "[Admin CHAT] [%d] %s: %s", playerid, name, cmdtext[1]);
for(new i = 0; i < MAX_PLAYERS; i++) {
if(IsPlayerConnected(i)) {
if(AdminLevel[i] > 0) //zmenit na svoju premennu 
SendClientMessage(i, 0xFF0000AA, string);
}
}
return 1;
}

ostatne je vysvetlene vyssie a j cele to ide do onplayercomandtext nad return 0; alebo return SCM podla toho co tam mate

myslim ze toto je jednoduchsie :d

Link to comment
Share on other sites

Proč to takhle roztahovat ? Dyť není snad lehčí např.

dcmd_chat(playerid, params[])
{
    if(VIP[playerid] == 0) return SendClientMessage(playerid, 0xFF0000AA, "Do chatu můžou psát pouze hráči s VIP.");
    if(!strlen(params)) return SendClientMessage(playerid, 0xFF0000AA, "Použij /chat [text]");
    new string[128], name[24];
    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i))
    {
         if(VIP[i] != 0)
         {
              GetPlayerName(i, name, 24);
              format(string, sizeof(string), "VIP chat (%s): %s", name, params);
              SendClientMessage(i, 0xFF0000AA, string);
         }
    }
    return 1;
}
}

A nepotřebuješ k tomu žádný definice nebo stocky.... Myslím že je na několik věcí dávat do TuT stocky, protože to většina nepochopí ;)

Link to comment
Share on other sites

roox ihneď ten string 256 zmaž :d

stock SCHAT(const string[])

{

SMTSCHAT(0x0080FFFF, string);

}

stock SMTSCHAT(c, const string[])

{

for(new i = 0; i <= MAX_PLAYERS; i++)

{

if(IsPlayerConnected(i) == 1) // pošle těm který jsou připojení

{

if(alvl) // dejte svojí podmínku !!

{

SCM(i, c, string); // odešle zprávu

}

}

}

return 1; // ukončení

}

načo 2 ? keď to už chceš automaticky s farbou daj

 

 

   stock Chat(const string[])
  {
  for(new i = 0; i <= MAX_PLAYERS; i++)
  {
  if(IsPlayerConnected(i) == 1) // pošle těm který jsou připojení
  {
  if(alvl[i]) // dejte svojí podmínku !!
  {
  SCM(i, 0xFFFFFFFF, string); // odešle zprávu
  }
  }
  }
  return 1; // ukončení
  }

 

ďalej prečo

if(IsPlayerConnected(i) == 1) ?

je to návratová funkcia o 2 hodnôt (bool)

if(!IsPlayerConnected(i)) return 0;

alebo

if(IsPlayerConnected(i)){

 

...

}

 

 

btw bude to písať undefinited symbol "Chat"

btw pekné to je ;)

Link to comment
Share on other sites

C:\Users\Danny\Desktop\kupalisko.pwn(728) : error 017: undefined symbol "Chat"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

neviete to opraviť? riadok

   	Chat(string);

Link to comment
Share on other sites

nemáš ten stock

 

-- čtv 11. lis 2010 7:11:18 --

 

boban88":hf0fh5lt]hmmm podla mna zbytocnosti + som to tusim videl v helpoch tu a aj na pawnboxu

a myslim ze toto je ovela jednoduchsie

if(cmdtext[1] == '!') {// toto '!'znamena ak da do chatboxu pred spravu ! 
new string[256];
new name[24];
GetPlayerName(playerid, name, 24);
format(string, sizeof(string), "[Admin CHAT] [%d] %s: %s", playerid, name, cmdtext[1]);
for(new i = 0; i < MAX_PLAYERS; i++) {
if(IsPlayerConnected(i)) {
if(AdminLevel[i] > 0) //zmenit na svoju premennu 
SendClientMessage(i, 0xFF0000AA, string);
}
}
return 1;
}

ostatne je vysvetlene vyssie a j cele to ide do onplayercomandtext nad return 0; alebo return SCM podla toho co tam mate

myslim ze toto je jednoduchsie :d

 

nevím, v helpech jsem to neviděl, ani v návodech, jsem tu třetí den

Link to comment
Share on other sites

já to mám pod define...

stock Chat(const string[])
  {
  for(new i = 0; i <= MAX_PLAYERS; i++)
  {
  if(IsPlayerConnected(i) == 1) // pošle těm který jsou připojení
  {
  if(alvl[i]) // dejte svojí podmínku !!
  {
  SCM(i, 0xFFFFFFFF, string); // odešle zprávu
  }
  }
  }
  return 1; // ukončení
  }

 

tohle si tam dej

Link to comment
Share on other sites

   stock PlayerName(pi) {
    new name[MAX_PLAYER_NAME];
    GPN(pi, name, MAX_PLAYER_NAME);
    return name;
  }
  stock SCHAT(const string[])
  {
  SMTSCHAT(0x0080FFFF, string);
  }
  stock SMTSCHAT(c, const string[])
  {
  for(new i = 0; i <= MAX_PLAYERS; i++)
  {
  if(IsPlayerConnected(i) == 1) // posle tem ktery jsou pripojeni
  {
  if(alvl[i]) // dejte svoji podminku !!
  {
  SCM(i, c, string); // odesle zpravu
  }
  }
  }
  return 1; // ukonceni 
  }

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...