kaifodrom1337
Участник
- Сообщения
- 72
- Реакции
- 7
Как сделать точку закупки на всей карте? Знаю о плагине Buyzone range, но он не работает.
Игра: CSS v34
Игра: CSS v34
#include <sdktools_functions>
public void OnMapStart()
{
float wmin[3], wmax[3], pos[3], vec[3];
GetEntPropVector(0, Prop_Data, "m_WorldMins", wmin);
GetEntPropVector(0, Prop_Data, "m_WorldMaxs", wmax);
int ent = MaxClients+1;
while((ent = FindEntityByClassname(ent, "func_buyzone")) != -1)
{
GetEntPropVector(ent, Prop_Send, "m_vecOrigin", pos);
NegateVector(pos);
AddVectors(pos, wmin, vec);
SetEntPropVector(ent, Prop_Data, "m_vecMins", vec);
AddVectors(pos, wmax, vec);
SetEntPropVector(ent, Prop_Data, "m_vecMaxs", vec);
}
}
#include <sdktools_functions>
public void OnMapStart()
{
float wmin[3], wmax[3];
GetEntPropVector(0, Prop_Data, "m_WorldMins", wmin);
GetEntPropVector(0, Prop_Data, "m_WorldMaxs", wmax);
int ent = MaxClients+1;
while((ent = FindEntityByClassname(ent, "func_buyzone")) != -1)
{
SetEntPropVector(ent, Prop_Data, "m_vecMins", wmin);
SetEntPropVector(ent, Prop_Data, "m_vecMaxs", wmax);
}
}
можешь пожалуйста отправить это уже готовым файлом?Вот это должно сделать все зоны закупки размером с карту:Я не помню равны ли координаты зон покупки нулю, как у некоторых других зон, потому сделал поправку.C-подобный:#include <sdktools_functions> public void OnMapStart() { float wmin[3], wmax[3], pos[3], vec[3]; GetEntPropVector(0, Prop_Data, "m_WorldMins", wmin); GetEntPropVector(0, Prop_Data, "m_WorldMaxs", wmax); int ent = MaxClients+1; while((ent = FindEntityByClassname(ent, "func_buyzone")) != -1) { GetEntPropVector(ent, Prop_Send, "m_vecOrigin", pos); NegateVector(pos); AddVectors(pos, wmin, vec); SetEntPropVector(ent, Prop_Data, "m_vecMins", vec); AddVectors(pos, wmax, vec); SetEntPropVector(ent, Prop_Data, "m_vecMaxs", vec); } }
Если зоны всегда располагаются в центре карты, то код будет ещё проще:C-подобный:#include <sdktools_functions> public void OnMapStart() { float wmin[3], wmax[3]; GetEntPropVector(0, Prop_Data, "m_WorldMins", wmin); GetEntPropVector(0, Prop_Data, "m_WorldMaxs", wmax); int ent = MaxClients+1; while((ent = FindEntityByClassname(ent, "func_buyzone")) != -1) { SetEntPropVector(ent, Prop_Data, "m_vecMins", wmin); SetEntPropVector(ent, Prop_Data, "m_vecMaxs", wmax); } }
Лучше тебе конечно потратить 10-15 минут, чтоб разобраться, если ты не планируешь закрывать сервер через неделю. Но дело твое конечно.можешь пожалуйста отправить это уже готовым файлом?
Лучше компилить той версией, что стоит на сервере (потому что под v34 идёт свой SM и скомпиленное в обычном может фигово работать), а файл *.sp нужно сохранять в UTF-8 без BOM (это даже стоковый блокнот винды умеет, емнип).можешь пожалуйста отправить это уже готовым файлом?
public void OnClientPostAdminCheck(int iClient)
{
SDKHook(iClient, SDKHook_SetTransmit, Hook_SetTransmit);
}
Action Hook_SetTransmit(int entity, int iClient)
{
SetEntProp(iClient, Prop_Send, "m_bInBuyZone", 1);
return Plugin_Continue;
}
Да, проверку на живой или нет надо было сделать конечно же, а то спамять будут мертвые.@KiKiEEKi, можно, но это будет срабатывать каждый тик для каждого игрока и бота, а мой код всего раз при запуске карты.
При этом результат будет одинаковый (ну может в твоём варианте меню покупки сможет отрыть наблюдатель, кроме того сработает и вне границ карты).
public void OnClientPostAdminCheck(int iClient)
{
SDKHook(iClient, SDKHook_SetTransmit, Hook_SetTransmit);
}
Action Hook_SetTransmit(int entity, int iClient)
{
if(IsPlayerAlive(iClient)) SetEntProp(iClient, Prop_Send, "m_bInBuyZone", 1);
return Plugin_Continue;
}
Ну так пишите сразу настройку. Примеры, а то можно и на сошке сделать, только обынчый юзер этого не сможетА можно это сделать через stripper
достаточно в global_filters прописать@DarkerZ, можно, никто не запрещает.
Только для каждой карты придётся ручками высчитывать какие значения подставлять.
;удаляем все байзоны на карте
filter:
{
"classname" "func_buyzone"
}
;добавляем байзоны для каждой из команд
add:
{
"classname" "func_buyzone"
"targetname" "newbuyzone1"
"TeamNum" "2"
"OnUser1" "!self,AddOutput,solid 2,0,1"
"OnUser1" "!self,AddOutput,mins -32000 -32000 -32000,0.2,1"
"OnUser1" "!self,AddOutput,maxs 32000 32000 32000,0.2,1"
}
add:
{
"classname" "func_buyzone"
"targetname" "newbuyzone2"
"TeamNum" "3"
"OnUser1" "!self,AddOutput,solid 2,0,1"
"OnUser1" "!self,AddOutput,mins -32000 -32000 -32000,0.2,1"
"OnUser1" "!self,AddOutput,maxs 32000 32000 32000,0.2,1"
}
;растягиваем на всю карту
add:
{
"classname" "logic_auto"
"OnNewGame" "newbuyzone1,FireUser1,,0.5,-1"
"OnNewGame" "newbuyzone2,FireUser1,,0.5,-1"
}
modify:
{
match:
{
"classname" "func_buyzone"
}
replace:
{
"mins" "-32000 -32000 -32000"
"maxs" "32000 32000 32000"
}
}
сервер падает после добавление в стрипер) Второй способ вообще не работает)достаточно в global_filters прописать
C-подобный:;удаляем все байзоны на карте filter: { "classname" "func_buyzone" } ;добавляем байзоны для каждой из команд add: { "classname" "func_buyzone" "targetname" "newbuyzone1" "TeamNum" "2" "OnUser1" "!self,AddOutput,solid 2,0,1" "OnUser1" "!self,AddOutput,mins -32000 -32000 -32000,0.2,1" "OnUser1" "!self,AddOutput,maxs 32000 32000 32000,0.2,1" } add: { "classname" "func_buyzone" "targetname" "newbuyzone2" "TeamNum" "3" "OnUser1" "!self,AddOutput,solid 2,0,1" "OnUser1" "!self,AddOutput,mins -32000 -32000 -32000,0.2,1" "OnUser1" "!self,AddOutput,maxs 32000 32000 32000,0.2,1" } ;растягиваем на всю карту add: { "classname" "logic_auto" "OnNewGame" "newbuyzone1,FireUser1,,0.5,-1" "OnNewGame" "newbuyzone2,FireUser1,,0.5,-1" }
Сообщения автоматически склеены:
а может даже такое сработает
C-подобный:modify: { match: { "classname" "func_buyzone" } replace: { "mins" "-32000 -32000 -32000" "maxs" "32000 32000 32000" } }
увы не работает(Вот это должно сделать все зоны закупки размером с карту:Я не помню равны ли координаты зон покупки нулю, как у некоторых других зон, потому сделал поправку.C-подобный:#include <sdktools_functions> public void OnMapStart() { float wmin[3], wmax[3], pos[3], vec[3]; GetEntPropVector(0, Prop_Data, "m_WorldMins", wmin); GetEntPropVector(0, Prop_Data, "m_WorldMaxs", wmax); int ent = MaxClients+1; while((ent = FindEntityByClassname(ent, "func_buyzone")) != -1) { GetEntPropVector(ent, Prop_Send, "m_vecOrigin", pos); NegateVector(pos); AddVectors(pos, wmin, vec); SetEntPropVector(ent, Prop_Data, "m_vecMins", vec); AddVectors(pos, wmax, vec); SetEntPropVector(ent, Prop_Data, "m_vecMaxs", vec); } }
Если зоны всегда располагаются в центре карты, то код будет ещё проще:C-подобный:#include <sdktools_functions> public void OnMapStart() { float wmin[3], wmax[3]; GetEntPropVector(0, Prop_Data, "m_WorldMins", wmin); GetEntPropVector(0, Prop_Data, "m_WorldMaxs", wmax); int ent = MaxClients+1; while((ent = FindEntityByClassname(ent, "func_buyzone")) != -1) { SetEntPropVector(ent, Prop_Data, "m_vecMins", wmin); SetEntPropVector(ent, Prop_Data, "m_vecMaxs", wmax); } }
#include <sdkhooks>
public OnClientPutInServer(client)
{
if(IsClientInGame(client))
{
SDKHook(client, SDKHook_PostThinkPost, Hook_PostThinkPost);
}
}
public Hook_PostThinkPost(entity)
{
SetEntProp(entity, Prop_Send, "m_bInBuyZone", 1);
}