LuxurY forum (scripting SA-MP)

Объявление

с 29 марта 2007 года
LuxurY forum - крупнейший российский форум скриптинга в PAWNO
Новый форум
Задавайте свои вопросы

Архив скриптов


Наша кнопка:
LuxurY forum :: Scripting SA-MP
Код:

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » LuxurY forum (scripting SA-MP) » Обучающие статьи » Полезные команды


Полезные команды

Сообщений 1 страница 22 из 22

1

ВСЕ КОМАНДЫ ВСТАВЛЯЮТСЯ в
public OnPlayerCommandText(playerid, cmdtext[])
{

СЮДА

return 0;
}

--------------------------------------------------------------------------------------------------------------------

STROK (в самый конец скрипта)

Код:
strtok(const string[], &index)
{
	new length = strlen(string);
	while ((index < length) && (string[index] <= ' '))
	{
index++;
	}

	new offset = index;
	new result[20];
	while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
	{
result[index - offset] = string[index];
index++;
	}
	result[index - offset] = EOS;
	return result;
}

/lock ЗАКРЫТИЕ ДВЕРЕЙ В МАШИНАХ

Код:
if (strcmp(cmdtext, "/lock", true)==0)
	{
if(IsPlayerInAnyVehicle(playerid))
{
	State=GetPlayerState(playerid);
	if(State!=PLAYER_STATE_DRIVER)
	{
SendClientMessage(playerid,COLOR_GREY,"You can only lock the doors as the driver.");
return 1;
	}
	new i;
	for(i=0;i<MAX_PLAYERS;i++)
	{
if(i != playerid)
{
	SetVehicleParamsForPlayer(GetPlayerVehicleID(playerid),i, 0, 1);
}
	}
	SendClientMessage(playerid, COLOR_GREY, "Vehicle locked!");
	GetPlayerPos(playerid,X,Y,Z);
	PlayerPlaySound(playerid,1056,X,Y,Z);
}
else
{
	SendClientMessage(playerid, COLOR_GREY, "You're not in a vehicle!");
}
	return 1;
	}

/unlock ОТКРЫТИЕ ДВЕРЕЙ В МАШИНАХ

Код:
	
if (strcmp(cmdtext, "/unlock", true)==0)
	{
if(IsPlayerInAnyVehicle(playerid))
{
	State=GetPlayerState(playerid);
	if(State!=PLAYER_STATE_DRIVER)
	{
SendClientMessage(playerid,COLOR_GREY,"You can only unlock the doors as the driver.");
return 1;
	}
	new i;
	for(i=0;i<MAX_PLAYERS;i++)
	{
SetVehicleParamsForPlayer(GetPlayerVehicleID(playerid),i, 0, 0);
	}
	SendClientMessage(playerid, COLOR_GREY, "Vehicle unlocked!");
	GetPlayerPos(playerid,X,Y,Z);
	PlayerPlaySound(playerid,1057,X,Y,Z);
}
else
{
	SendClientMessage(playerid, COLOR_GREY, "You're not in a vehicle!");
}
	return 1;
	}

ПАДЕНИЕ С 800 ФУТОВ (с парашютом)

Код:
if(strcmp(cmd, "/bigfall", true) == 0) {
if(IsPlayerInAnyVehicle(playerid)) {
        new Float:X;
	new Float:Y;
	new Float:Z;
        new VehicleID;
        GetPlayerPos(playerid, X, Y, Z);
        VehicleID = GetPlayerVehicleID(playerid);
	SetVehiclePos(VehicleID, X, Y, Z + 800.00);
	SetPlayerFacingAngle(playerid,Ang);
	GivePlayerWeapon(playerid,46,1);
} else {
	new Float:X;
	new Float:Y;
	new Float:Z;
	GetPlayerPos(playerid, X, Y, Z);
	SetPlayerPos(playerid, X, Y, Z + 800.00);
	SetPlayerFacingAngle(playerid,Ang);
	GivePlayerWeapon(playerid,46,1);
	GameTextForPlayer(playerid, "~w~Weeeeeeeeeeeeeeeeee!!",8000,5);
  }
	return 1;
}

КОМАНДА ДЛЯ ОЧИСТКИ ЧАТА - /clearchat

Код:
if(strcmp(cmdtext,"/clearchat",true)==0) // Chat window is gone, fomg!
{
	SendClientMessage(playerid,COLOR_GREY," ");
	SendClientMessage(playerid,COLOR_GREY," ");
	SendClientMessage(playerid,COLOR_GREY," ");
	SendClientMessage(playerid,COLOR_GREY," ");
	SendClientMessage(playerid,COLOR_GREY," ");
	SendClientMessage(playerid,COLOR_GREY," ");
	SendClientMessage(playerid,COLOR_GREY," ");
	SendClientMessage(playerid,COLOR_GREY," ");
	SendClientMessage(playerid,COLOR_GREY," ");
                        SendClientMessage(playerid,COLOR_GREY," ");
return 1;
}

СМЕНА ВРЕМЕНИ СУТОК НА НОЧЬ

Код:
if (strcmp(cmdtext, "/night", true)==0)
	{
	    /* Do something here */
	    SetWorldTime(0);
	    GameTextForPlayer(playerid,"~b~notte ~b~oscura ~g~LOL",5000,5);
	    return 1;
	}

СМЕНА ВРЕМЕНИ СУТОК НА ДЕНЬ

Код:
 if (strcmp(cmdtext, "/day", true)==0)
   {
       /* Do something here */
       SetWorldTime(12);
       GameTextForPlayer(playerid,"~p~Giorno ~p~Felice ~p~LOL",5000,5);
       return 1;
   }

КОМАНДА ДЛЯ АДМИНОВ /slap отнять у игрока 20 HP

Код:
        new string[256];
    new adminname[256];
    new playername[256];
    new id;
        new tmp[256];
        new cmd[256];
        new Float:health, Float:x, Float:y, Float:z;
 
        new idx;
 
        cmd = strtok(cmdtext, idx);
        if(strcmp(cmd, "/slap", true) == 0 && IsPlayerAdmin(playerid)==1) {
 
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp)) {
                SendClientMessage(playerid, COLOR_WHITE, "Usage: /slap <playerid>");
                return 1;
                }
                if(!IsPlayerAdmin(playerid))
                {
                    SendClientMessage(playerid, COLOR_WHITE, "You haven't got any admin rights");
                    return 1;
                }
                id = strval(tmp);
                if(IsPlayerConnected(id)) {
                
                    GetPlayerPos(id, x, y, z);
                    PlayerPlaySound(id, 1190, x, y, z);
                        SetPlayerPos(id, x, y, z+2);
                        GetPlayerHealth(id, health);
                        SetPlayerHealth(id, health-20);
                    GetPlayerName(id, playername, 256);
                    GetPlayerName(playerid, adminname, 256);
 
                        format(string, sizeof(string), "%s slaps %s with a large fish!! /*You can also add some other text here to your likings..*/", adminname, playername);
                        SendClientMessageToAll(COLOR_PINK, string);
                        /*format(string, sizeof(string), "%s slapped you!!", adminname);
                        SendClientMessage(id, COLOR_WHITE, string);*/
                }
                else {
                    format(string, sizeof(string), "%d is not an active player.", id);
                    SendClientMessage(playerid, COLOR_WHITE, string);
                }
                return 1;
         }

ТЕЛЕПОРТИРОВАТЬ ВСЕХ ИГРОКОВ

Код:
if(strcmp(cmdtext, "/getallplayers", true) == 0) {
new Float:x;
new Float:y;
new Float:z;
        for(new i=0; i<MAX_PLAYERS; i++)
if(IsPlayerConnected(i)) {
    GetPlayerPos(playerid,x,y,z);
SetPlayerPos(i,x,y,z+10);
}
return 1;
}

100% здоровье

Код:
if (strcmp(cmdtext, "/health", true)==0)
{
if(GetPlayerMoney(playerid) > 4999){
GivePlayerMoney(playerid, GetPlayerMoney(playerid) - 5000);
SetPlayerHealth(playerid,100);
}
else{
SendClientMessage(playerid,COLOR_RED,"Not enough money.");
}
return 1;
}

ПОКАЗАТЬ ДАТУ И ВРЕМЯ НА СЕРВЕРЕ /time

Код:
new string[MAX_STRING];
if (strcmp(cmdtext, "/time", true)==0)
        {
            new Hours;
            new Minutes;
            new Seconds;
            new Days;
            new Months;
            new Years;
            gettime(Hours, Minutes, Seconds);
            getdate(Years, Months, Days);
            format(string, sizeof(string), "Date: %d/%d/%d, Time %d:%d:%d", Days,Months,Years,Hours,Minutes,Seconds);
                SendClientMessage(playerid,COLOR_GREEN,string);
            return 1;
}

100% здоровье на халяву

Код:
if (strcmp(cmdtext, "/health", true)==0)
    {
          SetPlayerHealth(playerid, 100);

        return 1;
    }

Деньги на халяву

Код:
if (strcmp(cmdtext, "/cash", true)==0)
{
      SendClientMessage(playerid,COLOR_GREEN,"Ты богатый чувак!");
    GivePlayerMoney (playerid, 1000000);
    return 1;
}

Бензин

В самом начале добавить:

Код:
    
    #define COLOR_RED 0xAA3333AA //
    #define COLOR_WHITE 0xFFFFFFAA //
    #define TIME 3000 // время за сколько бензин кончится
    #define AMOUNT 100 //
    new Petrol[MAX_PLAYERS];

Функция бензина

Код:
    public CheckFuel(playerid)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
      new Ptmess[32];
    if(GetPlayerState(i) == 2)
      {
      if(Petrol[i] >= 1)
       {
       Petrol[i]--;
       format(Ptmess, sizeof(Ptmess), "~w~Petrol ->~r~%d", Petrol[i]);
       GameTextForPlayer(i, Ptmess, 500, 4);
       }
       else
       {
       RemovePlayerFromVehicle(i);
       SendClientMessage(i, COLOR_RED, "You ran out of petrol");
       }
     
      if(Petrol[i] >=51)
       {
       format(Ptmess, sizeof(Ptmess), "~w~Petrol ->%d", Petrol[i]);
       GameTextForPlayer(i, Ptmess, 500, 4);
       }
      }
    }
    return 1;
    }

В OnGameModeInit:

   

Код:
SetTimer("CheckFuel", TIME, 1);

В OnPlayerSpawn добавить :

   

Код:
for(new p=0;p<MAX_PLAYERS;p++)
    {
    Petrol[p] = AMOUNT;
    }

В OnPlayerCommandText добавить:

   

Код:
 if(strcmp(cmd, "/fuel", true) == 0)
    {
    for(new p=0;p<MAX_PLAYERS;p++)
      {
      if(GetPlayerMoney(p) > 199)
       {
       Petrol[p] = AMOUNT;
       GivePlayerMoney(p,-200);// - 200 - цена бензина
       SendClientMessage(p, COLOR_WHITE, ">Тачка заправлена");
       }
       else
       {
       SendClientMessage(p, COLOR_RED, ">Недостаточно денег!");
       }
      }
    return 1;
    }

Команда для смены цвета игрока

Код:
new playerColors[100] = { 
0xFF8C13FF,0xC715FFFF,0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xf0e68cFF,0x778899FF,0xFF1493FF,0xF4A460FF,0xEE82EEFF,0xFFD720FF, 
0x8b4513FF,0x4949A0FF,0x148b8bFF,0x14ff7fFF,0x556b2fFF,0x0FD9FAFF,0x10DC29FF,0x534081FF,0x0495CDFF,0xEF6CE8FF,0xBD34DAFF, 
0x247C1BFF,0x0C8E5DFF,0x635B03FF,0xCB7ED3FF,0x65ADEBFF,0x5C1ACCFF,0xF2F853FF,0x11F891FF,0x7B39AAFF,0x53EB10FF,0x54137DFF, 
0x275222FF,0xF09F5BFF,0x3D0A4FFF,0x22F767FF,0xD63034FF,0x9A6980FF,0xDFB935FF,0x3793FAFF,0x90239DFF,0xE9AB2FFF,0xAF2FF3FF, 
0x057F94FF,0xB98519FF,0x388EEAFF,0x028151FF,0xA55043FF,0x0DE018FF,0x93AB1CFF,0x95BAF0FF,0x369976FF,0x18F71FFF,0x4B8987FF, 
0x491B9EFF,0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,0x2D74FDFF,0x3C1C0DFF,0x12D6D4FF,0x48C000FF,0x2A51E2FF,0xE3AC12FF, 
0xFC42A8FF,0x2FC827FF,0x1A30BFFF,0xB740C2FF,0x42ACF5FF,0x2FD9DEFF,0xFAFB71FF,0x05D1CDFF,0xC471BDFF,0x94436EFF,0xC1F7ECFF, 
0xCE79EEFF,0xBD1EF2FF,0x93B7E4FF,0x3214AAFF,0x184D3BFF,0xAE4B99FF,0x7E49D7FF,0x4C436EFF,0xFA24CCFF,0xCE76BEFF,0xA04E0AFF, 
0x9F945CFF,0xDCDE3DFF,0x10C9C5FF,0x70524DFF,0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,0xE59338FF,0xEEDC2DFF,0xD8C762FF, 
0x3FE65CFF 
}; 


public OnPlayerCommandText(playerid, cmdtext[]) 
{ 
   new idx; 
   new cmd[256]; 

   cmd = strtok(cmdtext, idx); 

   if(strcmp(cmd, "/color", true) == 0) {
      GetPlayerName(playerid, playername, sizeof(playername));
      tmp = strtok(cmdtext, idx);

       if(!strlen(tmp))
       {
       SendClientMessage(playerid, COLOR_WHITE, "* Набери: /color [0-99]");
         return 1;
       }

      if (strval(tmp)>99||strval(tmp)<0)
      {
	  SendClientMessage(playerid, COLOR_WHITE, "* Набери: /color [0-99]");
         return 1;
      }
      else
      {
         SetPlayerColor(playerid,playerColors[strval(tmp)]);
         SendClientMessage(playerid, playerColors[strval(tmp)], "* Вы поменяли цвет.");
         return 1;
      }
return 1;
	}

Команда /givegun

Код:
if((strcmp(cmd, "/givegun", true) == 0) && (IsPlayerAdmin(playerid)))
	{
	    new tmp[256];
tmp = strtok(cmdtext, idx);
new gunID = strval(tmp);

if(!strlen(tmp))
{
	SendClientMessage(playerid,COLOR_RED,"***Используй: /givegun [gunID] [playerID]");
}
else
{
	if(gunID > 46)
	{
SendClientMessage(playerid,COLOR_RED,"***Ошибка: ID оружия идет от 1 до 46");
	}
	else
	{
tmp = strtok(cmdtext, idx);
new pID = strval(tmp);
new string[256];
if(strlen(tmp))
{
	if(IsPlayerConnected(pID))
	{
format(string, sizeof(string), "***Админ %s дал вам оружее - %s.", PlayerName(playerid), WeaponNAME(gunID));
SendClientMessage(pID,COLOR_WHITE, string);
GivePlayerWeapon(pID,gunID,3000);
	
format(string, sizeof(string), "***Вы дали %s оружее - %s.", PlayerName(pID), WeaponNAME(gunID));
SendClientMessage(playerid,COLOR_WHITE, string);
	}
	else
	{
SendClientMessage(playerid,COLOR_WHITE, "***Нет такого юзера.");
	}
}
else
{
	format(string, sizeof(string), "***Админ всем дал оружее - %s.", WeaponNAME(gunID));
	SendClientMessageToAll(COLOR_WHITE, string);
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
GivePlayerWeapon(i,gunID,3000);
	}
}

	}
}
return 1;
	}

Команда исчезновения на карте и появления

В начало:

Код:
new playerColors[100] = {
0xFF8C13FF,0xC715FFFF,0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xf0e68cFF,0x778899FF,0xFF1493FF,0xF4A460FF,0xEE82EEFF,0xFFD720FF,
0x8b4513FF,0x4949A0FF,0x148b8bFF,0x14ff7fFF,0x556b2fFF,0x0FD9FAFF,0x10DC29FF,0x534081FF,0x0495CDFF,0xEF6CE8FF,0xBD34DAFF,
0x247C1BFF,0x0C8E5DFF,0x635B03FF,0xCB7ED3FF,0x65ADEBFF,0x5C1ACCFF,0xF2F853FF,0x11F891FF,0x7B39AAFF,0x53EB10FF,0x54137DFF,
0x275222FF,0xF09F5BFF,0x3D0A4FFF,0x22F767FF,0xD63034FF,0x9A6980FF,0xDFB935FF,0x3793FAFF,0x90239DFF,0xE9AB2FFF,0xAF2FF3FF,
0x057F94FF,0xB98519FF,0x388EEAFF,0x028151FF,0xA55043FF,0x0DE018FF,0x93AB1CFF,0x95BAF0FF,0x369976FF,0x18F71FFF,0x4B8987FF,
0x491B9EFF,0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,0x2D74FDFF,0x3C1C0DFF,0x12D6D4FF,0x48C000FF,0x2A51E2FF,0xE3AC12FF,
0xFC42A8FF,0x2FC827FF,0x1A30BFFF,0xB740C2FF,0x42ACF5FF,0x2FD9DEFF,0xFAFB71FF,0x05D1CDFF,0xC471BDFF,0x94436EFF,0xC1F7ECFF,
0xCE79EEFF,0xBD1EF2FF,0x93B7E4FF,0x3214AAFF,0x184D3BFF,0xAE4B99FF,0x7E49D7FF,0x4C436EFF,0xFA24CCFF,0xCE76BEFF,0xA04E0AFF,
0x9F945CFF,0xDCDE3DFF,0x10C9C5FF,0x70524DFF,0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,0xE59338FF,0xEEDC2DFF,0xD8C762FF,
0x3FE65CFF
};

В OnPlayerSpawn:

Код:
SetPlayerColor(playerid, playerColors[playerid]);

В OnPlayerCommandText:

Код:
if(strcmp(cmd, "/invisible", true) == 0) {
  SetPlayerColor(playerid, 0x00000000);
    SendClientMessage(playerid, COLOR_ORANGE, "Ты невидимка");
    return 1;
}

else if(strcmp(cmd, "/visible", true) == 0) {
  SetPlayerColor(playerid, playerColors[playerid]);
    SendClientMessage(playerid, COLOR_ORANGE, "Тебя видно");
    return 1;
}

0

2

на счет времени суток, мне кажется эффективнее исползовать это:
в main () писать:

Код:
SetTimer("TimeUpdate",2000, true);

дальше где-нибудь вставить

Код:
public TimeUpdate(){
new h,m,s;
gettime(h,m,s);
if (h>=6 && h<10)
{
SetWorldTime(6);
}
if (h>=10 && h<18)
{
SetWorldTime(14);
}
if (h>=18 && h<22){
SetWorldTime(20);
}
if (h>=22 && h<24 || h>=0 && <6){
SetWorldTime(24);
}
return 1;
}

и все.

Отредактировано ChelSea (2007-05-03 14:23:09)

0

3

в начало:

Код:
new Hours;
new Minutes;

в OnGameModeInit()

Код:
    SetWorldTime(12);
    Hours = 12;
    Minutes = 0;
    SetTimer("HoursUpdate",60300, 1);
    SetTimer("MinutesUpdate",1000, 1);
    SetTimer("GlobalStats",500,1);

отдельные функции:

Код:
public HoursUpdate() {
    Hours++;
    Hours%=24;
    SetWorldTime(Hours);
    }
Код:
public MinutesUpdate() {
    Minutes++;
    Minutes%=60;
    }
Код:
public GlobalStats()
    {

new string[256];
if (Hours <=9) {
   	format(string,sizeof(string),"~g~Time: ~b~0%d:%d",Hours,Minutes);
if (Minutes <=9) {
   	format(string,sizeof(string),"~g~Time: ~b~0%d:0%d",Hours,Minutes);
   	}
    }
else if (Minutes <=9) {
    format(string,sizeof(string),"~g~Time: ~b~%d:0%d",Hours,Minutes);
   	}
else {
   	format(string,sizeof(string),"~g~Time: ~b~%d:%d",Hours,Minutes);
    }
	GameTextForAll(string,1000,4);
return 1;
    }

Вариант с часами (меняет игровое время и часы показывает)

0

4

Чтобы в чате не писалось яяяяя и чтобы не ставить пробел:

Код:
public OnPlayerText(playerid, text[])
{
 new col = GetPlayerColor(playerid);
 new string[256];
 new name[MAX_PLAYER_NAME];
 GetPlayerName(playerid, name, sizeof(name));
 format(string,sizeof(string), " %s: %s", name, text);
 SendClientMessageToAll(col, string);

	printf("(%d):(%s)", playerid);
	return 0;
}

Отредактировано ChelSea (2007-05-02 20:38:10)

0

5

РЕГИСТРАЦИЯ

в начале:

Код:
#include <a_samp>
#include <dini>
#include <dutils>
#include <dudb>
#define FILE_SETTINGS "settings.ini"
#define FILE_TOTALSTAT "totalstat.ini"
new logged[MAX_PLAYERS];

отдельная функция:

Код:
public StatGivePlayerMoney(playerid, amount)
{
	new tmp[256];
	if (IsPlayerConnected(playerid)) {
	    tmp = dini_Get(FILE_SETTINGS, "maxmoney");
if (GetPlayerMoney(playerid)+amount <= strval(tmp)) {
    GivePlayerMoney(playerid, amount);
    if (!dini_Exists(FILE_TOTALSTAT)) dini_Create(FILE_TOTALSTAT);
	if (amount > 0) {
                tmp = dini_Get(FILE_TOTALSTAT, "moneyreceived");
dini_IntSet(FILE_TOTALSTAT, "moneyreceived", strval(tmp)+amount);
	}
	else {
	    tmp = dini_Get(FILE_TOTALSTAT, "moneylost");
dini_IntSet(FILE_TOTALSTAT, "moneylost", strval(tmp)-amount);
	}
}
else {
    SendClientMessage(playerid, COLOR_RED, "* WARNING! Your money at maximum and you cannot receive more money!");
    SendClientMessage(playerid, COLOR_RED, "* Store money in bank or send them to be able to get more.");
    return 0;
}
	}
	return 1;
}

в OnPlayerCommandText:

Код:
new cmd[256];
     new tmp[256],tmp2[256];
     new playername[MAX_PLAYER_NAME];
     new idx;
     new moneys;
     new string[256];
     new giveplayer[MAX_PLAYER_NAME];
     new sendername[MAX_PLAYER_NAME];
     new giveplayerid,playermoney; 

if(strcmp(cmd, "/login", true) == 0) {
	    tmp = dini_Get(FILE_SETTINGS, "register");
if (strval(tmp) == 0) {
    SendClientMessage(playerid, COLOR_RED, "* Register are not allowed on this server!");
    return 1;
}

	    tmp = strtok(cmdtext, idx);

 GetPlayerName(playerid, playername, sizeof(playername));
	    if(!strlen(tmp))
	SendClientMessage(playerid, COLOR_WHITE, "* USAGE: /login [password]");

else {
	if (dini_Exists(udb_encode(playername))) {
    	if (logged[playerid] == 1) {
    	    format(string, sizeof(string), "--- %s already logged.", playername);
	printf(string);
	SendClientMessage(playerid, COLOR_YELLOW, "* You already logged.");
}
else {
	tmp2 = dini_Get(udb_encode(playername), "password");
	  if (udb_hash(tmp) != strval(tmp2)) {
  	    format(string, sizeof(string), "--- %s (id: %d) typed wrong password: %s.", playername, playerid, tmp);
printf(string);
	    SendClientMessage(playerid, COLOR_RED, "* Wrong password.");
	}
	else {
logged[playerid] = 1;
format(string, sizeof(string), "--- %s (id: %d) logged in. Password: %s.", playername, playerid, tmp);
printf(string);
SendClientMessage(playerid, COLOR_GREEN, "* You are logged in!");
	}
}
	}
	else {
	    format(string, sizeof(string), "* %s no such account.", playername);
SendClientMessage(playerid, COLOR_RED, string);
	}
}

return 1;
	}


if(strcmp(cmd, "/register", true) == 0) {
	    tmp = dini_Get(FILE_SETTINGS, "register");
if (strval(tmp) == 0) {
    SendClientMessage(playerid, COLOR_RED, "* Register are not allowed on this server!");
    return 1;
}
tmp = dini_Get(FILE_SETTINGS, "maxusers");
tmp2 = dini_Get(FILE_TOTALSTAT, "users");
if (strval(tmp2) >= strval(tmp)) {
    SendClientMessage(playerid, COLOR_RED, "* User limit reached! You cannot register.");
    return 1;
}

	    tmp = strtok(cmdtext, idx);

 GetPlayerName(playerid, playername, sizeof(playername));

        if(20 < strlen(tmp) || strlen(tmp) < 5) {
	SendClientMessage(playerid, COLOR_YELLOW, "* Password length must be 5-20 symbols.");
	return 1;
}

	    if(!strlen(tmp))
	SendClientMessage(playerid, COLOR_WHITE, "* USAGE: /register [password]");

else {
	if (!dini_Exists(udb_encode(playername))) {
dini_Create(udb_encode(playername));
dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));
tmp2 = dini_Get(FILE_SETTINGS, "defaultprotection");
dini_IntSet(udb_encode(playername), "protection", strval(tmp2));
dini_Set(udb_encode(playername), "x", "x");
   dini_Set(udb_encode(playername), "y", "y");
    	dini_Set(udb_encode(playername), "z", "z");
                if (!dini_Exists(FILE_TOTALSTAT)) dini_Create(FILE_TOTALSTAT);
                tmp2 = dini_Get(FILE_TOTALSTAT, "users");
dini_IntSet(FILE_TOTALSTAT, "users", strval(tmp2)+1);
format(string, sizeof(string), "--- %s (id: %d) created account. Password: %s.", playername, playerid, tmp);
printf(string);
format(string, sizeof(string), "* Account named %s created! You can login with password %s.", playername, tmp);
SendClientMessage(playerid, COLOR_GREEN, string);
	}
	else {
format(string, sizeof(string), "* %s already registered.", playername,tmp);
SendClientMessage(playerid, COLOR_RED, string);
	}
}

return 1;
	}

вроде должно работать (сам не проверял толком)

0

6

Change color commands
by LuxurY

Код:
new playerColors[100] = {
0xFF8C13FF,0xC715FFFF,0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xf0e68cFF,0x778899FF,0xFF1493FF,0xF4A460FF,0xEE82EEFF,0xFFD720FF,
0x8b4513FF,0x4949A0FF,0x148b8bFF,0x14ff7fFF,0x556b2fFF,0x0FD9FAFF,0x10DC29FF,0x534081FF,0x0495CDFF,0xEF6CE8FF,0xBD34DAFF,
0x247C1BFF,0x0C8E5DFF,0x635B03FF,0xCB7ED3FF,0x65ADEBFF,0x5C1ACCFF,0xF2F853FF,0x11F891FF,0x7B39AAFF,0x53EB10FF,0x54137DFF,
0x275222FF,0xF09F5BFF,0x3D0A4FFF,0x22F767FF,0xD63034FF,0x9A6980FF,0xDFB935FF,0x3793FAFF,0x90239DFF,0xE9AB2FFF,0xAF2FF3FF,
0x057F94FF,0xB98519FF,0x388EEAFF,0x028151FF,0xA55043FF,0x0DE018FF,0x93AB1CFF,0x95BAF0FF,0x369976FF,0x18F71FFF,0x4B8987FF,
0x491B9EFF,0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,0x2D74FDFF,0x3C1C0DFF,0x12D6D4FF,0x48C000FF,0x2A51E2FF,0xE3AC12FF,
0xFC42A8FF,0x2FC827FF,0x1A30BFFF,0xB740C2FF,0x42ACF5FF,0x2FD9DEFF,0xFAFB71FF,0x05D1CDFF,0xC471BDFF,0x94436EFF,0xC1F7ECFF,
0xCE79EEFF,0xBD1EF2FF,0x93B7E4FF,0x3214AAFF,0x184D3BFF,0xAE4B99FF,0x7E49D7FF,0x4C436EFF,0xFA24CCFF,0xCE76BEFF,0xA04E0AFF,
0x9F945CFF,0xDCDE3DFF,0x10C9C5FF,0x70524DFF,0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,0xE59338FF,0xEEDC2DFF,0xD8C762FF,
0x3FE65CFF
};

new PlayerChangeColors[8] = {
0x0000BBAA, 0x800080FF, 0xFFFF00AA, 0x009600DD, 0x33CCFFAA, 0xFF0000AA, 0xFF9900AA, 0x33FF33AA
};

Смена цветов для игроков (игроки меняют у себя цвет):

Код:
if(strcmp(cmd, "/color", true) == 0) {
	new tmp[256];
    new colorid;
    tmp = strtok(cmdtext, idx);
	if(!strlen(tmp)) {
	SendClientMessage(playerid, COLOR_WHITE, "Usage: /color [colorid]");
	return 1;
}
colorid = strval(tmp);
  if(colorid >=0 && colorid <=8) {
  SetPlayerColor(playerid,PlayerChangeColors[colorid]);
  }
  return 1;
  }

Смена цветов для админов (админы могут менять цвет у любого игрока):

Код:
if(strcmp(cmd, "/acolor", true) == 0) {
	    new tmp[256], colorid, playeridcolorset;

tmp = strtok(cmdtext, idx);

if(!strlen(tmp)) {
	SendClientMessage(playerid, COLOR_WHITE, "USAGE: /acolor [playerid] [colorid]");
	return 1;
}
playeridcolorset = strval(tmp);

tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
	SendClientMessage(playerid, COLOR_WHITE, "USAGE: /acolor [playerid] [colorid]");
	return 1;
}
 colorid = strval(tmp);
  if(IsPlayerAdmin(playerid) && colorid >=0 && colorid <=100) {
  SetPlayerColor(playeridcolorset,playerColors[colorid]);
  }
  else {
  SendClientMessage(playerid,COLOR_RED,"* Ты не админ или набираешь цвет не от 1 до 100");
  }
return 1;
	}

0

7

/setskin [playerid] [skinid]
by LuxurY

Код:
if(strcmp(cmd, "/setskin", true) == 0) {
new tmp[256], skinid, plskinsetid;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, COLOR_WHITE, "* Использование: /setskin [playerid] [skinid]");
return 1;
}
plskinsetid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, COLOR_WHITE, "* Использование: /setskin [playerid] [skinid]");
return 1;
}
skinid = strval(tmp);
if(IsPlayerAdmin(playerid)) {
SetPlayerSkin(plskinsetid,skinid);
}
else {
SendClientMessage(playerid,COLOR_RED,"* Ты не админ!");
}
return 1;
}

0

8

/killtimer [timerid]
by LuxurY

Код:
if(strcmp(cmd, "/killtimer", true) == 0) {
new tmp[256];
new tid;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, COLOR_WHITE, "* Использование: /killtimer [timerid]");
return 1;
}
tid = strval(tmp);
if(IsPlayerAdmin(playerid)) {
KillTimer(tid);
}
return 1;
}

Пример использования:

Допустим у нас в OnGameModeInit стоит таймер:

Код:
SetTimer("PayDay",1440000, 1);

и функция у нас стоит:

Код:
public PayDay()
    {
for(new counter = 0;counter <= MAX_PLAYERS;counter++)
    {
if(IsPlayerConnected(counter))
    {
	GivePlayerMoney(counter,2000);
    SendClientMessage(counter,COLOR_GREEN,"Payday: 2000$");
	}
	}
return 1;
    }

в OnPlayerCommandText пишем:

Код:
new Pay2000aDay = SetTimer("PayDay",1440000, 1);

и значит в игре заходим админом и пишем
/killtimer Pay2000aDay
и деньги даваться перестанут...

P.S. не тестировалось, поэтому могут быть проблемы.
если будут проблемы пишите в разделе "Вопросы по созданию скриптов"

0

9

/gametext [text]
by LuxurY

Код:
if(strcmp(cmd,"/gametext",true)==0) {
if(IsPlayerAdmin(playerid)) {
if ((strlen(cmdtext) == 8)||(strlen(cmdtext) == 9)) 
{ 
SendClientMessage(playerid,0xFF0000AA, "* Использование: /gametext [text]"); return 1; 
}
if ((strlen(cmdtext[10]) >= 2) && (strlen(cmdtext[10]) <= 50)) 
{ 
format(string,sizeof(string),"~w~%s",cmdtext[10]); 
GameTextForAll(string,5000,3);
}
else {
SendClientMessage(playerid,0xFF0000AA,"* Длина сообщения должна составлять от 2 до 50 символов!");
}
}
else {
SendClientMessage(playerid,0xFF0000AA,"* Эта команда доступна только для администраторов");
}
return 1;
}

0

10

/setscore [playerid] [кол-во]
by LuxurY

Код:
if(strcmp(cmd, "/setscore", true) == 0) {
new tmp[256], amount, plscoresetid;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, 0xFFFFFFAA, "* Использование: /setscore [playerid] [кол-во]");
return 1;
}
plscoresetid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, 0xFFFFFFAA, "* Использование: /setscore [playerid] [кол-во]");
return 1;
}
amount = strval(tmp);
if(IsPlayerAdmin(playerid)) {
SetPlayerScore(plscoresetid,amount);
}
else {
SendClientMessage(playerid,0xFF0000AA,"* Ты не админ!");
}
return 1;
}

0

11

/setteam [playerid] [teamid]
by LuxurY

Код:
if(strcmp(cmd, "/setteam", true) == 0) {
new tmp[256], tmid, plsetid;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, 0xFFFFFFAA, "* Использование: /setteam [playerid] [teamid]");
return 1;
}
plsetid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, 0xFFFFFFAA, "* Использование: /setteam [playerid] [teamid]");
return 1;
}
tmid = strval(tmp);
if(IsPlayerAdmin(playerid)) {
SetPlayerTeam(plsetid,tmid);
}
else {
SendClientMessage(playerid,0xFF0000AA,"* Ты не админ!");
}
return 1;
}

0

12

Скин для АДМИНИСТРАТОРА

Код:
 if(strcmp(cmd, "/adminskin", true) == 0 && IsPlayerAdmin(playerid) == 1) {
        SetPlayerSkin(playerid, 1);
        return 1;
        }

SetPlayerSkin(playerid, 1);    1 - ИД СКИНА

Отредактировано Sm1le (2007-06-05 12:23:51)

0

13

ChelSea написал(а):

на счет времени суток, мне кажется эффективнее исползовать это:
в main () писать:

Код:
SetTimer("TimeUpdate",2000, true);
дальше где-нибудь вставить
Код:
public TimeUpdate(){
new h,m,s;
gettime(h,m,s);
if (h>=6 && h<10)
{
SetWorldTime(6);
}
if (h>=10 && h<18)
{
SetWorldTime(14);
}
if (h>=18 && h<22){
SetWorldTime(20);
}
if (h>=22 && h<24 || h>=0 && <6){
SetWorldTime(24);
}
return 1;
}
и все.

А как насчет более плавной смены суток? Так получается черезчур резкий переход...

0

14

я делаю как тут написано и при компиляции пишет что такого или таких символов не существует например cmd или Ang что мне делать?

0

15

Создать их.

0

16

как??

0

17

G.R.S. написал(а):

как??

new cmd[256], new Ang;

0

18

когда вставляю регистрацию, у мну вылазят ошибки вот:C:\Documents and Settings\Никита\Рабочий стол\453752037_S1lver_Ghost\samp0221server[1].win32\samp022server[1].win32\gamemodes\1TheWeReWolF.pwn(776) : error 021: symbol already defined: "strtok"
C:\Documents and Settings\Никита\Рабочий стол\453752037_S1lver_Ghost\samp0221server[1].win32\samp022server[1].win32\gamemodes\1TheWeReWolF.pwn(791) : error 047: array sizes do not match, or destination array is too small

Отредактировано TheWeReWolF (2007-11-20 12:07:38)

0

19

Маленькая просьба.

LuxurY, ты не можешь мне написать код на Slap который отнимает бабло ( 3600$ ), 50HP здоровья, и подпрыгивал игрок?

0

20

у меня тоже ощибка скоро выложу,регестрация не работает.

0

21

А не проще ли вставить вот такую регистрацию (без дини).
P.S. лично у меня такая стоит

В самый верх:

Код:
//--------Инклуды----+
#include <dudb>
//-----------------------+
Код:
//--------------------------------------------------------------------------dcmd
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
//------------------------------------------------------------------------------

Ещё в самый верх:

Код:
//============================
new PLAYERLIST_authed[MAX_PLAYERS];
//------Для статистики
new MyKills[MAX_PLAYERS];
new MyDeaths[MAX_PLAYERS];
new TeamKills[MAX_PLAYERS];
new IsPlayerInJail[MAX_PLAYERS];
new gangkillcount[MAX_PLAYERS];
new teamkillcount[MAX_PLAYERS];
new taketurfbackcount[MAX_PLAYERS];
//------Для статистики
//============================

В OnPlayerConnect:

Код:
//-----------------Нулевая статистика---------------------------------------
MyDeaths[playerid] = 0;
MyKills[playerid] = 0;
TeamKills[playerid] = 0;
IsPlayerInJail[playerid] = 0;
taketurfbackcount[playerid] = 0;
gangkillcount[playerid] = 0;
teamkillcount[playerid] = 0;
    //-----------------Нулевая статистика---------------------------------------

И ещё: (В OnPlayerConnect) У вас тут получится 2 ретурна!!!!!

Код:
//============================
new PlayerName[30], str[256];
    GetPlayerName(playerid, PlayerName, 30);

    format(str, sizeof(str), "%s.dudb.sav", PlayerName);
    if (!udb_Exists(PlayerName2(playerid)))
      {
        SendClientMessage(playerid, zelen, "***СИСТЕМА: Используйте /register [пароль] для создания аккаунта или /help***");
        return 1;
    }
    else
    {
        PLAYERLIST_authed[playerid]=false;
        SendClientMessage(playerid, zelen, "***СИСТЕМА:Этот ник зарегестрирован! Чтобы войти в аккаунт введите /login [пароль]***");
      }
        return 1;
    }

//============================

В середину скрипта:

Код:
//------------------PlayerName2 for Reg-----------------------------------------
stock PlayerName2(playerid) {
  new name[255];
  GetPlayerName(playerid, name, 255);
  return name;
}
//------------------PlayerName2 for Reg-----------------------------------------
//---------------------/reg & /login--------------------------------------------
dcmd_register(playerid,params[]) {

    if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Такой аккаунт уже существует");
    if (udb_Exists(PlayerName2(playerid))) return SystemMsg(playerid,"Аккаунт создан, введите '/login <пароль>'.");
    if (strlen(params)==0) return SystemMsg(playerid,"***СИСТЕМА: Используйте '/register пароль'***");
    if (udb_Create(PlayerName2(playerid),params)) return SystemMsg(playerid,"Аккаунт создан. Войдите '/login пароль'.");
    return true;
}

  dcmd_login(playerid,params[]) {

    if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Вы уже вошли в аккаунт");
    if (!udb_Exists(PlayerName2(playerid))) return SystemMsg(playerid,"Аккаунта не существует, введите '/register пароль'.");
    if (strlen(params)==0) return SystemMsg(playerid,"***СИСТЕМА: Используйте '/login пароль'***");
    if (udb_CheckLogin(PlayerName2(playerid),params)) {

       GivePlayerMoney(playerid,dUserINT(PlayerName2(playerid)).("money")-GetPlayerMoney(playerid));
       SetPlayerScore(playerid,dUserINT(PlayerName2(playerid)).("kills")-GetPlayerScore(playerid));
        //
       MyDeaths[playerid] = (dUserINT(PlayerName2(playerid)).("deaths"));
       MyKills[playerid] = (dUserINT(PlayerName2(playerid)).("kills"));
       TeamKills[playerid] = (dUserINT(PlayerName2(playerid)).("teamkills"));

	   

       PLAYERLIST_authed[playerid]=true;

       return SystemMsg(playerid,"Вы вошли в cвою учетную запись.Выберите скин и нажмите кнопку >>Shift<<");
    }
    return SystemMsg(playerid,"Неверный пароль.");
}

В OnPlayerDissconnect: (Если у вас есть в конце return 1, то убирите его!)

Код:
if (PLAYERLIST_authed[playerid]) {
        dUserSetINT(PlayerName2(playerid)).("money",GetPlayerMoney(playerid));
        // Сохранение статистики
        dUserSetINT(PlayerName2(playerid)).("kills",MyKills[playerid]);
        dUserSetINT(PlayerName2(playerid)).("deaths",MyDeaths[playerid]);
        dUserSetINT(PlayerName2(playerid)).("teamkills",TeamKills[playerid]);
  }
          PLAYERLIST_authed[playerid]=false;
          return false;
}

Ещё в середину скрипта:

Код:
//------------------------SystemMsg---------------------------------------------
public SystemMsg(playerid,msg[]) {
   if ((IsPlayerConnected(playerid))&&(strlen(msg)>0)) {
       SendClientMessage(playerid,COLOR_SYSTEM,msg);
   }
   return 1;
}
//------------------------SystemMsg---------------------------------------------
//------------------------Stat------------------------------------------------------
ShowScore(playerid)
{
	new giveplayerid;
//===========
new skin = GetPlayerSkin(giveplayerid);
new ping = GetPlayerPing(giveplayerid);
//===========
new tmpTotal[128];
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
format(tmpTotal, sizeof(tmpTotal), "*** %s:  >>Фраги: [%d]<< | >>Смерти: [%d]<< | >>Рейтинг: [%0.2f]<< | >>Деньги: [$%d]<< ",playername,MyKills[playerid],MyDeaths[playerid], (Float:MyKills[playerid]/Float:MyDeaths[playerid]),GetPlayerMoney(playerid),TeamKills[playerid]);
SendClientMessage(playerid,COLOR_YELLOW, tmpTotal);

format(tmpTotal, sizeof(tmpTotal), ">>Скин [%d]<< | >>Пинг [%d]<< ", skin, ping);
SendClientMessage(playerid,COLOR_YELLOW, tmpTotal);
}
//------------------------Stat------------------------------------------------------

В OnPlayerCommand: До всех функций к переменным:

Код:
//-----------------------------
dcmd(login,5,cmdtext);
dcmd(register,8,cmdtext);
//-----------------------------

Пример:

Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    new string[256];
    new playermoney;
    new sendername[MAX_PLAYER_NAME];
    new giveplayer[MAX_PLAYER_NAME];
    new cmd[256];
    new giveplayerid, moneys, idx;
    cmd = strtok(cmdtext, idx);
    dcmd(login,5,cmdtext);
      dcmd(register,8,cmdtext);
    //-----------/send [id] [summa]
    if(strcmp(cmd, "/send", true) == 0) {...........

Ещё в OnPlayerCommandText: (Это уже обычная комманда)

Код:
//============================<[ / s t a t s ]>=================================
	if(strcmp(cmd, "/stat", true) == 0)
	 {
//===========
new skin = GetPlayerSkin(giveplayerid);
new ping = GetPlayerPing(giveplayerid);
//===========
if(!strlen(tmp))
{
    ShowScore(playerid);
	return 1;
}

	 	if(IsPlayerConnected(playerid))
  {
	new playername[MAX_PLAYER_NAME];
	GetPlayerName(playerid, playername, sizeof(playername));
   	format(string, sizeof(string), "***Твоя статистика:  >>Фраги: [%d]<< | >>Смерти: [%d]<< | >>Рейтинг: [%0.2f]<< | >>Деньги: [$%d]<< ***",playername,MyKills[playerid],MyDeaths[playerid],Float:MyKills[playerid]/Float:MyDeaths[playerid],GetPlayerMoney(playerid));
	SendClientMessage(playerid, COLOR_YELLOW, string);
	
            format(string, sizeof(string), ">>Скин [%d]<< | >>Пинг [%d]<<  ", skin, ping);
            SendClientMessage(playerid,COLOR_YELLOW, string);

   	return 1;
 }
 return 1;	
	 }

//---===========================================================---

В OnPlayerDeath и комманду /kill добавьте нужные счётчики - MyKills++; MyDeaths++; MyTeamkills++;

Отредактировано KaZaNOVa (2008-01-25 20:09:12)

0

22

Чёт очень мудрённо ;)

0


Вы здесь » LuxurY forum (scripting SA-MP) » Обучающие статьи » Полезные команды