PDA

Просмотр полной версии : [Вопрос] Проблема с киком и вопрос по переменным



Trender
11.07.2014, 20:23
[19:19:25] Вы были кикнуты

[19:19:25] Вы были кикнуты
[19:19:25] Вы были кикнуты

[19:19:25] Вы были кикнуты

[19:19:26] Вы были кикнуты

[19:19:26] Server closed the connection.

Почему так?
Отрывок

GetPlayerName(playerid, sn, sizeof(sn));
new Float:Z,srtc[50]; new anim = GetPlayerAnimationIndex(playerid);
GetPlayerPos(playerid,Z,Z,Z);
if((anim == 1538 || anim == 1539 || anim == 1543) && Z > 2 && PlayerSpeed(playerid) > 10)
{
format(srtc,sizeof(srtc),"%s этот лол был кикнут :)",sn);
SCMA(COLOR_ORANGE,srtc);
SCM(playerid, COLOR_RED, "Вы были кикнуты");
Kicked(playerid);
return true;
}
И ещё возможно ли использовать переменные, в таком виде:


new
string[128],
lol[64]
;

Zeror_Dalglish
11.07.2014, 20:35
[19:19:25] Вы были кикнуты

[19:19:25] Вы были кикнуты
[19:19:25] Вы были кикнуты

[19:19:25] Вы были кикнуты

[19:19:26] Вы были кикнуты

[19:19:26] Server closed the connection.

Почему так?
Отрывок

GetPlayerName(playerid, sn, sizeof(sn));
new Float:Z,srtc[50]; new anim = GetPlayerAnimationIndex(playerid);
GetPlayerPos(playerid,Z,Z,Z);
if((anim == 1538 || anim == 1539 || anim == 1543) && Z > 2 && PlayerSpeed(playerid) > 10)
{
format(srtc,sizeof(srtc),"%s этот лол был кикнут :)",sn);
SCMA(COLOR_ORANGE,srtc);
SCM(playerid, COLOR_RED, "Вы были кикнуты");
Kicked(playerid);
return true;
}
И ещё возможно ли использовать переменные, в таком виде:


new
string[128],
lol[64]
;

1. Что так?
2. Возможно, но зачем? По мне это убогий стиль.

Spectrum
11.07.2014, 20:42
1) Кинь kicked
2) Да, возможно

Trender
11.07.2014, 21:31
1. Что так?
2. Возможно, но зачем? По мне это убогий стиль.
Не одной работы с твоей стороны не встречал.


stock Kicked(playerid)
{
ResetPlayerWeaponEx(playerid);
SetTimerEx("KickSL", 200, false, "d", playerid);
SetPVarInt(playerid, "kicked", 1);
return 1;
}



// Паблик
public KickSL(playerid)
{
DeletePVar(playerid,"kicked");
Kick(playerid);
return true;
}

L0ndl3m
11.07.2014, 21:50
У вас скорее всего этот код в OnPlayerUpdate, и здесь вызывается функция Kicked в которой запускается таймер, пока таймер не сработал - OnPlayerUpdate вызвался ещё несколько раз. Предложу свой вариант:

В OnPlayerUpdate ( либо односекундный таймер ):


new
Float: p_vel_x,
Float: p_vel_y,
Float: p_vel_z;

GetPlayerVelocity(playerid, p_vel_x, p_vel_y, p_vel_z);

if(floatsqroot(p_vel_x * p_vel_x + p_vel_y * p_vel_y + p_vel_z * p_vel_z) * 213.3 > 40.0 && GetPlayerWeapon(playerid) != 46)
{
switch(GetPlayerAnimationIndex(playerid))
{
case 958, 959, 1538, 1539, 1543:
{
static const
fmt_str[] = "%s (%i) кикнут за использование s0beit.";

new
str[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 3];

GetPlayerName(playerid, str, sizeof(str));

format(str, sizeof(str), fmt_str, str, playerid);
SCMA(0xFF8000FF, str);

SendClientMessage(playerid, -1, "Вы были кикнуты.");

SetTimerEx("@__KickTimer", 500, 0, "i", playerid);
}
}
}


И куда нибудь ко всем функциям, таймерам:


@__KickTimer(const playerid);
@__KickTimer(const playerid)
Kick(playerid);


А насчёт переменных посоветую прочитать это: Тык (http://pro-pawn.ru/showthread.php?8347).

Edwin
12.07.2014, 00:37
А я посоветую сделать, как советовал мне в своё время один умный человек, вот так:

forward KickPublic(playerid);
public KickPublic(playerid) return Kick(playerid);

#define Kick(%0) SetTimerEx("KickPublic", 100, false, "i", %0)
где-нибудь в начале мода, и потом везде без хлопот использовать стандартный Kick(playerid);
А во втором случае, советовал бы делать так:

new string[128], lol[64];

Trender
12.07.2014, 01:59
Может с моим добром можно что нибудь придумать?

underwoker
12.07.2014, 02:47
Может с моим добром можно что нибудь придумать?
Вы хоть читаете что вам пишут?

У вас скорее всего этот код в OnPlayerUpdate, и здесь вызывается функция Kicked в которой запускается таймер, пока таймер не сработал - OnPlayerUpdate вызвался ещё несколько раз