У меня компилируется без изменений и ошибокВсем привет,как исправить?
Была ошибка на 128,добавил проверку в игре ли игрок.
Не компилируется из за ниже приведенных error логахC-подобный:if (IsPlayerAlive(iClient) && IsClientInGame(iClient))
Посмотреть вложение 66244
Просто замени "Cookie" на что-нибудь другое тот же "cookie".
Спасибо помогло)Просто замени "Cookie" на что-нибудь другое тот же "cookie".
Не я автор,просто пытаюсь добиться корректной работы ресурса),с меня лайкИ сам тип данных "Handle" заменил бы на "Cookie" У тебя смесь нового и старого синтаксиса
SourcePawn Compiler 1.9.0.6281
Проблему решил ответом выше),спасибо)SourcePawn Compiler 1.9.0.6281
А где этот плагин взял. На этом форуме нашел 2 с идентичным практически кодом, но без хилла. Тут хилл сделан как-то ужасно.Привет всем
может кто плагин подправить?
Чтоб лечило когда находишься у елки?
В данный момент не лечит,нечего не происходит
Заранее благодарю
FindEntityByClassname(-1, "wearable_item");
FindEntityByClassname(-1, "item_assaultsuit");
GetEntPropEnt(client, Prop_Send, "m_hMyWearables");
Не помню где качал,ну где-то скачен был)А где этот плагин взял. На этом форуме нашел 2 с идентичным практически кодом, но без хилла. Тут хилл сделан как-то ужасно.
Попробуй так, но тут не через таймер как было, а триггером будет. Некоторые квары вырезал. Кол-во восстановления hp должно быть отрицательным, иначе пойдет урон,Не помню где качал,ну где-то скачен был)
Понятно что ужасно,поэтому и написал сюда
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdktools_functions>
#include <sdktools_trace>
public Plugin myinfo =
{
name = "Happy new year",
author = "Impulse",
description = "",
version = "1.3",
url = "timetoplay.su"
}
char file[70];
ConVar cvarEnabledHeal;
ConVar cvarHp;
ConVar cvarRadius;
public OnPluginStart()
{
RegAdminCmd("tree", CreateTree, ADMFLAG_ROOT);
RegAdminCmd("deltree", DeleteTree, ADMFLAG_ROOT);
HookEvent("round_start", Start);
cvarEnabledHeal = CreateConVar("ny_enablehp", "1", "1|0 Нужна ли Вам вообще функция выдачи здоровья");
cvarHp = CreateConVar("ny_hp", "-5", "Сколько добавлять здоровья в зоне ёлочки");
cvarRadius = CreateConVar("ny_radius", "200.0", "Максимальный радиус от игрока до ёлочки для выдачи здоровья");
AutoExecConfig(true, "newyear", "newyear");
}
public OnMapStart()
{
PrecacheModel("models/models_kit/xmas/xmastree_mini.mdl",true);
AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.dx80.vtx");
AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.dx90.vtx");
AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.mdl");
AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.phy");
AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.sw.vtx");
AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.vvd");
AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.xbox.vtx");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscA.vmt");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscA.vtf");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscA_skin2.vmt");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscA_skin2.vtf");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB.vmt");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB.vtf");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB_skin2.vmt");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB_skin2.vtf");
AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB_spec.vtf");
}
public void Start(Event event, const char []name, bool dontBroadcast)
{
char MapName[30];
int i = 0;
GetCurrentMap(String:MapName, sizeof(MapName));
Format(String:file, sizeof(file), "cfg/newyear/%s.cfg", MapName);
KeyValues kv = new KeyValues("tree");
if (FileToKeyValues(kv, file) && KvGotoFirstSubKey(kv))
{
char KeyName[50];
do
{
if (KvGetSectionName(kv, KeyName, 50))
{
i++;
decl Float:g_fOrigin[3], Float:g_fAngles[3];
KvGetVector(kv, "1", g_fOrigin);
KvGetVector(kv, "2", g_fAngles);
SpawnTree(g_fOrigin, g_fAngles);
}
}
while (KvGotoNextKey(kv));
}
PrintToServer("-----------------------", i);
PrintToServer("Spawned %i tress on map", i);
PrintToServer("-----------------------", i);
delete kv;
}
public Action CreateTree(int client, int args)
{
float g_fOrigin[3], g_fAngles[3];
GetClientEyePosition(client, g_fOrigin);
GetClientEyeAngles(client, g_fAngles);
TR_TraceRayFilter(g_fOrigin, g_fAngles, MASK_SOLID, RayType_Infinite, Trace_FilterPlayers, client);
if(TR_DidHit(INVALID_HANDLE))
{
TR_GetEndPosition(g_fOrigin, INVALID_HANDLE);
TR_GetPlaneNormal(INVALID_HANDLE, g_fAngles);
GetVectorAngles(g_fAngles, g_fAngles);
g_fAngles[0] += 90.0;
}
SpawnTree(g_fOrigin, g_fAngles);
char ar[3];
GetCmdArgString(ar, sizeof(ar));
Add(g_fOrigin, g_fAngles, StringToInt(ar));
}
public bool Trace_FilterPlayers(int entity, int contentsMask, any data)
{
if(entity != data && entity > MaxClients)
return true;
return false;
}
public SpawnTree(const float g_fOrigin[3], const float g_fAngles[3])
{
int index = CreateEntityByName("prop_dynamic");
DispatchKeyValue(index, "model", "models/models_kit/xmas/xmastree_mini.mdl");
DispatchKeyValue(index, "Solid", "6");
DispatchSpawn(index);
TeleportEntity(index, g_fOrigin, g_fAngles, NULL_VECTOR);
SetEntityMoveType(index, MOVETYPE_VPHYSICS);
if (!GetConVarBool(cvarEnabledHeal))
{
return;
}
char hp[8];
cvarHp.GetString(hp, sizeof(hp));
int zone = CreateEntityByName("trigger_hurt");
float radius = GetConVarFloat(cvarRadius);
float m_vecMins[3];
m_vecMins[0] = g_fOrigin[0] - radius;
m_vecMins[1] = g_fOrigin[1] + radius;
m_vecMins[2] = g_fOrigin[2] + radius;
float m_vecMaxs[3];
m_vecMaxs[0] = g_fOrigin[0] + radius;
m_vecMaxs[1] = g_fOrigin[1] - radius;
m_vecMaxs[2] = g_fOrigin[2] - radius;
DispatchKeyValue(zone, "spawnflags", "64");
DispatchKeyValue(zone, "damagetype", "1024");
DispatchKeyValue(zone, "damagecap", "5");
DispatchKeyValue(zone, "damage", hp);
DispatchSpawn(zone);
ActivateEntity(zone);
SetEntProp(zone, Prop_Data, "m_spawnflags", 64);
TeleportEntity(zone, g_fOrigin, NULL_VECTOR, NULL_VECTOR);
SetEntityModel(zone, "models/error.mdl");
m_vecMins[0] = m_vecMins[0] - g_fOrigin[0];
if (m_vecMins[0] > 0.0)
m_vecMins[0] *= -1.0;
m_vecMins[1] = m_vecMins[1] - g_fOrigin[1];
if (m_vecMins[1] > 0.0)
m_vecMins[1] *= -1.0;
m_vecMins[2] = m_vecMins[2] - g_fOrigin[2];
if (m_vecMins[2] > 0.0)
m_vecMins[2] *= -1.0;
m_vecMaxs[0] = m_vecMaxs[0] - g_fOrigin[0];
if (m_vecMaxs[0] < 0.0)
m_vecMaxs[0] *= -1.0;
m_vecMaxs[1] = m_vecMaxs[1] - g_fOrigin[1];
if (m_vecMaxs[1] < 0.0)
m_vecMaxs[1] *= -1.0;
m_vecMaxs[2] = m_vecMaxs[2] - g_fOrigin[2];
if (m_vecMaxs[2] < 0.0)
m_vecMaxs[2] *= -1.0;
SetEntPropVector(zone, Prop_Send, "m_vecMins", m_vecMins);
SetEntPropVector(zone, Prop_Send, "m_vecMaxs", m_vecMaxs);
SetEntProp(zone, Prop_Send, "m_usSolidFlags", 152);
}
public void Add(const float Origin[3], const float Angles[3], int ar)
{
char info[60];
Format(info, sizeof(info), "%f,%f",Origin[0], Origin[1]);
KeyValues kv = new KeyValues("tree");
FileToKeyValues(kv, String:file);
KvJumpToKey(kv, info, true);
KvSetNum(kv, "heal", ar);
KvSetVector(kv, "1", Origin);
KvSetVector(kv, "2", Angles);
KvRewind(kv);
KeyValuesToFile(kv, file);
delete kv;
}
public Action DeleteTree(int client, int args)
{
int index = GetClientAimTarget(client, false);
if (index == -1)
return Plugin_Handled;
float vec[3];
char coord[15];
char coord1[15];
GetEntPropVector(index, Prop_Data, "m_vecAbsOrigin", vec);
FloatToString(vec[0], coord, sizeof(coord));
FloatToString(vec[1], coord1, sizeof(coord1));
char buf3[2][25];
ExplodeString(String:coord, ".", String:buf3, 2, 25);
char buf4[2][25];
ExplodeString(String:coord1, ".", String:buf4, 2, 25);
KeyValues kv = new KeyValues("tree");
if (FileToKeyValues(kv, file) && KvGotoFirstSubKey(kv))
{
char KeyName[35];
do
{
if (KvGetSectionName(kv, KeyName, 35))
{
char buf[2][25];
ExplodeString(String:KeyName, ",", String:buf, 2, 25);
char buf1[2][25];
ExplodeString(String:buf[0], ".", String:buf1, 2, 25);
char buf2[2][25];
ExplodeString(String:buf[1], ".", String:buf2, 2, 25);
if (StrEqual(buf1[0], buf3[0]) && StrEqual(buf2[0], buf4[0]))
{
AcceptEntityInput(index, "Kill");
KvDeleteThis(kv);
KvRewind(kv);
KeyValuesToFile(kv, String:file);
}
}
}
while (KvGotoNextKey(kv));
}
delete kv;
return Plugin_Continue;
}
Работает нормально все.Попробуй так, но тут не через таймер как было, а триггером будет. Некоторые квары вырезал. Кол-во восстановления hp должно быть отрицательным, иначе пойдет урон,
C-подобный:#include <sourcemod> #include <sdktools> #include <cstrike> #include <sdktools_functions> #include <sdktools_trace> public Plugin myinfo = { name = "Happy new year", author = "Impulse", description = "", version = "1.3", url = "timetoplay.su" } char file[70]; ConVar cvarEnabledHeal; ConVar cvarHp; ConVar cvarRadius; public OnPluginStart() { RegAdminCmd("tree", CreateTree, ADMFLAG_ROOT); RegAdminCmd("deltree", DeleteTree, ADMFLAG_ROOT); HookEvent("round_start", Start); cvarEnabledHeal = CreateConVar("ny_enablehp", "1", "1|0 Нужна ли Вам вообще функция выдачи здоровья"); cvarHp = CreateConVar("ny_hp", "-5", "Сколько добавлять здоровья в зоне ёлочки"); cvarRadius = CreateConVar("ny_radius", "200.0", "Максимальный радиус от игрока до ёлочки для выдачи здоровья"); AutoExecConfig(true, "newyear", "newyear"); } public OnMapStart() { PrecacheModel("models/models_kit/xmas/xmastree_mini.mdl",true); AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.dx80.vtx"); AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.dx90.vtx"); AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.mdl"); AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.phy"); AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.sw.vtx"); AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.vvd"); AddFileToDownloadsTable("models/models_kit/xmas/xmastree_mini.xbox.vtx"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscA.vmt"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscA.vtf"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscA_skin2.vmt"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscA_skin2.vtf"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB.vmt"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB.vtf"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB_skin2.vmt"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB_skin2.vtf"); AddFileToDownloadsTable("materials/models/models_kit/xmas/xmastree_miscB_spec.vtf"); } public void Start(Event event, const char []name, bool dontBroadcast) { char MapName[30]; int i = 0; GetCurrentMap(String:MapName, sizeof(MapName)); Format(String:file, sizeof(file), "cfg/newyear/%s.cfg", MapName); KeyValues kv = new KeyValues("tree"); if (FileToKeyValues(kv, file) && KvGotoFirstSubKey(kv)) { char KeyName[50]; do { if (KvGetSectionName(kv, KeyName, 50)) { i++; decl Float:g_fOrigin[3], Float:g_fAngles[3]; KvGetVector(kv, "1", g_fOrigin); KvGetVector(kv, "2", g_fAngles); SpawnTree(g_fOrigin, g_fAngles); } } while (KvGotoNextKey(kv)); } PrintToServer("-----------------------", i); PrintToServer("Spawned %i tress on map", i); PrintToServer("-----------------------", i); delete kv; } public Action CreateTree(int client, int args) { float g_fOrigin[3], g_fAngles[3]; GetClientEyePosition(client, g_fOrigin); GetClientEyeAngles(client, g_fAngles); TR_TraceRayFilter(g_fOrigin, g_fAngles, MASK_SOLID, RayType_Infinite, Trace_FilterPlayers, client); if(TR_DidHit(INVALID_HANDLE)) { TR_GetEndPosition(g_fOrigin, INVALID_HANDLE); TR_GetPlaneNormal(INVALID_HANDLE, g_fAngles); GetVectorAngles(g_fAngles, g_fAngles); g_fAngles[0] += 90.0; } SpawnTree(g_fOrigin, g_fAngles); char ar[3]; GetCmdArgString(ar, sizeof(ar)); Add(g_fOrigin, g_fAngles, StringToInt(ar)); } public bool Trace_FilterPlayers(int entity, int contentsMask, any data) { if(entity != data && entity > MaxClients) return true; return false; } public SpawnTree(const float g_fOrigin[3], const float g_fAngles[3]) { int index = CreateEntityByName("prop_dynamic"); DispatchKeyValue(index, "model", "models/models_kit/xmas/xmastree_mini.mdl"); DispatchKeyValue(index, "Solid", "6"); DispatchSpawn(index); TeleportEntity(index, g_fOrigin, g_fAngles, NULL_VECTOR); SetEntityMoveType(index, MOVETYPE_VPHYSICS); if (!GetConVarBool(cvarEnabledHeal)) { return; } char hp[8]; cvarHp.GetString(hp, sizeof(hp)); int zone = CreateEntityByName("trigger_hurt"); float radius = GetConVarFloat(cvarRadius); float m_vecMins[3]; m_vecMins[0] = g_fOrigin[0] - radius; m_vecMins[1] = g_fOrigin[1] + radius; m_vecMins[2] = g_fOrigin[2] + radius; float m_vecMaxs[3]; m_vecMaxs[0] = g_fOrigin[0] + radius; m_vecMaxs[1] = g_fOrigin[1] - radius; m_vecMaxs[2] = g_fOrigin[2] - radius; DispatchKeyValue(zone, "spawnflags", "64"); DispatchKeyValue(zone, "damagetype", "1024"); DispatchKeyValue(zone, "damagecap", "5"); DispatchKeyValue(zone, "damage", hp); DispatchSpawn(zone); ActivateEntity(zone); SetEntProp(zone, Prop_Data, "m_spawnflags", 64); TeleportEntity(zone, g_fOrigin, NULL_VECTOR, NULL_VECTOR); SetEntityModel(zone, "models/error.mdl"); m_vecMins[0] = m_vecMins[0] - g_fOrigin[0]; if (m_vecMins[0] > 0.0) m_vecMins[0] *= -1.0; m_vecMins[1] = m_vecMins[1] - g_fOrigin[1]; if (m_vecMins[1] > 0.0) m_vecMins[1] *= -1.0; m_vecMins[2] = m_vecMins[2] - g_fOrigin[2]; if (m_vecMins[2] > 0.0) m_vecMins[2] *= -1.0; m_vecMaxs[0] = m_vecMaxs[0] - g_fOrigin[0]; if (m_vecMaxs[0] < 0.0) m_vecMaxs[0] *= -1.0; m_vecMaxs[1] = m_vecMaxs[1] - g_fOrigin[1]; if (m_vecMaxs[1] < 0.0) m_vecMaxs[1] *= -1.0; m_vecMaxs[2] = m_vecMaxs[2] - g_fOrigin[2]; if (m_vecMaxs[2] < 0.0) m_vecMaxs[2] *= -1.0; SetEntPropVector(zone, Prop_Send, "m_vecMins", m_vecMins); SetEntPropVector(zone, Prop_Send, "m_vecMaxs", m_vecMaxs); SetEntProp(zone, Prop_Send, "m_usSolidFlags", 152); } public void Add(const float Origin[3], const float Angles[3], int ar) { char info[60]; Format(info, sizeof(info), "%f,%f",Origin[0], Origin[1]); KeyValues kv = new KeyValues("tree"); FileToKeyValues(kv, String:file); KvJumpToKey(kv, info, true); KvSetNum(kv, "heal", ar); KvSetVector(kv, "1", Origin); KvSetVector(kv, "2", Angles); KvRewind(kv); KeyValuesToFile(kv, file); delete kv; } public Action DeleteTree(int client, int args) { int index = GetClientAimTarget(client, false); if (index == -1) return Plugin_Handled; float vec[3]; char coord[15]; char coord1[15]; GetEntPropVector(index, Prop_Data, "m_vecAbsOrigin", vec); FloatToString(vec[0], coord, sizeof(coord)); FloatToString(vec[1], coord1, sizeof(coord1)); char buf3[2][25]; ExplodeString(String:coord, ".", String:buf3, 2, 25); char buf4[2][25]; ExplodeString(String:coord1, ".", String:buf4, 2, 25); KeyValues kv = new KeyValues("tree"); if (FileToKeyValues(kv, file) && KvGotoFirstSubKey(kv)) { char KeyName[35]; do { if (KvGetSectionName(kv, KeyName, 35)) { char buf[2][25]; ExplodeString(String:KeyName, ",", String:buf, 2, 25); char buf1[2][25]; ExplodeString(String:buf[0], ".", String:buf1, 2, 25); char buf2[2][25]; ExplodeString(String:buf[1], ".", String:buf2, 2, 25); if (StrEqual(buf1[0], buf3[0]) && StrEqual(buf2[0], buf4[0])) { AcceptEntityInput(index, "Kill"); KvDeleteThis(kv); KvRewind(kv); KeyValuesToFile(kv, String:file); } } } while (KvGotoNextKey(kv)); } delete kv; return Plugin_Continue; }
Сам ответил на свой вопросВ чём плюсы и минусы одного глобального буфера против куча локальных?
Кроме того, что не приходится создавать много раз буфера в функциях больше не вижу, по поводу оптимизации я хз.Сам ответил на свой вопрос