• Страница 1 из 1
  • 1
Модератор форума: [east_side]_trane, drifter-dron, valych, admin  
Форум » Pawno » уроки скрипты » [include]iCmds - New system of Commands (*icon-0*)
[include]iCmds - New system of Commands
adminДата: Воскресенье, 30.01.2011, 08:58:21 | Сообщение # 1

Группа: Администраторы
Сообщений: 3869
Введение
Я приступила к командной системы, но Epic Fail
Поэтому я решил создать команду ZCMD, без нескольких Params.

Так вот это
Include:

Code
#define cmd(%1,%2,%3)\
     forward @%1(%2,%3); \
         public @%1(%2,%3)

forward OnPlayerReceivedCommand(iPlayer,cmdtext[],sucess);
public OnPlayerReceivedCommand(iPlayer,cmdtext[],sucess)
{

     return true;
}

public
     OnPlayerCommandText(iPlayer,cmdtext[])
{
     if(strfind(cmdtext, " ", true) == -1)
     {
         cmdtext[0] = '@';
         return CallLocalFunction("OnPlayerReceivedCommand","isd",iPlayer,cmdtext,CallLocalFunction(cmdtext,"is",playerid," "));
     }

     new iLoop = 0,iSpaces = 0,iStr[32];
     while(iSpaces != 1) if(cmdtext[++iLoop] == ' ') ++iSpaces;
     ++iLoop,format(iStr,32,cmdtext[iLoop]),cmdtext[iLoop - 1] = '\0';
     printf("Cmd: %s | Param: %s",cmdtext,iStr);
     return CallLocalFunction("OnPlayerReceivedCommand","isd",iPlayer,cmdtext,CallLocalFunction(cmdtext,"is",playerid,iStr));
}

Например, для Использование sscanf:
Code
//In Final Command
cmd(ban,iPlayer,params[])
{   
     if (!IsPlayerAdmin(iPlayer))
         return SendClientMessage(iPlayer, VERMELHO, "[ERROR] Not Admin");

     new id,message[64];
     if (sscanf(params, "us[64]", id,message))
         return SendClientMessage(iPlayer,AMARELO, "Use: /ban [id/nick] [reason]");

     if (!IsPlayerConnected(id))
         return SendClientMessage(iPlayer,VERMELHO, "[ERRO] Player is Offline");

     if (id  == iPlayer)
         return SendClientMessage(iPlayer,VERMELHO, "[ERRO] Not ban your");

     BanEx(id,message);
     return true;
}

Тестирование?
Code
#include "../Includes1/a_samp.inc"

#define icmd(%1,%2,%3)\
     forward @%1(%2,%3); \
         public @%1(%2,%3)

public OnFilterScriptInit()
{
     #define MAX_TEST (990000)
     
     // ICMD TEST
     new dcmdtest = GetTickCount();
     for(new a; a < MAX_TEST; ++a)
         OnPlayeriCmdCommandText(0,"/icmd mans");
     printf("# ICMD in %d",GetTickCount() - dcmdtest);

     //ZCMD TEST
     new zcmdtest = GetTickCount();
     for(new a; a < MAX_TEST; ++a)
         OnPlayerCommandText(0, "/zcmd test");
     printf("# ZCMD in %d",GetTickCount() - zcmdtest);
     return true;
}

//Include ICMD
forward OnPlayerReceivedCommandICMD(iPlayer,cmdtext[],sucess);
public OnPlayerReceivedCommandICMD(iPlayer,cmdtext[],sucess)
{

     return true;
}

forward OnPlayeriCmdCommandText(iPlayer,cmdtext[]);
public  OnPlayeriCmdCommandText(iPlayer,cmdtext[])
{
     if(strfind(cmdtext, " ", true) == -1)
     {
         cmdtext[0] = '@';
         return CallLocalFunction("OnPlayerReceivedCommandICMD","isd",iPlayer,cmdtext,CallLocalFunction(cmdtext,"is",iPlayer," "));
     }
     new iLoop = 0,iSpaces = 0,iStr[32];
     while(iSpaces != 1) if(cmdtext[++iLoop] == ' ') ++iSpaces;
     ++iLoop,format(iStr,32,cmdtext[iLoop]),cmdtext[iLoop - 1] = '\0';
     return CallLocalFunction("OnPlayerReceivedCommandICMD","isd",iPlayer,cmdtext,CallLocalFunction(cmdtext,"is",iPlayer,iStr));
}

//INCLUDE ZCMD
#define MAX_FUNC_NAME (32)

#define zCOMMAND:%1(%2)          \
             forward zcmd_%1(%2); \
             public zcmd_%1(%2)

#define zCMD:%1(%2) \
             zCOMMAND:%1(%2)

#define zcommand(%1,%2,%3) \
             zCOMMAND:%1(%2, %3)

#define zcmd(%1,%2,%3) \
             zCOMMAND:%1(%2, %3)

#if !defined isnull
     #define isnull(%1) \
                 ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
#endif

forward OnPlayerCommandReceived(iPlayer, cmdtext[]);
forward OnPlayerCommandPerformed(iPlayer, cmdtext[], success);

static
     bool:zcmd_g_HasOPCS = false,
     bool:zcmd_g_HasOPCE = false;

forward zcmd_OnFilterScriptInit();
public OnGameModeInit()
{
     zcmd_g_HasOPCS = funcidx("OnPlayerCommandReceived") != -1;
     zcmd_g_HasOPCE = funcidx("OnPlayerCommandPerformed") != -1;
     if (funcidx("zcmd_OnGameModeInit") != -1)
     {
         return CallLocalFunction("zcmd_OnGameModeInit", "");
     }
     return 1;
}

public OnPlayerCommandText(iPlayer, cmdtext[])
{
     if (zcmd_g_HasOPCS && !CallLocalFunction("OnPlayerCommandReceived", "is", iPlayer, cmdtext))
     {
         return 1;
     }
     new
         pos,
         funcname[MAX_FUNC_NAME];
     while (cmdtext[++pos] > ' ')
     {
         funcname[pos-1] = tolower(cmdtext[pos]);
     }
     format(funcname, sizeof(funcname), "zcmd_%s", funcname);
     while (cmdtext[pos] == ' ') pos++;
     if (!cmdtext[pos])
     {
         if (zcmd_g_HasOPCE)
         {
             return CallLocalFunction("OnPlayerCommandPerformed", "isi", iPlayer, cmdtext, CallLocalFunction(funcname, "is", iPlayer, "\1"));
         }
         return CallLocalFunction(funcname, "is", iPlayer, "\1");
     }
     if (zcmd_g_HasOPCE)
     {
         return CallLocalFunction("OnPlayerCommandPerformed", "isi", iPlayer, cmdtext, CallLocalFunction(funcname, "is", iPlayer, cmdtext[pos]));
     }
     return CallLocalFunction(funcname, "is", iPlayer, cmdtext[pos]);
}

//COMMANDS
zcmd(zcmd,iPlayer,params[])
{
     return true;
}

icmd(zcmd,iPlayer,params[])
{
     return true;
}

Источник:sa-mp.com


zm-jail.ru

Разработка сайта samp-pawno.ru


 
СообщениеВведение
Я приступила к командной системы, но Epic Fail
Поэтому я решил создать команду ZCMD, без нескольких Params.

Так вот это
Include:

Code
#define cmd(%1,%2,%3)\
     forward @%1(%2,%3); \
         public @%1(%2,%3)

forward OnPlayerReceivedCommand(iPlayer,cmdtext[],sucess);
public OnPlayerReceivedCommand(iPlayer,cmdtext[],sucess)
{

     return true;
}

public
     OnPlayerCommandText(iPlayer,cmdtext[])
{
     if(strfind(cmdtext, " ", true) == -1)
     {
         cmdtext[0] = '@';
         return CallLocalFunction("OnPlayerReceivedCommand","isd",iPlayer,cmdtext,CallLocalFunction(cmdtext,"is",playerid," "));
     }

     new iLoop = 0,iSpaces = 0,iStr[32];
     while(iSpaces != 1) if(cmdtext[++iLoop] == ' ') ++iSpaces;
     ++iLoop,format(iStr,32,cmdtext[iLoop]),cmdtext[iLoop - 1] = '\0';
     printf("Cmd: %s | Param: %s",cmdtext,iStr);
     return CallLocalFunction("OnPlayerReceivedCommand","isd",iPlayer,cmdtext,CallLocalFunction(cmdtext,"is",playerid,iStr));
}

Например, для Использование sscanf:
Code
//In Final Command
cmd(ban,iPlayer,params[])
{   
     if (!IsPlayerAdmin(iPlayer))
         return SendClientMessage(iPlayer, VERMELHO, "[ERROR] Not Admin");

     new id,message[64];
     if (sscanf(params, "us[64]", id,message))
         return SendClientMessage(iPlayer,AMARELO, "Use: /ban [id/nick] [reason]");

     if (!IsPlayerConnected(id))
         return SendClientMessage(iPlayer,VERMELHO, "[ERRO] Player is Offline");

     if (id  == iPlayer)
         return SendClientMessage(iPlayer,VERMELHO, "[ERRO] Not ban your");

     BanEx(id,message);
     return true;
}

Тестирование?
Code
#include "../Includes1/a_samp.inc"

#define icmd(%1,%2,%3)\
     forward @%1(%2,%3); \
         public @%1(%2,%3)

public OnFilterScriptInit()
{
     #define MAX_TEST (990000)
     
     // ICMD TEST
     new dcmdtest = GetTickCount();
     for(new a; a < MAX_TEST; ++a)
         OnPlayeriCmdCommandText(0,"/icmd mans");
     printf("# ICMD in %d",GetTickCount() - dcmdtest);

     //ZCMD TEST
     new zcmdtest = GetTickCount();
     for(new a; a < MAX_TEST; ++a)
         OnPlayerCommandText(0, "/zcmd test");
     printf("# ZCMD in %d",GetTickCount() - zcmdtest);
     return true;
}

//Include ICMD
forward OnPlayerReceivedCommandICMD(iPlayer,cmdtext[],sucess);
public OnPlayerReceivedCommandICMD(iPlayer,cmdtext[],sucess)
{

     return true;
}

forward OnPlayeriCmdCommandText(iPlayer,cmdtext[]);
public  OnPlayeriCmdCommandText(iPlayer,cmdtext[])
{
     if(strfind(cmdtext, " ", true) == -1)
     {
         cmdtext[0] = '@';
         return CallLocalFunction("OnPlayerReceivedCommandICMD","isd",iPlayer,cmdtext,CallLocalFunction(cmdtext,"is",iPlayer," "));
     }
     new iLoop = 0,iSpaces = 0,iStr[32];
     while(iSpaces != 1) if(cmdtext[++iLoop] == ' ') ++iSpaces;
     ++iLoop,format(iStr,32,cmdtext[iLoop]),cmdtext[iLoop - 1] = '\0';
     return CallLocalFunction("OnPlayerReceivedCommandICMD","isd",iPlayer,cmdtext,CallLocalFunction(cmdtext,"is",iPlayer,iStr));
}

//INCLUDE ZCMD
#define MAX_FUNC_NAME (32)

#define zCOMMAND:%1(%2)          \
             forward zcmd_%1(%2); \
             public zcmd_%1(%2)

#define zCMD:%1(%2) \
             zCOMMAND:%1(%2)

#define zcommand(%1,%2,%3) \
             zCOMMAND:%1(%2, %3)

#define zcmd(%1,%2,%3) \
             zCOMMAND:%1(%2, %3)

#if !defined isnull
     #define isnull(%1) \
                 ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
#endif

forward OnPlayerCommandReceived(iPlayer, cmdtext[]);
forward OnPlayerCommandPerformed(iPlayer, cmdtext[], success);

static
     bool:zcmd_g_HasOPCS = false,
     bool:zcmd_g_HasOPCE = false;

forward zcmd_OnFilterScriptInit();
public OnGameModeInit()
{
     zcmd_g_HasOPCS = funcidx("OnPlayerCommandReceived") != -1;
     zcmd_g_HasOPCE = funcidx("OnPlayerCommandPerformed") != -1;
     if (funcidx("zcmd_OnGameModeInit") != -1)
     {
         return CallLocalFunction("zcmd_OnGameModeInit", "");
     }
     return 1;
}

public OnPlayerCommandText(iPlayer, cmdtext[])
{
     if (zcmd_g_HasOPCS && !CallLocalFunction("OnPlayerCommandReceived", "is", iPlayer, cmdtext))
     {
         return 1;
     }
     new
         pos,
         funcname[MAX_FUNC_NAME];
     while (cmdtext[++pos] > ' ')
     {
         funcname[pos-1] = tolower(cmdtext[pos]);
     }
     format(funcname, sizeof(funcname), "zcmd_%s", funcname);
     while (cmdtext[pos] == ' ') pos++;
     if (!cmdtext[pos])
     {
         if (zcmd_g_HasOPCE)
         {
             return CallLocalFunction("OnPlayerCommandPerformed", "isi", iPlayer, cmdtext, CallLocalFunction(funcname, "is", iPlayer, "\1"));
         }
         return CallLocalFunction(funcname, "is", iPlayer, "\1");
     }
     if (zcmd_g_HasOPCE)
     {
         return CallLocalFunction("OnPlayerCommandPerformed", "isi", iPlayer, cmdtext, CallLocalFunction(funcname, "is", iPlayer, cmdtext[pos]));
     }
     return CallLocalFunction(funcname, "is", iPlayer, cmdtext[pos]);
}

//COMMANDS
zcmd(zcmd,iPlayer,params[])
{
     return true;
}

icmd(zcmd,iPlayer,params[])
{
     return true;
}

Источник:sa-mp.com

Автор - admin
Дата добавления - 30.01.2011 в 08:58:21
Форум » Pawno » уроки скрипты » [include]iCmds - New system of Commands (*icon-0*)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка страницы, займет меньше минуты...
Загрузка...

Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
Система телефонов поломалась
Не в себе
фильм скалайн
Трансформеры 3
форсаж 6
Ищу [FS]Для админок на сервер
нужны координаты карты для отметки зон...
Помогите найти мод
pawno урок автоматические ворота
обращение к скриптерам.
Вопросы по скриптингу
Ваши ошибки при компиляции GM/FS

Вопросы по скриптингу

(1081)

Считаем до 1000

(274)

Ваши ошибки при компиляция gm

(260)

Набор в команду

(80)

Ваши ошибки при компиляции GM/FS

(71)

вопроосы по скриптингу от 22.04.2013

(64)

Баннеробмен

(64)

несколько команд на samp 0.3 c

(64)

Оценки сайта samp-pawno.ru

(55)

Заказ хостинга

(51)

Набор в команду(форум)

(45)

Урок №61 по созданию системы авто для GodFather

(45)

admin

(3869)

[east_side]_trane

(443)

TWiX

(316)

valych

(501)

drifter-dron

(477)

danik_rok

(317)

Dimka_71rus

(360)

Drifter96

(300)

MaNb9K

(220)

[MTA]MaPeR5518

(181)

Dima_Tkach

(107)

Nik_Ull

(184)

system32xzxz

(Четверг 09:25:24)

torbin169

(Суббота 23:09:29)

kuchuk_00

(Суббота 17:10:14)

artem_boyko_3

(Суббота 15:57:37)

greggelbak

(Среда 18:29:37)

vladisvlavs

(Среда 13:51:57)

add02102002

(Понедельник 22:37:15)

Диман221

(Понедельник 18:12:45)

almas051004

(Воскресенье 11:05:32)

megasuccessms

(Суббота 14:15:36)

nawe

(Пятница 22:25:23)

swoysb

(Пятница 14:55:29)

Вверх
13:50:48
ОбновитьСмайлыУправление мини-чатом
ЧАТ-PAWNO
2010-2024

vkontakte :samp-pawno.ru: