// Запрещает наносить урон, находясь в интерьерах
DisableApplyDamageInInterior(playerid, interiorid)
{
if (interiorid != 0)
{
SetPlayerTeam(playerid, 0);
}
else
{
SetPlayerTeam(playerid, NO_TEAM);
}
}
// Запрещает доставать оружие, находясь в интерьерах
DisableTakeWeaponsInInterior(playerid)
{
if (GetPlayerInterior(playerid) != 0)
{
SetPlayerArmedWeapon(playerid, 0);
}
}
// Использование в колбеках
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
#pragma unused oldinteriorid
DisableApplyDamageInInterior(playerid, newinteriorid);
return 1;
}
public OnPlayerUpdate(playerid)
{
DisableTakeWeaponsInInterior(playerid);
return 1;
}
// by Untonyst #if defined _zcmd_included // call command with parameters #define zcmd::%0(%1)\ CallLocalFunction(#cmd_%0, !"is", %1) // add alternative name of the command #define ZALT:%0:%1;\ forward cmd_%1(playerid, params[]);\ public cmd_%1(playerid, params[])\ return cmd_%0(playerid, params); #endif
Искал вариант создания рандомного месева из букв и цифр, но не нашел. Написаю простую функцию, которая сделает мне это месево.
PHP код:
PHP код:
|
/*
rand_string(len = sizeof(str), mem_type = 1, caps = 1, start_symbol = "")
len - длина генерируемой строки ( максимальный размер - 100 )
mem_type - "запоминающаяся строка", генерация по слогам
caps - учет регистра ( 0 - маленький регистр, 1 - большой, 2 - смешанный )
start_symbols[] - начальная строка ( по умолчанию пуста )
*/
rand_string(len, mem_type = 1, caps = 1, start_symbols[] = "")
{
new str[100], dynamic_cell = -1, symbol[2], _cell, vowels_arr[6] = {65,69,73,79,85,89};
if(strlen(start_symbols)) len += strlen(start_symbols);
#define vowels 65,69,73,79,85,89,97,101,105,111,117,121
do
{
start:
if(dynamic_cell == -1 && strlen(start_symbols))
{
strcat(str, start_symbols, len+1), dynamic_cell = 0;
goto start;
}
rerandom: _cell = ((caps) ? (caps > 1 ? 65+random(25) : 65) : 97) + random(25);
if((90 < _cell < 97) || (_cell == str[dynamic_cell])) goto rerandom;
if(mem_type && dynamic_cell > 1)
{
switch(str[dynamic_cell] | str[dynamic_cell-1])
{
case vowels: goto next;
default: _cell = (caps) ? (vowels_arr[random(sizeof(vowels_arr))]) : (32+vowels_arr[random(sizeof(vowels_arr))]);
}
}
next: format(symbol,2,"%c",_cell);
strcat(str, symbol, len+1);
dynamic_cell++;
}
while(dynamic_cell < len);
#undef vowels
return str;
}
// Пример использования:
public Test()
{
printf("%s", rand_string(5, 1, _, "GEO_"));
return true;
}
// Пример полученного: GEO_VINIE
#define PROTECT_GETMAXMIN
GetIntMin(...) {
new i = numargs()-1;
#if defined PROTECT_GETMAXMIN
if(i==-1){return 0;}
#endif
new val = getarg(i);
while(i--) {val = min(val,getarg(i));}
return val;
}
GetIntMax(...) {
new i = numargs()-1;
#if defined PROTECT_GETMAXMIN
if(i==-1){return 0;}
#endif
new val = getarg(i);
while(i--) {val = max(val,getarg(i));}
return val;
}
Те, что в ядре сравнивают только пару переменных (у автора почти произвольное кол-во, ограниченное макс числом аргументов функции), хотя их всё-равно можно вставить в его код.
PHP код:
SoNikMells, твой код будет неадекватным в случае, если будут заданы только отрицательные числа. |
stock fwriteASCII(File:fhandle, const string[]) { if(!fhandle) return 0; new stringlen = strlen(string); for(new i; i < stringlen; i++) fputchar(fhandle, string[i], false); return stringlen; }
new File:hfile = fopen("random.txt"); if(hfile) { fwriteASCII(hfile, "Я просто текст"); fclose(hfile); }
#if defined _ALS_fwrite #undef fwrite #else #define _ALS_fwrite #endif #define fwrite fwriteASCII
Не знаю, выкладывались ли здесь до этого подобные функции (скорее всего да), но вот мой вариант функции fwrite, которая может корректно записывать в файл строку с русскими символами (в режиме ASCII). Синтаксис абсолютно тот-же, что и в обычной fwrite
|
Просто эту проблему все решили сразу после её появления (с момента выхода 0.3a), тогда не то что этой темы, а даже русского раздела на этом форуме не было.
|
//обменивает содержимое массивов - swap_arrays(array_1[], array_2[], arrays_size)
#define swap_arrays(%0,%1,%2); \
{ new _bf_[%2];\
memcpy(_bf_, %0, 0, (%2) * 4, %2);\
memcpy(%0, %1, 0, (%2) * 4, %2);\
memcpy(%1, _bf_, 0, (%2) * 4, %2); }
//очищает массив - clean_array(array[], size)
#define clean_array(%0,%1); \
{ new _tpl_[%1]; \
memcpy(%0, _tpl_, 0, (%1) * 4, %1); }
//копирует содержимое массива в другой массив - copy_array(source[], destination[], size)
#define copy_array(%0,%1,%2) memcpy(%1, %0, 0, (%2) * 4, %2)
//заполняет ячейки массива указанной константой - fill_array(array[], value, size)
#define fill_array(%0,%1,%2); \
{ new _tpl_[%2] = { %1, ... }; \
memcpy(%0, _tpl_, 0, (%2) * 4, %2); }
#define GivePVarInt(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) %2)
GivePVarInt(playerid, "SomeVar", +1); //Прибавит к PVar'у 1
GivePVarInt(playerid, "SomeVar", -1); //Отнимет от PVar'а 1
GivePVarInt(playerid, "SomeVar", *2); //Умножит значение PVar'а на 2
GivePVarInt(playerid, "SomeVar", /2); //Разделит значение PVar'а на 2
#define UpdateVariable(%0,%1) (%0=%0%1);
UpdateVariable(playerid, +1); //Прибавит 1
UpdateVariable(playerid, -1); //Отнимет 1
UpdateVariable(playerid, *2); //Умножит значение на 2
UpdateVariable(playerid, /2); //Разделит значение на 2