Может убрать? Спереди то явно лишняя из 2.
if IsClientValid(client) && !IsFakeClient(cleint)
{
//some trash
}
Без него бы наверное час проблему искал :-DА ты Notepad++ пробовал? Там "подсветка" для скобок есть.
Все ошибки которые я знаю можно пересчитать на пальцах двух рук :(Бывает такое. Невнимательность + незнание точного перевода каждой ошибки, что она означает.
Нет. Посмотри на свой же скриншот - у тебя там 2 скобки стоит, хотя должна быть 1. Вот и требует ещё одну лишнюю для закрытия.можно писать так?
Нет. Посмотри на свой же скриншот - у тебя там 2 скобки стоит, хотя должна быть 1. Вот и требует ещё одну лишнюю для закрытия.
Наконец-то. :-D
Добавляй уже пальцы на ногах:Все ошибки которые я знаю можно пересчитать на пальцах двух рук
"warning 213: tag mismatch" - это вроде исправить можно изменением типа данных.Наконец-то. :-D
Добавляй уже пальцы на ногах:
/+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/
Список ошибок компиляции:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 200: symbol "%s" is truncated to 31 characters"
"Предупреждение 200: переменная "%s" ограничивается 31 символами"; при создании переменной введено больше 31 символа.
new sssssssssssssssssssssssssssssss;
Решение - сменить название или укоротить.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 201: redefinition of constant/macro"
"Предупреждение 201: переопределение константы/макро"; двойное определение одинаковой константы define.
#define OnPlayerEnterRaceCheckpoint
#define OnPlayerEnterRaceCheckpoint
Решение - удалить одну любую строчку.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 202: number of arguments does not match definition"
"Предупреждение 202: количество аргументов не соответствует определению"; не совпадают аргументы.
Create3DTextLabel("Текст.",0xFFA500FF,.0120,456.2717,35.1719,20.0);
Решение:
-2041.0120,456.2717,35.1719,20.0
-2041.0120,456.2717,35.1719 <- это наша координата (она нас не интересует);
20.0 <- вот наша ошибка (20 - это расстояние, с которого наш текст будет виден);
А вот 0 <- это у нас testLOS - линия видимости.
Нам 0 нужно заменить на 1:
Create3DTextLabel("Текст.",0xFFA500FF,1111.1111,111.1111,11.1111,20.1);
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 203: symbol is never used: %s"
"Предупреждение 203: данный символ нигде не используется: %s".
new respon;
(2378) warning 203: symbol is never used: "respon"
Решение - найти эту переменную и удалить.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 204: symbol is assigned a value that is never used %s"
"Предупреждение 204: символу %s присваивается значение, которое нигде не использовалось"; создана переменная и массив, а она нигде не используется.
new babai[15];
Решение - просто удалить.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 209: function "%s" should return a value"
"Предупреждение 209: функция "%s" должна возвращать значение"; функция не возвращается (простыми словами: нет return 1; или return 0;).
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (newkeys == 1024)
{
OnPlayerCommandText(playerid,"/Blablabal");
return 1; <--- вот наш return ДО.
}
}
Решение:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (newkeys == 1024)
{
OnPlayerCommandText(playerid,"/Blablabal");
}
return 1; <--- вот наш return ПОСЛЕ.
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 213: tag mismatch"
"Предупреждение 213: несоответствие тегов"; несовпадение аргументов.
#define CreateObject CreateDynamicObject
#define MoveObject MoveDynamicObject
Решение:
#define CreateObject, CreateDynamicObject
#define MoveObject, MoveDynamicObject
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 216: nested comment"
"Предупреждение 216: вложенные комментарии"; неправильная запись комментария.
/*case 58: //Fire&lvl
Решение:
case 58: //Fire&lvl
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 217: loose indentation"
"Предупреждение 217: свободный (неправильный) отступ"; невыровненная строка - код не табулирован (не построен лесенкой).
Решение - выровнять всё вручную или поставить:
#pragma tabsize 0
pragma tabsize - просто маскирует warning и не более.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 219: local variable "%s" shadows a variable at a preceding level"
"Предупреждение 219: локальная переменная "%s" уже использована переменной на предыдущем уровне"; переменная дважды объявлена.
new fast;
new fast;
Решение: одну из них удалить или изменить.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
"warning 235: public function lacks forward declaration %s"
"Предупреждение 235: public function не хватает forward декларации %s"; у функции нет forward.
public lois()
Решение - изменить на forward:
forward lois()
Если не хотите каждый раз писать forward, то можно сделать так:
#define public:%1(%2) forward %1(%2);
public %1(%2)
Тогда новые паблики делать так:
public:lois()
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
decl String:ip[16],String:name[96],String:country[96],String:from[128];
С чего вдруг? Некоторые чужие скрипты или копирование с этого форума - это да... Одни пробелы. А в своём то вручную расставляешь.любимое занятие
Кстати, это тоже бред. Похоже, ты ещё не достиг хорошего уровня скриптинга в мелочах.IsClientValid(client)
OnMapStart(), потом OnAutoConfigsBuffered() и после всех OnConfigsExecuted(). Первый применять, по-моему мнению, надо реже. Он и не нужен везде подряд.какой ивент выполняется после каждой смены карты?
С чего вдруг? Некоторые чужие скрипты или копирование с этого форума - это да... Одни пробелы. А в своём то вручную расставляешь.
#pragma tabsize 0
Кстати, это тоже бред. Похоже, ты ещё не достиг хорошего уровня скриптинга в мелочах.
stock bool:IsClientValid(client)
{
return ((client > 0 && client <= MaxClients) && IsClientInGame(client)) ? true : false;
}
[SM] Native "IsFakeClient" reported: Client index 0 is invalid
new client = GetClientOfUserId(userid) - ставь после такого просто if(client) и удивишься. И никаких ошибок после.Без этой проверки сервер еррорит
Первое - прямо таки вровень! А вот второе, если это никнейм игрока - сильный перебор, ровно в 3 раза.decl String:ip[16],String:name[96]
Тут уже на "твой вкус", ибо предела как бы нет - страны даже появляются новые, лучше переборщить уж. А последнее... это что, сообщение чата?String:country[96],String:from[128]
Точно, это ж по сути и есть проверка на наличие клиента на сервере. :)new client = GetClientOfUserId(userid) - ставь после такого просто if(client) и удивишься. И никаких ошибок после
Значит в никнейме может быть не более 32х символов латиницы или 16 кириллицы?Первое - прямо таки вровень! А вот второе, если это никнейм игрока - сильный перебор, ровно в 3 раза.
Правильнее писать константой include. Это у нас MAX_NAME_LENGTH.в никнейме может быть не более 32х символов латиницы или 16 кириллицы?
А последнее... это что, сообщение чата?
Format(from,sizeof(from)," [\x03%s]",country); //Adds [] and color
decl String:form [country+2]
Правильнее писать константой include. Это у нас MAX_NAME_LENGTH.Сдаётся мне, это сделано специально, чтобы ты потом не правил свой скрипт - у него всегда будет подставляться актуальная для данного времени/версии SM/игры величина.#define MAX_NAME_LENGTH 32 /**< Maximum buffer required to store a client name */
Первоисточник SourceMod API. Вкладка "Constans" для каждой категории (include).где их всех взять?
А здесь лучше FormatEx.Format(from,sizeof(from)," [\x03%s]",country); //Adds [] and color
А здесь лучше FormatEx.
Format для сохранения в буффер, когда этот же буффер используется в нём для форматирования (для %s), а FormatEx - почти для всех прочих случаев, т.к. быстрее.в Format используеться буффер а в FormatEx нет
Смысл понял.Format для сохранения в буффер, когда этот же буффер используется в нём для форматирования (для %s), а FormatEx - почти для всех прочих случаев, т.к. быстрее.
Нет. Можешь спокойно хукать, как обычно - скорее, так даже будет быстрее, ибо Ex для "профита" с хуками... ("универсальных скриптов", так сказать).HookEventEx всё так же
Нет. Можешь спокойно хукать, как обычно - скорее, так даже будем быстрее, ибо Ex для "профита" с хуками... ("универсальных скриптов", так сказать).
А первый просто переведи.
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <cstrike>
new tracer_fx,explode_fx,light_fx;
public OnPluginStart()
{
HookEvent("weapon_fire", Event_OnWeaponFire);
}
public OnMapStart()
{
tracer_fx = PrecacheModel("effects/gunshiptracer.vmt");
explode_fx = PrecacheModel("materials/sprites/sprite_fire01.vmt");
light_fx = PrecacheModel("sprites/lgtning.vmt");
}
public Action:Event_OnWeaponFire(Handle:event, const String:name[], bool:silent)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
decl String:weapon[25], Float:pos[3], Float:clientpos[3];
GetEventString(event, "weapon", weapon, sizeof(weapon));
if (strcmp(weapon, "awp", false) == 0)
{
wS_GetLookPos(client, pos);
GetClientEyePosition(client, clientpos);
TE_SetupBeamPoints(clientpos, pos, tracer_fx,0,0,0,3.0,2.0,4.0,2,1.2,{125, 125, 125, 190},1);
TE_SendToAll();
TE_SetupBeamPoints(pos, clientpos, tracer_fx,0,0,0,4.0,3.0,5.0,4,0.1,{255, 255, 255, 190},6);
TE_SendToAll();
}
if (strcmp(weapon, "m3", false) == 0)
{
wS_GetLookPos(client, pos);
new tesla = CreateEntityByName("point_tesla");
DispatchKeyValue(tesla, "m_flRadius", "66.0");
DispatchKeyValue(tesla, "m_SoundName", "DoSpark");
DispatchKeyValue(tesla, "beamcount_min", "30");
DispatchKeyValue(tesla, "beamcount_max", "60");
DispatchKeyValue(tesla, "texture", "sprites/physbeam.vmt");
DispatchKeyValue(tesla, "m_Color", "255 255 255");
DispatchKeyValue(tesla, "thick_min", "10.0");
DispatchKeyValue(tesla, "thick_max", "11.0");
DispatchKeyValue(tesla, "lifetime_min", "0.2");
DispatchKeyValue(tesla, "lifetime_max", "0.6");
DispatchKeyValue(tesla, "interval_min", "0.1");
DispatchKeyValue(tesla, "interval_max", "0.5");
DispatchSpawn(tesla);
TeleportEntity(tesla, pos, NULL_VECTOR, NULL_VECTOR);
AcceptEntityInput(tesla, "TurnOn");
AcceptEntityInput(tesla, "DoSpark");
TE_SetupExplosion(pos, explode_fx, 10.0, 1, 0, 75, 5000);
TE_SendToAll();
}
if (strcmp(weapon, "scout", false) == 0)
{
wS_GetLookPos(client, pos);
new randomx = GetRandomInt(-500, 500);
new randomy = GetRandomInt(-500, 500);
new Float:startpos[3];
startpos[0] = pos[0] + randomx;
startpos[1] = pos[1] + randomy;
startpos[2] = pos[2] + 800;
new color[4] = {0, 30, 240, 255};
new Float:dir[3] = {0.0, 0.0, 0.0};
TE_SetupBeamPoints(startpos, pos, light_fx, 0, 0, 0, 0.2, 20.0, 10.0, 0, 2.0, color, 3); //Делаем лазер с амплитудой в 2 единицы
TE_SendToAll();
TE_SetupBeamPoints(startpos, pos, light_fx, 0, 0, 0, 0.2, 10.0, 5.0, 0, 1.0, {255, 255, 255, 255}, 3);
TE_SendToAll();
TE_SetupSparks(pos, dir, 5000, 1000);
TE_SendToAll();
TE_SetupEnergySplash(pos, dir, false);
TE_SendToAll();
}
return Plugin_Handled;
}
//Ty wS for that
public bool:wS_GetLookPos_Filter(ent, mask, any:client)
{
return client != ent;
}
wS_GetLookPos(client, Float:wS_Pos[3])
{
decl Float:EyePosition[3], Float:EyeAngles[3], Handle:h_trace;
GetClientEyePosition(client, EyePosition);
GetClientEyeAngles(client, EyeAngles);
h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, wS_GetLookPos_Filter, client);
TR_GetEndPosition(wS_Pos, h_trace);
CloseHandle(h_trace);
}