Если кс го, то думаю можно попросить автора подправить под ваши нужды за пряники TakeOffCostumeКак реализовать выдачу скина при убийстве с ножа жертве?
Не, старушка v34)Если кс го, то думаю можно попросить автора подправить под ваши нужды за пряники TakeOffCostume
если в кратце, то хукаем евентКак реализовать выдачу скина при убийстве с ножа жертве?
player_death
, получаем индекс оружия его classname, проверяем "нож ли это" проверкой if(StrContains(classname, "knife", false) != -1)
и если тру, то выдаём игроку скин, скин указываем в конфиге/кваре/дефайне, модельку скина прекешировать и добавить в загрузки заранее ещё потребутеся.Суть понял, только вопрос каким образом сделать проверку на каждое убийство? То есть убийца убивает допустим 2 игроков и в новом раунде этим 2 жертвам выдается скинесли в кратце, то хукаем евентplayer_death
, получаем индекс оружия его classname, проверяем "нож ли это" проверкойif(StrContains(classname, "knife", false) != -1)
и если тру, то выдаём игроку скин, скин указываем в конфиге/кваре/дефайне, модельку скина прекешировать и добавить в загрузки заранее ещё потребутеся.
public player_death(Handle:event, const String:name[], bool:dontBroadcast)
{
decl String:weapon_n[32];
GetEventString(event, "weapon", weapon_n, sizeof(weapon_n));
new victim = GetClientOfUserId(GetEventInt(event, "userid"));
if(!StrEqual(weapon_n, "knife"))
return;
if(g_iSvin == victim)
return;
g_iSvin = victim;
}
public player_spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if(client && client == g_iSvin && IsClientInGame(client) && IsPlayerAlive(client))
{
switch(GetClientTeam(client))
{
case CS_TEAM_TR:
{
if(IsModelPrecached(svin_model)) SetEntityModel(client, svin_model);
}
case CS_TEAM_CT:
{
if(IsModelPrecached(svin_model)) SetEntityModel(client, svin_model);
}
}
g_iSvin = -1;
}
return Plugin_Stop;
}
сделай переменнуюСуть понял, только вопрос каким образом сделать проверку на каждое убийство? То есть убийца убивает допустим 2 игроков и в новом раунде этим 2 жертвам выдается скин
PHP:public player_death(Handle:event, const String:name[], bool:dontBroadcast) { decl String:weapon_n[32]; GetEventString(event, "weapon", weapon_n, sizeof(weapon_n)); new victim = GetClientOfUserId(GetEventInt(event, "userid")); if(!StrEqual(weapon_n, "knife")) return; if(g_iSvin == victim) return; g_iSvin = victim; } public player_spawn(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if(client && client == g_iSvin && IsClientInGame(client) && IsPlayerAlive(client)) { switch(GetClientTeam(client)) { case CS_TEAM_TR: { if(IsModelPrecached(svin_model)) SetEntityModel(client, svin_model); } case CS_TEAM_CT: { if(IsModelPrecached(svin_model)) SetEntityModel(client, svin_model); } } g_iSvin = -1; } return Plugin_Stop; }
g_iSvin
как g_iSvin[MAXPLAYERS + 1]
, индекс в этой переменной будет индекс игрока (g_iSvin[client]
), по сути, ты присваиваешь значение в массиве по индексу игрока. Можно ещё просто в ArrayList
кидать userid игроков которым выдать нужно и после спавна читать ArrayList
и удалять, но этот путь сложнее чутка будет чем с обычными arrayКак реализовать выдачу скина при убийстве с ножа жертве?
#include <sdktools>
#define MODEL_PATH "models/player/blablabla"
bool SkinChange[MAXPLAYERS+1];
public void OnPluginStart()
{
HookEvent("player_spawn", Player_Spawn);
HookEvent("player_death", Player_Death);
}
public Action Player_Death(Event event, char[] name, bool silent)
{
char g_sWeaponName[32];
int victim = GetClientOfUserId(event.GetInt("userid"));
event.GetString("weapon", g_sWeaponName, sizeof(g_sWeaponName));
if(StrEqual(g_sWeaponName, "weapon_knife")) {
SetSkinVictim(victim);
}
}
public Action Player_Spawn(Event event, char[] name, bool silent)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if(IsClientInGame(client) && SkinChange[client])
{
SetEntityModel(client, MODEL_PATH);
SkinChange[client] = false;
}
}
void SetSkinVictim(int client)
{
if(!IsModelPrecached(MODEL_PATH)) PrecacheModel(MODEL_PATH, true);
SkinChange[client] = true;
}
если в кратце, то хукаем евентplayer_death
, получаем индекс оружия его classname, проверяем "нож ли это" проверкойif(StrContains(classname, "knife", false) != -1)
и если тру, то выдаём игроку скин, скин указываем в конфиге/кваре/дефайне, модельку скина прекешировать и добавить в загрузки заранее ещё потребутеся.
Оба про bayonet забываете у него нет в названии knifeКак то так (лайт вариант):#include <sdktools> #define MODEL_PATH "models/player/blablabla" bool SkinChange[MAXPLAYERS+1]; public void OnPluginStart() { HookEvent("player_spawn", Player_Spawn); HookEvent("player_death", Player_Death); } public Action Player_Death(Event event, char[] name, bool silent) { char g_sWeaponName[32]; int victim = GetClientOfUserId(event.GetInt("userid")); event.GetString("weapon", g_sWeaponName, sizeof(g_sWeaponName)); if(StrEqual(g_sWeaponName, "weapon_knife")) { SetSkinVictim(victim); } } public Action Player_Spawn(Event event, char[] name, bool silent) { int client = GetClientOfUserId(event.GetInt("userid")); if(IsClientInGame(client) && SkinChange[client]) { SetEntityModel(client, MODEL_PATH); SkinChange[client] = false; } } void SetSkinVictim(int client) { if(!IsModelPrecached(MODEL_PATH)) PrecacheModel(MODEL_PATH, true); SkinChange[client] = true; }
Так ему для 34 надо, зафиг ему bayonet?Оба про bayonet забываете у него нет в названии knife
игра css v34Оба про bayonet забываете у него нет в названии knife
#pragma semicolon 1
#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <sdkhooks>
//Настройка моба
#define MOB_MODEL "models/1ama/1work/item_erotic.mdl"
#define SPRITE "powerfind/bomb_effect/effect_iskra.vmt"
#define SOUND "powerfind/strip.mp3"
//Настройка поворота func_rotating
#define ROTATE_SPEED "1"
#define ROTATE_SPAWNFLAGS "64"
new String:animations[][] =
{
"1_combo1",
"1_combo2",
"1_combo3",
"1_combo4"
};
new iEntity = 0;
new iRotator = 0;
new g_iCollision = -1;
new g_iSolidFlags = -1;
new Handle:TimerAnim;
new Float:fBombPos[3];
public OnPluginStart()
{
HookEvent("bomb_planted", bomb_planted);
HookEvent("bomb_exploded", end);
HookEvent("bomb_defused", end);
HookEvent("round_end", end);
HookEvent("round_start", round_start);
AddFileToDownloadsTable("materials/1ama/1work/item_erotic/CherryPopz_Face_D.vmt");
AddFileToDownloadsTable("materials/1ama/1work/item_erotic/CherryPopz_Face_D.vtf");
AddFileToDownloadsTable("materials/1ama/1work/item_erotic/CherryPopz_Hair_D.vmt");
AddFileToDownloadsTable("materials/1ama/1work/item_erotic/CherryPopz_Hair_D.vtf");
AddFileToDownloadsTable("materials/1ama/1work/item_erotic/i.vmt");
AddFileToDownloadsTable("materials/1ama/1work/item_erotic/i.vtf");
AddFileToDownloadsTable("materials/1ama/1work/item_erotic/CherryPopz_Body_D.vmt");
AddFileToDownloadsTable("materials/1ama/1work/item_erotic/CherryPopz_Body_D.vtf");
AddFileToDownloadsTable("models/1ama/1work/item_erotic.sw.vtx");
AddFileToDownloadsTable("models/1ama/1work/item_erotic.vvd");
AddFileToDownloadsTable("models/1ama/1work/item_erotic.dx80.vtx");
AddFileToDownloadsTable("models/1ama/1work/item_erotic.dx90.vtx");
AddFileToDownloadsTable("models/1ama/1work/item_erotic.mdl");
AddFileToDownloadsTable("materials/powerfind/bomb_effect/effect_iskra.vtf");
AddFileToDownloadsTable("materials/powerfind/bomb_effect/effect_iskra.vmt");
AddFileToDownloadsTable("sound/powerfind/strip.mp3");
}
public Action:round_start(Handle:event, String:name[], bool:dontBroadcast)
{
if(TimerAnim)
{
KillTimer(TimerAnim, false);
TimerAnim = INVALID_HANDLE;
}
return Plugin_Continue;
}
public end(Handle:event, String:name[], bool:dontBroadcast)
{
if (TimerAnim)
{
KillTimer(TimerAnim, false);
TimerAnim = INVALID_HANDLE;
AcceptEntityInput(iRotator, "Stop");
AcceptEntityInput(iRotator, "kill");
AcceptEntityInput(iEntity, "KillHierarchy");
for(new i = 1; i <= MaxClients; i++)
if(IsClientInGame(i) && !IsFakeClient(i))
StopSound(i, SNDCHAN_STATIC, SOUND);
}
/*if(Beam != INVALID_HANDLE)
{
KillTimer(Beam);
Beam = INVALID_HANDLE;
}*/
}
public bomb_planted(Handle:event, String:name[], bool:dontBroadcast)
{
new giC4Index = FindEntityByClassname(MaxClients + 1, "planted_c4");
if(0 < giC4Index)
{
GetEntPropVector(giC4Index, Prop_Send, "m_vecOrigin", fBombPos, 0);
CreateMob(fBombPos);
}
}
public OnMapStart()
{
PrecacheModel(MOB_MODEL, true);
PrecacheDecal(SPRITE, true);
PrecacheSound(SOUND, true);
}
public Action:AnimTimer(Handle:timer, any:entity)
{
SetVariantString(animations[GetRandomInt(0, sizeof(animations)-1)]);
AcceptEntityInput(entity, "SetAnimation");
return Plugin_Continue;
}
CreateMob(Float:fOrigin[3])
{
iEntity = CreateEntityByName("prop_dynamic");
SetEntityModel(iEntity, MOB_MODEL);
SetEntProp(iEntity, Prop_Send, "m_CollisionGroup", 0);
SetEntProp(iEntity, Prop_Send, "m_nSolidType", 0);
SetSolidFlags(iEntity, 152);
SetEntityMoveType(iEntity, MOVETYPE_VPHYSICS);
fOrigin[1] += 50;
TeleportEntity(iEntity, fOrigin, NULL_VECTOR, NULL_VECTOR);
DispatchSpawn(iEntity);
SetVariantString("1_combo1");
AcceptEntityInput(iEntity, "SetAnimation");
iRotator = CreateEntityByName("func_rotating");
if (iRotator <= 0)
return;
DispatchKeyValueVector(iRotator, "origin", fOrigin);
decl String:rotator_name[20];
Format(rotator_name, 20, "rt_%d", iRotator);
DispatchKeyValue(iRotator, "targetname", rotator_name);
DispatchKeyValue(iRotator, "maxspeed", ROTATE_SPEED);
DispatchKeyValue(iRotator, "dmg", "0");
DispatchKeyValue(iRotator, "solid", "0");
DispatchKeyValue(iRotator, "spawnflags", ROTATE_SPAWNFLAGS);
DispatchSpawn(iRotator);
SetVariantString(rotator_name);
DispatchKeyValueVector(iRotator, "origin", fOrigin);
AcceptEntityInput(iEntity, "SetParent");
AcceptEntityInput(iRotator, "Start");
new sprite = CreateEntityByName("env_sprite");
DispatchKeyValue(sprite, "spawnflags", "1");
DispatchKeyValueFloat(sprite, "scale", 0.5);
DispatchKeyValue(sprite, "rendermode", "1");
DispatchKeyValue(sprite, "rendercolor", "255 255 255");
DispatchKeyValue(sprite, "model", SPRITE);
DispatchSpawn(sprite);
TeleportEntity(sprite, fOrigin, NULL_VECTOR, NULL_VECTOR);
SetVariantString("!activator");
AcceptEntityInput(sprite, "SetParent", iEntity);
new clients[MaxClients+1], total;
for (new i = 1; i <= MaxClients; i++)
if(IsClientInGame(i) && !IsFakeClient(i))
clients[total++] = i;
if(total > 0)
EmitSound(clients, total, SOUND, iEntity, SNDCHAN_STATIC, _, _, 1.0);
TimerAnim = CreateTimer(10.0, AnimTimer, iEntity, TIMER_REPEAT);
}
SetSolidFlags(entity, iFlags)
{
if (g_iCollision == -1 || g_iSolidFlags == -1)
return;
SetEntData(entity, g_iSolidFlags + g_iCollision, iFlags, 2, true);
}
stock DrawRing(Float:pos[3])
{
//TE_SetupBeamRingPoint(pos, 1.0, //Начальный радиус круга
//RING_RADIUS, // Радиус круга
//beamsprite, // Прекеш индекс текстуры
//beamsprite, // Прекеш индекс текстуры 2 (можно дублировать)
//1.0, // Начальный кадр
//30.0, // Скорость отрисовки (FPS)
//2.0, // Срок жизни круга (сек)
//5.0, // Ширина круга
//1.0, // Амплитуда колебаний
//{255, 255, 255, 255}, // Цвет (задан в виде массисва RGBA)
//80, // Скорость вращения текстуры
//0); // Флаг
//TE_SendToAll(0.0);
}
public Action:Timer_Beacon(Handle:timer, any:value)
{
//TE_SetupEnergySplash(fBombPos, fBombPos, true);
//TE_SendToAll();
static Float:RingOrigin[3];
RingOrigin = fBombPos;
RingOrigin[2] += 5.0;
// TE_SetupBeamRingPoint(RingOrigin, 150.0,
// 150.0,
// beamsprite,
// beamsprite,
// 1,
// 15,
// 5.0,
// 8.0,
// 0.0,
// {255, 255, 255, 255},
// 100,
// 0);
// TE_SendToAll();
DrawRing(RingOrigin);
}
ПопробуйВсех с прошедшими праздниками! Ребят, подскажите пожалуйста. Как сделать возможность простым игрокам на сервере, добавлять ботов? Допустим зашел ночью один поиграть, прописал команду в чат bot_add и добавился бот, или пару ботов, возможно такое реализовать? CSS v34/ Sourcmode 1.6.3
#include <sourcemod>
#define MaxBots 5
int iClients = 0;
public void OnPluginStart()
{
AddCommandListener(botAction, "sm_addbot");
}
public Action botAction(int client, const char[] command, int args)
{
if(client && !IsFakeClient(client) && IsClientInGame(client))
{
iClients = GetClientCount();
if(iClients==1)
{
for (int i = 0;i<MaxBots;i++)
{
ServerCommand("bot_add");
}
}
else if (iClients>1)
{
return;
}
}
}
public void OnClientDisconnect_Post(client)
{
iClients = GetClientCount();
if(iClients<1)
{
ServerCommand("bot_kick");
iClients = 0;
}
}
#include <sourcemod> #define MaxBots 5 int iClients = 0; public void OnPluginStart() { AddCommandListener(botAction, "sm_getbot"); } public Action botAction(int client, const char[] command, int args) { if(client && !IsFakeClient(client) && IsClientInGame(client)) { iClients = GetClientCount(); if(iClients==1) { for (int i = 0;i<MaxBots;i++) { ServerCommand("bot_add"); } } else if (iClients>1) { return; } } } public void OnClientDisconnect_Post(client) { iClients = GetClientCount(); if(iClients<1) { ServerCommand("bot_kick"); iClients = 0; } }
//// bot_add.sp
// C:\Users\¤щўяш\Desktop\bot_add.sp(3) : error 010: invalid function or declaration
// C:\Users\¤щўяш\Desktop\bot_add.sp(5) : error 001: expected token: ";", but found "-identifier-"
// C:\Users\¤щўяш\Desktop\bot_add.sp(10) : error 021: symbol already defined: "Action"
// C:\Users\¤щўяш\Desktop\bot_add.sp(10) : error 017: undefined symbol "client"
// C:\Users\¤щўяш\Desktop\bot_add.sp(10) : error 029: invalid expression, assumed zero
// C:\Users\¤щўяш\Desktop\bot_add.sp(10) : fatal error 127: too many error messages on one line
//
// Compilation aborted.
// 6 Errors.
#include <sourcemod>
int MaxBots = 5;
int iClients = 0;
public void OnPluginStart()
{
AddCommandListener(botAction, "sm_addbot");
}
public Action botAction(int client, const char[] command, int args)
{
if (client && IsClientInGame(client) && !IsFakeClient(client))
{
iClients = GetClientCount();
if (iClients == 1)
{
for (int i = 0; i < MaxBots; i++)
{
ServerCommand("bot_add");
}
}
}
return Plugin_Handled;
}
public void OnClientDisconnect_Post(client)
{
iClients = GetClientCount();
if (iClients < 1)
{
iClients = 0;
ServerCommand("bot_kick");
}
}
Те же ошибкиC++:#include <sourcemod> int MaxBots = 5; int iClients = 0; public void OnPluginStart() { AddCommandListener(botAction, "sm_addbot"); } public Action botAction(int client, const char[] command, int args) { if (client && IsClientInGame(client) && !IsFakeClient(client)) { iClients = GetClientCount(); if (iClients == 1) { for (int i = 0; i < MaxBots; i++) { ServerCommand("bot_add"); } } } return Plugin_Handled; } public void OnClientDisconnect_Post(client) { iClients = GetClientCount(); if (iClients < 1) { iClients = 0; ServerCommand("bot_kick"); } }
Те же ошибки
а вот так?//// bot_add.sp
// C:\Users\¤щўяш\Desktop\bot_add.sp(3) : error 010: invalid function or declaration
// C:\Users\¤щўяш\Desktop\bot_add.sp(5) : error 001: expected token: ";", but found "-identifier-"
// C:\Users\¤щўяш\Desktop\bot_add.sp(10) : error 021: symbol already defined: "Action"
// C:\Users\¤щўяш\Desktop\bot_add.sp(10) : error 017: undefined symbol "client"
// C:\Users\¤щўяш\Desktop\bot_add.sp(10) : error 029: invalid expression, assumed zero
// C:\Users\¤щўяш\Desktop\bot_add.sp(10) : fatal error 127: too many error messages on one line
//
// Compilation aborted.
// 6 Errors.
#include <sourcemod>
#include <console.inc>
#define MaxBots 5
new iClients;
public OnPluginStart()
{
AddCommandListener(botAction, "sm_addbot");
}
public Action:botAction(client, const String:command[], argc)
{
if (client && IsClientInGame(client) && !IsFakeClient(client))
{
iClients = GetClientCount();
if (iClients == 1)
{
for (new i = 0; i < MaxBots; i++)
{
ServerCommand("bot_add");
}
}
}
}
public OnClientDisconnect_Post(client)
{
iClients = GetClientCount();
if (iClients < 1)
{
ServerCommand("bot_kick");
}
}
А вот так все скомпилилось! Осталось проверить.а вот так?
C++:#include <sourcemod> #include <console.inc> #define MaxBots 5 new iClients; public OnPluginStart() { AddCommandListener(botAction, "sm_addbot"); } public Action:botAction(client, const String:command[], argc) { if (client && IsClientInGame(client) && !IsFakeClient(client)) { iClients = GetClientCount(); if (iClients == 1) { for (new i = 0; i < MaxBots; i++) { ServerCommand("bot_add"); } } } } public OnClientDisconnect_Post(client) { iClients = GetClientCount(); if (iClients < 1) { ServerCommand("bot_kick"); } }