Rabb1t
Амбассадор
- Сообщения
- 2,968
- Реакции
- 1,430
- Команда форума
- #3,121
@killerantiflow, он в базу МА не вносит.
#include <sdktools>
public OnPluginStart()
{
HookEvent("player_spawn", OnPlayerSpawn);
}
public OnMapStart()
{
Тут много скачивания
И прикеш
}
public OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if( client > 0 && IsClientInGame(client) && IsPlayerAlive(client) ) {
if ( GetClientTeam(client) == 2 ) {
SetEntityModel(client, "models/player/butagames/fb_t_gk.mdl");
SetEntPropString(client, Prop_Send, "m_szArmsModel", "models/weapons/t_arms_phoenix.mdl");
}
if ( GetClientTeam(client) == 3 ) {
SetEntityModel(client, "models/player/butagames/fb_ct_gk.mdl");
SetEntPropString(client, Prop_Send, "m_szArmsModel", "models/weapons/ct_arms_sas.mdl");
}
}
}
#include <sdktools>
new bool:g_bSkin[MAXPLAYERS + 1];
public OnPluginStart()
{
RegConsoleCmd("sm_skin",Cmd_Skin);
HookEvent("player_spawn", OnPlayerSpawn);
}
public OnClientPutInServer(client)
{
g_bSkin[client] = false;
}
public Action:Cmd_Skin(client, args)
{
g_bSkin[client] = !(g_bSkin[client]);
//PrintToChat(client,"Вы успешно %s установление скина", g_bSkin[client] ? "включили" : "выключили");
}
public OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if( client && IsClientInGame(client) && g_bSkin[client] )
{
new team = GetClientTeam(client);
if ( team == 2 )
{
SetEntityModel(client, "models/player/butagames/fb_t_gk.mdl");
SetEntPropString(client, Prop_Send, "m_szArmsModel", "models/weapons/t_arms_phoenix.mdl");
}
if ( team == 3 )
{
SetEntityModel(client, "models/player/butagames/fb_ct_gk.mdl");
SetEntPropString(client, Prop_Send, "m_szArmsModel", "models/weapons/ct_arms_sas.mdl");
}
}
}
@Rostu Спасибо!
А как грамотно добавить таймер в одну секунду между спавном и выдачей модели? Боюсь, что другой плагин перебьет.
#include <sdktools>
#pragma newdecls required
#define TIME 1.0 //Ваше время для таймера
bool g_bSkin[MAXPLAYERS + 1];
public void OnPluginStart()
{
RegConsoleCmd("sm_skin", Cmd_Skin);
HookEvent("player_spawn", OnPlayerSpawn);
}
public void OnClientPutInServer(int iClient)
{
g_bSkin[iClient] = false;
}
public Action Cmd_Skin(int iClient, int iArgs)
{
g_bSkin[iClient] = !g_bSkin[iClient];
return Plugin_Handled;
}
public void OnPlayerSpawn(Event event, const char[] name, bool bdontBroadcast)
{
CreateTimer(TIME, TIMER_CB, GetEventInt(event, "userid"), TIMER_FLAG_NO_MAPCHANGE);
}
public Action TIMER_CB(Handle hTimer, any iUID)
{
iUID = GetClientOfUserId(iUID);
if(!iUID || !IsClientInGame(iUID) || !IsPlayerAlive(iUID) || !g_bSkin[iUID])
return Plugin_Handled;
int team;
if((team = GetClientTeam(iUID))>1){
char szMDL[PLATFORM_MAX_PATH];
Format(szMDL, sizeof(szMDL), "models/player/butagames/%s", (team == 2) ? "fb_t_gk.mdl" : "fb_ct_gk.mdl");
SetEntityModel(iUID, szMDL);
Format(szMDL, sizeof(szMDL), "models/weapons/%s", (team == 2) ? "t_arms_phoenix.mdl" : "ct_arms_sas.mdl");
SetEntPropString(iUID, Prop_Send, "m_szArmsModel", szMDL);
}
return Plugin_Handled;
}
#include <sdktools>
#pragma newdecls required
#define TIME 3.5 //Ваше время для таймера
static const int iColor[][] =
{
{255, 0, 0}, // террористы
{0, 0, 255} // контр-террористы
};
public void OnPluginStart()
{
HookEvent("player_spawn", Event_Spawn);
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
CreateTimer(TIME, TIMER_CB, TIMER_FLAG_NO_MAPCHANGE);
}
public Action TIMER_CB(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(GetEventInt(event, "userid"));
if(!client) return;
int team = GetClientTeam(client);
if(team < 2) return;
team -= 2;
SetEntityRenderMode(client, RENDER_TRANSCOLOR);
SetEntityRenderColor(client, iColor[team][0], iColor[team][1], iColor[team][2], 255);
}
Ребят напиши сделайте мне таймер в этот плагин, спавнишься и через N сек окрашивание модели. Я пытался но Посмотреть вложение 32456
#include <sdktools>
#pragma newdecls required
#define TIME 3.5 //Ваше время для таймера
public void OnPluginStart()
{
HookEvent("player_spawn", Event_Spawn);
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
CreateTimer(TIME, TIMER_CB, GetEventInt(event, "userid"), TIMER_FLAG_NO_MAPCHANGE);
}
public Action TIMER_CB(Handle hTimer, any client)
{
client = GetClientOfUserId(client);
if(!client || !IsClientInGame(client) || !IsPlayerAlive(client)) return Plugin_Handled;
int team;
if((team = GetClientTeam(client)) < 2) return Plugin_Handled;
int r = (team == 2) ? 255 : 0;
int b = (team == 2) ? 0 : 255;
SetEntityRenderColor(client, r, 0, b, 255);
return Plugin_Handled;
}
Почините пожалуйста плагин, сделайте так чтобы настройки были без конфига и текст брался не из файла а из исходника, крч все настройки в исходники. Игра КСС. И уберите эту поддержку цветов не нужную)
L 07/26/2018 - 12:38:55: [SM] Exception reported: Client index 39 is invalid
L 07/26/2018 - 12:38:55: [SM] Blaming: telekill_protection.smx
L 07/26/2018 - 12:38:55: [SM] Call stack trace:
L 07/26/2018 - 12:38:55: [SM] [0] IsClientInGame
L 07/26/2018 - 12:38:55: [SM] [1] Line 40, D:\1 Server 123\cstrike\addons\sourcemod\scripting\telekill_protection.sp::Timer_GodMode
L 07/26/2018 - 12:38:59: [SM] Exception reported: Client index 40 is invalid
L 07/26/2018 - 12:38:59: [SM] Blaming: telekill_protection.smx
L 07/26/2018 - 12:38:59: [SM] Call stack trace:
L 07/26/2018 - 12:38:59: [SM] [0] IsClientInGame
L 07/26/2018 - 12:38:59: [SM] [1] Line 40, D:\1 Server \cstrike 123\addons\sourcemod\scripting\telekill_protection.sp::Timer_GodMode
L 07/26/2018 - 12:39:02: [SM] Exception reported: Client index 41 is invalid
L 07/26/2018 - 12:39:02: [SM] Blaming: telekill_protection.smx
L 07/26/2018 - 12:39:02: [SM] Call stack trace:
L 07/26/2018 - 12:39:02: [SM] [0] IsClientInGame
L 07/26/2018 - 12:39:02: [SM] [1] Line 40, D:\1 Server 123\cstrike\addons\sourcemod\scripting\telekill_protection.sp::Timer_GodMode
перезалил в посте вышеЗашел на сервер, воскресился, написало в чат что защита включена и все, захожу в телепорт 0 реакции.
Почините пожалуйста плагин, сделайте так чтобы настройки были без конфига и текст брался не из файла а из исходника, крч все настройки в исходники. Игра КСС. И уберите эту поддержку цветов не нужную)
#include <sdktools>
// Время между телепортацией и до отключения защиты
static const float fTime = 1.0;
// Текст при включении защиты
static const char sProtectOn[] = "[\x0EAnti-Telekill\x01] \x04You are protected for \x03%0.1f \x04second(s)!",
// Текст при отключении защиты
sProtectOff[] = "[\x0EAnti-Telekill\x01] \x04You are no longer \x03protected \x04from any damage!";
bool InGodMode[MAXPLAYERS+1];
public Plugin myinfo =
{
name = "Telekill Protection",
author = "Hallucinogenic Troll",
description = "A Simple Teleport Protection, to prevent kills right after going through a teleport",
version = "1.4.1_redux",
url = "http://ptfun.net/newsite/"
};
public void OnPluginStart()
{
HookEvent("round_start", Event_RoundBounds, EventHookMode_PostNoCopy);
HookEvent("round_end", Event_RoundBounds, EventHookMode_PostNoCopy);
}
public void OnClientConnected(int client)
{
InGodMode[client] = false;
}
public void Event_RoundBounds(Handle event, const char[] name, bool dontBroadcast)
{
if(name[6] == 'e')
{
UnhookEntityOutput("trigger_teleport", "OnStartTouch", Output_TeleStartTouch);
for(int i = 1; i <= MaxClients; i++) if(InGodMode[i] && IsClientInGame(i)) ToggleGodMode(i);
}
else HookEntityOutput("trigger_teleport", "OnStartTouch", Output_TeleStartTouch);
}
public void Output_TeleStartTouch(const char[] output, int caller, int activator, float delay)
{
if(activator < 1 || MaxClients < activator || InGodMode[activator]) return;
ToggleGodMode(activator);
CreateTimer(fTime, Timer_GodMode, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE);
}
public Action Timer_GodMode(Handle timer, any client)
{
if((client = GetClientOfUserId(client)) && InGodMode[client]) ToggleGodMode(client);
}
stock void ToggleGodMode(client)
{
InGodMode[client] = !InGodMode[client]
if(InGodMode[client])
{
SetEntProp(client, Prop_Data, "m_takedamage", 0, 1);
PrintToChat(client, sProtectOn, fTime);
return;
}
SetEntProp(client, Prop_Data, "m_takedamage", 2, 1);
PrintToChat(client, sProtectOff);
}
найти где обрабатывается список игроков, попавших в зону заморозки и добавить туда проверку на команду (вообще нужно знать что за мод используется, там можно натив задействовать для отфильтовывания зомбей)Какой код нужно добавить или от куда посмотреть можно?
Ты код скинул Защиту после телепорта, он чем лучше? может его выберунайти где обрабатывается список игроков, попавших в зону заморозки и добавить туда проверку на команду
int g_iEntity[MAXPLAYERS +1];
//Неважный код
public void PlayerDeath(Event event, const char[] name, bool dbc)
{
int iEntity = EntRefToEntIndex(g_iEntity[GetClientOfUserId(event.GetInt("userid"))]);
if(iEntity > 0) UnFreeze(iEntity);
}
public void DecoyDetonate(Event event, const char[] name, bool dbc)
{
iEntity = event.GetInt("entityid");
//Неважный код
if ((iEntity = event.GetInt("entityid")) > 0)
AcceptEntityInput(iEntity, "Kill");
}
public Action TimerUnFreeze(Handle timer, any iRef)
{
int iEntity = EntRefToEntIndex(iRef);
if(iEntity > 0) UnFreeze(iEntity);
return Plugin_Stop;
}
void UnFreeze(int iEntity)
{
float fPos[3];
GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fPos);
//Неважный код
}
iEntity = event.GetInt("entityid");
//Неважный код
if ((iEntity = event.GetInt("entityid")) > 0)
AcceptEntityInput(iEntity, "Kill");
чуток оптимизировал, добавил проверок пару и при входе игрока на сервер обнуляю ему флаг режимаТы код скинул Защиту после телепорта, он чем лучше? может его выберу
@alex123pavlov, если заморозка с помощью декоя то нужен "Неважный код" вот отсюда:--- Добавлено позже ---PHP:iEntity = event.GetInt("entityid"); //Неважный код if ((iEntity = event.GetInt("entityid")) > 0) AcceptEntityInput(iEntity, "Kill");
чуток оптимизировал, добавил проверок пару и при входе игрока на сервер обнуляю ему флаг режима
Заодно перенёс всё, что ты просил, в начало файла (комментарии ты видишь, думаю)
public void DecoyDetonate(Event event, const char[] name, bool dbc)
{
int iEntity, i;
float fPos[2][3], fDis;
fPos[0][0] = event.GetFloat("x");
fPos[0][1] = event.GetFloat("y");
fPos[0][2] = event.GetFloat("z");
for(i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && IsPlayerAlive(i))
{
GetClientAbsOrigin(i, fPos[1]);
fDis = GetVectorDistance(fPos[0], fPos[1]);
if(fDis <= RADIUS)
{
if((iEntity = CreateEntityByName("prop_dynamic")) != -1)
{
DispatchKeyValue(iEntity, "model", "");
DispatchKeyValue(iEntity, "solid", "6");
DispatchKeyValueVector(iEntity, "origin", fPos[1]);
DispatchSpawn(iEntity);
EmitAmbientSound("", fPos[1]);
g_iEntity[i] = EntIndexToEntRef(iEntity);
CreateTimer(TIMER, TimerUnFreeze, g_iEntity[i], TIMER_FLAG_NO_MAPCHANGE);
}
}
}
}
iEntity = event.GetInt("entityid");
if ((iEntity = event.GetInt("entityid")) > 0)
AcceptEntityInput(iEntity, "Kill");
}