Уже было. Кто-то говорил, что как только раунд начинается, то все бегут к этим подаркам. Вот и предложили выдавать кики и баны по 5 минут (можно и шлепки выдать).выдавать баны за неверный ответ
SetEntPropEnt(iEntity, Prop_Send, "m_hEffectEntity", iRotating); // наш индекс енти
new iRotating = GetEntPropEnt(iEnti, Prop_Send, "m_hEffectEntity"); // а тут уже его получаем
char g_sColorT[16][] = {"#1", "#2", "#3", "#4", "#5", "#6", "#7", "#8", "#9", "#10", "#OB", "#OC", "#OE", "#HC", "#HT", "#HE"},
g_sColorC[16][] = {"\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x10", "\x0B", "\x0C", "\x0E", "<font color='", "'>", "</font>"};
void PrintToChat2(int iClient, const char[] sMesag, any ...)
{
char sBufer[256];
VFormat(sBufer, sizeof(sBufer), sMesag, 3);
for(int i = 0; i < 16; i++)
ReplaceString(sBufer, sizeof(sBufer), g_sColorT[i], g_sColorC[i]);
PrintToChat(iClient, "\x01%s %s", PREFIX, sBufer);
}
Для ксс#HС34c924#HTмама папа#HE
public Action:Gift(Handle:timer, any:i)
{
if (!IsClientInGame(i)) return Plugin_Handled;
new iEntity = CreateEntityByName("prop_dynamic");
if (iEntity)
{
decl Float:fPos[3], String:clr[20];
new String:sTargetName[32],
String:sBufer[70],
Float:fTime = 30.0;
GetClientAbsOrigin(i, fPos); fPos[0] += 50.0;
if (!IsPlayerAlive(i)) fPos[2] -= 40.0;
Format(sTargetName, sizeof(sTargetName), "xmasgift_%i", iEntity);
DispatchKeyValueVector(iEntity, "origin", fPos);
DispatchKeyValue(iEntity, "solid", "6");
DispatchKeyValue(iEntity, "model", "models/models_kit/xmas/giftbox_mini_quad.mdl");
DispatchKeyValue(iEntity, "targetname", sTargetName);
SetVariantString(sTargetName);
DispatchSpawn(iEntity);
SetEntProp(iEntity, Prop_Send, "m_usSolidFlags", 8);
SetEntProp(iEntity, Prop_Send, "m_CollisionGroup", 1);
Format(sBufer, sizeof(sBufer), "OnUser1 !self:kill::%0.2f:-1", fTime);
SetVariantString(sBufer);
AcceptEntityInput(iEntity, "AddOutput");
AcceptEntityInput(iEntity, "FireUser1");
new iRotating = CreateEntityByName("func_rotating", -1);
DispatchKeyValueVector(iRotating, "origin", fPos);
DispatchKeyValue(iRotating, "targetname", sTargetName);
DispatchKeyValue(iRotating, "maxspeed", "180");
DispatchKeyValue(iRotating, "friction", "0");
DispatchKeyValue(iRotating, "dmg", "0");
DispatchKeyValue(iRotating, "solid", "0");
DispatchKeyValue(iRotating, "spawnflags", "64");
DispatchSpawn(iRotating);
SetVariantString("!activator");
AcceptEntityInput(iEntity, "SetParent", iRotating, iRotating);
AcceptEntityInput(iRotating, "Start", -1, -1);
SetEntProp(iRotating, Prop_Send, "m_CollisionGroup", 1);
Format(sBufer, sizeof(sBufer), "OnUser1 !self:kill::%0.2f:-1", fTime);
SetVariantString(sBufer);
AcceptEntityInput(iRotating, "AddOutput");
AcceptEntityInput(iRotating, "FireUser1");
SetEntPropEnt(iEntity, Prop_Send, "m_hEffectEntity", iRotating);
Format(clr, sizeof(clr), "%i %i %i", GetRandomInt(0,255),GetRandomInt(0,255),GetRandomInt(0,255));
new iSprite = CreateEntityByName("env_sprite");
DispatchKeyValue(iSprite, "rendermode", "5");
DispatchKeyValue(iSprite, "rendercolor", String:clr);
DispatchKeyValue(iSprite, "renderamt", "255");
DispatchKeyValue(iSprite, "scale", "1");
DispatchKeyValue(iSprite, "model", "sprites/glow01.spr");
DispatchKeyValueVector(iSprite, "origin", fPos);
DispatchSpawn(iSprite);
SetVariantString("!activator");
AcceptEntityInput(iSprite, "SetParent", iEntity);
SetEntPropEnt(iEntity, Prop_Send, "m_hGroundEntity", iSprite);
SDKHook(iEntity, SDKHook_StartTouch, Hook_GiftStartTouch);
}
return Plugin_Stop;
}
public Hook_GiftStartTouch(iEntity, iClient)
{
if (iClient > 0 && iClient <= MaxClients)
{
OnBreak_Func(iClient);
DelEnti(iEntity);
}
}
DelEnti(iEnti)
{
if(!IsValidEdict(iEnti)) return;
new iRotating = GetEntPropEnt(iEnti, Prop_Send, "m_hEffectEntity");
if(iRotating && IsValidEdict(iRotating))
AcceptEntityInput(iRotating, "Kill");
new iSprite = GetEntPropEnt(iEnti, Prop_Send, "m_hGroundEntity");
if (iSprite && IsValidEdict(iSprite))
AcceptEntityInput(iSprite, "Kill");
AcceptEntityInput(iEnti, "Kill");
}
Просто перед компиляцией временно перенеси в корзину файл shop.inc или ему подобный/принадлежащий из папки include (она там же, где и компилируешь на ПК).версию без shop'a
А чё она в ксго вверх ногами спавнится и удалить её нельзя? Конфиг чет не создаётся. Подарки иногда чуть в землю вкопаны...
Поддерживаются игры:
CS:S v34
CS:S Steam
Частично будет работать CSGO, нужно несколько фиксов.
Переменные:
ny_snowman - снеговики
ny_large - большие ёлки
ny_snowball - снежки
ny_light - гирлянда на ёлках
ny_gift - выдача подарков
ny_gsanta - выдача подарков с викторины
"treees"
{
"tree_0"
{
"origin" "0.0 0.0 0.0"
"angle" "0.0 0.0 0.0"
}
}
http://world(дефис)source(точка)ru/forum/100-2292-1Твою ж налево, этот плагин перепишу еще раз, ибо то что стоит сейчас - опасно ставить.
Вопрос на засыпку, уже написал набросок с adt-массивом, в который загружаются ёлки.
Как реализовать удаление ёлки из kv?
Была мысль создавать kv с названием карты "trees.de_dust2.txt", а в нём уже делать по такому принципу:
PHP:"treees" { "tree_0" { "origin" "0.0 0.0 0.0" "angle" "0.0 0.0 0.0" } }
Каждый елемент массива равен номеру дерева, с дубликатами я уже справился.
А вот как узнать какой нужно удалить - абсолютно понятия не имею. Даже если я имею точные координаты ёлки - как я ее удалю?
Для kv несколько сотен ключей - это ещё ерунда. А вот когда попытаешься записывать туда статистику всех игроков, что играли/побывали на сервере (миллионы), то конечно.в kv файле 100+ ключей
для пропа добавить какое-либо свойство
DispatchKeyValue(entity, "TargetName", "Имя объекта");
т.е. выставить название объекта "tree_(индекс_ёлки_в_массиве)" и при удалении из TargetName брать индекс?)C-подобный:DispatchKeyValue(entity, "TargetName", "Имя объекта");