W_foreach Iter_Add & Iter_Remove: 101 foreach Iter_Add & Iter_Remove: 597 |
W_foreach: 39 foreach: 26 |
//==============================================================================
// Foreach by White_116
#define Iterator:%0<%1> %0[%1]={-1, ...}, w%0[%1+1]={-1, ...}
#define foreach(new%0:%1) for(new %0=sizeof(%1);(%0=w%1[%0]) != -1;)
#define Iter_Add(%1,%0) Itter_AddInternal(%0,%1,w%1,w%1[sizeof(%1)],sizeof(%1))
#define Iter_Remove(%1,%0) Itter_RemoveInternal(%0,%1,w%1,w%1[sizeof(%1)],sizeof(%1))
//==============================================================================
stock Itter_AddInternal(playerid, ds[] ,sd[], &MAX_k, size)
{
if(-1 < playerid)if(playerid < size)if(MAX_k != playerid)if(ds[playerid] == -1)
{
if(MAX_k != -1) ds[MAX_k]=playerid;
sd[playerid]=MAX_k, MAX_k=playerid;
return 1;
}
return 0;
}
stock Itter_RemoveInternal(playerid, ds[], sd[], &MAX_k, size)
{
if(-1 < playerid)if(playerid < size)if(playerid != MAX_k)
{
if(sd[playerid] != -1)
{
sd[ds[sd[playerid]]=ds[playerid]]=sd[playerid];
return sd[playerid]=ds[playerid]=-1;
}
else if(ds[playerid] != -1)return ds[playerid]=sd[ds[playerid]]=-1;
}
else if((MAX_k=sd[playerid]) != -1)return ds[MAX_k]=-1; else return -1;
return 0;
}
//================= EOS ====================
public OnFilterScriptInit()
{
new Iterator:Some<MAX_PLAYERS>;
for(new i;i<100;i++)Iter_Add(Some, i*2);
foreach(new f:Some)printf("foreach: %d",f);
for(new i;i<100;i++)Iter_Remove(Some, i*2);
return 1;
}
stock FindLastFreeSlot()
{
new slot = INVALID_PLAYER_ID;
for(new i = GetMaxPlayers() - 1; i != -1; i--)
{
if(IsPlayerConnected(i)) continue;
slot = i;
break;
}
return slot;
}
stock FindLastFreeSlot()
{
for(new i = GetMaxPlayers() - 1; i > -1; i--)
{
if(IsPlayerConnected(i)) continue;
return i;
}
return INVALID_PLAYER_ID; // нет свободных слотов
}
stock FindLastFreeSlot() {
for (new i = GetMaxPlayers(); i--;) {
if (!IsPlayerConnected(i)) return i;
}
return INVALID_PLAYER_ID;// нет свободных слотов
}
stock raytrace(x0,y0,x1,y1)
{
new dx=x1-x0, dy=y1-y0;
if(dx<0)x1=-1, dx=-dx; else x1=1;
if(dy<0)y1=-1, dy=-dy; else y1=1;
for(new e=dx-dy, n=dx+dy; n--;)
{
if(e > 0) x0+=x1, e-=dy; else y0+=y1, e+=dx;
//CreateObject(2000, x0, y0, 0.0, 0.0, 0.0, 0.0);//Создадим объект
}
return true;
}
stock raytrace(x0,y0,x1,y1)
{
new dx=x1-x0, dy=y1-y0;//находим проекции по осям
if(dx<0)x1=-1, dx=-dx; else x1=1;
if(dy<0)y1=-1, dy=-dy; else y1=1;
//если проекции отрицательные, мы меняем им знак и записываем в конечные координаты 1 или -1, для чего, с исходными данными выйдет тоже самое!
for(new e=dx-dy, n=dx+dy; n--;)//находим разницу проекций, зачем, где в геометрии вы такое вычитали?! И спускаемся по их сумме!
{
if(e > 0) x0+=x1, e-=dy; else y0+=y1, e+=dx;//если разница больше нуля мы меняем только координату X, если меньше то Y, где логика?!
//CreateObject(2000, x0, y0, 0.0, 0.0, 0.0, 0.0);//Создадим объект
}
return true;
}
stock raytrace(Float:x0, Float:y0, Float:z0, Float:x1, Float:y1, Float:z0, points = 10)
{
new Float:dx = floatdiv(x1-x0, Float:10),
Float:dy = floatdiv(y1-y0, Float:10),
Float:dz = floatdiv(z1-z0, Float:10);
while(points--) {
x0 += dx;
y0 += dy;
z0 += dz;
CreateObject(2000, x0, y0, z0, 0.0, 0.0, 0.0);//Создадим объект
}
}
while(points--) {
printf("%f %f", dx,dy );
Ваша линия будет "вещественная" а моя "пиксельная". Подправил описание.
И в вашем коде ошибка. Float:z0, points = 10) И ещё одна странность, переменные всегда ровны 0. Не сочтите за криворукость но сервер логирует 0. PHP код:
![]() |
Ваша линия будет "вещественная" а моя "пиксельная". Подправил описание.
И в вашем коде ошибка. Float:z0, points = 10) И ещё одна странность, переменные всегда ровны 0. Не сочтите за криворукость но сервер логирует 0. PHP код:
![]() |
stock raytrace(Float:x0, Float:y0, Float:z0, Float:x1, Float:y1, Float:z1, points = 10)
{
new Float:dx = floatdiv(x1-x0, float(points)),
Float:dy = floatdiv(y1-y0, float(points)),
Float:dz = floatdiv(z1-z0, float(points));
while(points--) {
x0 += dx;
y0 += dy;
z0 += dz;
CreateObject(2000, x0, y0, z0, 0.0, 0.0, 0.0);//Создадим объект
}
}
Функция которой так всем не хватало =) наверно
Эта функция научит компьютер говорить "ПО РУССКИ" Вы наверно часто сталкивались с проблемой када говорило "На сервере 21 игроков" А эта функция вернет один из предложенных ей вариантов Код Код:
stock GetNeededWord(number,word1[],word2[],word3[]) // by Romanius { new ostatok = number % 100; new out[50]; if((ostatok > 10) && (ostatok < 20)) strcat(out,word3); else { switch(ostatok % 10) { case 0: strcat(out,word3); case 1: strcat(out,word1); case 2..4: strcat(out,word2); case 5..9: strcat(out,word3); default: strcat(out,word1); } } return out; } |
stock CNum(num,st1[20],st2[20],st3[20])
{
new s1[20]; valstr(s1,num);
new i = strlen(s1)+1;
if(s1[i] == '1') return st1;
else if(s1[i] == '2') return st2;
else if(s1[i] == '3') return st2;
else if(s1[i] == '4') return st2;
else return st3;
}
stock CNum(num, st1[], st2[], st3[])
{
new s1[20],s2[20]; valstr(s1,num);
new i = strlen(s1)+1;
switch(s1[i])
{
case '1': strcat(s2,st1);
case '2'..'4': strcat(s2,st2);
default: strcat(s2,st3);
}
return s2;
}
#define abs(%0) floatround(floatabs(Float:(%0))) // Stepashka
stock pluralForm(n, form1[], form2[], form5[], output[])
{
n = abs(n) % 100;
new n1 = n % 10;
if (10 < n < 20) return strcat(output, form5);
if (1 < n1 < 5) return strcat(output, form2);
if (n1 == 1) return strcat(output, form1);
return strcat(output, form5);
}
#define abs(%0) ((%0<0)?(-%0):(%0))
n = abs(n) % 100;
n = n % 100;
floatabs(n);
PHP код:
PHP код:
|
#define abs(%0) floatround(floatabs(Float:(%0)))
Это значит то, что в самп есть своя функция, которая берет число по модулю.
|
stock RandHex()
{
new r = random(239)+16;
new g = random(239)+16;
new b = random(239)+16;
return (r*16777216)+(g*65536)+(b*256)+0xFF;
}
// или можно в define
#define RandHex() ((random(239)+16)*16777216)+((random(239)+16)*65536)+((random(239)+16)*256)+0xFF
SendClientMessage(playerid, RandHex(),"Text Color");
SetPlayerColor(playerid, RandHex());