Юра Шмигель
Участник
- Сообщения
- 32
- Реакции
- 8
Суть плагина выдавать на разминке только то оружие которое вы указали или рандом.
При sm_warmupround_weapon "random" оружие выбирается из массива new String:g_sWeaponsNamesGame[WEAPON_NB][].
Вобщем проблема такая... обрезал и отредактировал плагин так как мне необходимо, но вот обнаружилась проблема - рандомный выбор делается только при старте сервера и далее при смене карты не выбирает новое рандомное оружие из списка а выдает оружие которое было выбрано плагином при старте сервера. Так вот помогите сделать так что бы оружие выбиралось рандомно при смене карты и не только при перезапуске сервера а то я уже башку сломал :-D
Оригинал тут
При sm_warmupround_weapon "random" оружие выбирается из массива new String:g_sWeaponsNamesGame[WEAPON_NB][].
Вобщем проблема такая... обрезал и отредактировал плагин так как мне необходимо, но вот обнаружилась проблема - рандомный выбор делается только при старте сервера и далее при смене карты не выбирает новое рандомное оружие из списка а выдает оружие которое было выбрано плагином при старте сервера. Так вот помогите сделать так что бы оружие выбиралось рандомно при смене карты и не только при перезапуске сервера а то я уже башку сломал :-D
HTML:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#define VERSION "1.0"
public Plugin:myinfo =
{
name = "Warmup Round",
author = "XARiUS, Avo",
description = "Simple warmup round plugin.",
version = VERSION,
url = ""
};
new String:g_weapon[32];
new bool:IsWarmup;
new bool:g_enabled;
new g_time;
new timesrepeated;
new Handle:g_Cvarenabled = INVALID_HANDLE;
new Handle:g_Cvartime = INVALID_HANDLE;
new Handle:g_Cvarweapon = INVALID_HANDLE;
new Handle:g_Cvaractive = INVALID_HANDLE;
new Handle:g_warmuptimer = INVALID_HANDLE;
new g_iMyWeapons;
#define WEAPON_NB 4
new String:g_sWeaponsNamesGame[WEAPON_NB][] = {"knife","hegrenade","molotov","incgrenade"};
public OnPluginStart()
{
CreateConVar("sm_warmupround_version", VERSION, "Warmup Round Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
g_Cvaractive = CreateConVar("sm_warmupround_active", "0", "DO NOT MODIFY THIS VALUE DIRECTLY - USED FOR STATS TRACKING", FCVAR_DONTRECORD);
g_Cvarenabled = CreateConVar("sm_warmupround_enabled", "1", "Enable this plugin. 0 = Disabled");
g_Cvartime = FindConVar("mp_warmuptime");
g_Cvarweapon = CreateConVar("sm_warmupround_weapon", "hegrenade", "Weapon to give players during warmup. HEGrenades are unlimted. Examples: knife,deagle,fiveseven,elite,hkp2000,random..");
HookEvent("item_pickup", EventItemPickup, EventHookMode_Post);
HookEvent("weapon_fire", EventWeaponFire, EventHookMode_Post);
HookConVarChange(g_Cvarenabled, OnSettingChanged);
HookConVarChange(g_Cvartime, OnSettingChanged);
HookConVarChange(g_Cvarweapon, OnSettingChanged);
g_enabled = GetConVarBool(g_Cvarenabled);
g_time = GetConVarInt(g_Cvartime);
GetConVarString(g_Cvarweapon, g_weapon, sizeof(g_weapon));
CheckWeaponString(g_weapon);
timesrepeated = g_time;
IsWarmup = false;
SetupOffsets();
AutoExecConfig(true, "warmup");
}
SetupOffsets()
{
g_iMyWeapons = FindSendPropOffs("CBaseCombatCharacter", "m_hMyWeapons");
if (g_iMyWeapons == -1)
{
SetFailState("[Warmup] Error - Unable to get offset for CBaseCombatCharacter::m_hMyWeapons");
}
}
public OnSettingChanged(Handle:convar, const String:oldValue[], const String:newValue[])
{
if (convar == g_Cvarenabled)
{
if (newValue[0] == '1')
{
g_enabled = true;
}
else
{
g_enabled = false;
}
}
if (convar == g_Cvartime)
{
g_time = StringToInt(newValue);
}
if (convar == g_Cvarweapon)
{
CheckWeaponString(newValue);
}
}
public OnAutoConfigsBuffered()
{
if (g_warmuptimer != INVALID_HANDLE)
{
KillTimer(g_warmuptimer);
}
if (g_enabled)
{
SetConVarBool(g_Cvaractive, true, false, false);
timesrepeated = g_time;
IsWarmup = true;
g_warmuptimer = CreateTimer(1.0, Countdown, _, TIMER_REPEAT);
}
}
public CheckWeaponString(const String:weapon[])
{
new bool:valid = false;
if(StrEqual(weapon, "random", false))
{
strcopy(g_weapon, sizeof(g_weapon), g_sWeaponsNamesGame[GetURandomInt() % WEAPON_NB]);
PrintToServer("[Warmup Round] Weapon selection random: %s", weapon);
}
else
{
for (new i = 0; i < WEAPON_NB; i++)
{
if (StrEqual(weapon, g_sWeaponsNamesGame[i], false))
{
valid = true;
break;
}
}
if (!valid)
{
PrintToServer("[Warmup Round] Weapon selection: %s, is not valid. Please try setting sm_warmupround_weapon again.", weapon);
g_weapon = "hegrenade";
}
else
{
PrintToServer("[Warmup Round] Weapon selection changed to: %s", weapon);
strcopy(g_weapon, sizeof(g_weapon), weapon);
}
}
}
public Action:CancelWarmup()
{
SetConVarBool(g_Cvaractive, false, false, false);
g_warmuptimer = INVALID_HANDLE;
IsWarmup = false;
}
WeaponHandler(client)
{
if (IsWarmup && client != 0)
{
new String:buffer[32];
static Slot = 0, EntityIndex = 0;
decl String:WeaponClass[64] = "";
for (Slot = 0; Slot <= (32 * 4); Slot += 4)
{
EntityIndex = GetEntDataEnt2(client, (g_iMyWeapons + Slot));
if (EntityIndex != 0 && IsValidEdict(EntityIndex))
{
GetEdictClassname(EntityIndex, WeaponClass, sizeof(WeaponClass));
if (StrEqual(WeaponClass, "worldspawn", false))
{
return;
}
RemovePlayerItem(client, EntityIndex);
RemoveEdict(EntityIndex);
}
}
if (strlen(g_weapon) > 2)
{
Format(buffer, sizeof(buffer), "weapon_%s", g_weapon);
GivePlayerItem(client, buffer);
}
Slot = 0;
EntityIndex = 0;
}
}
public Action:Countdown(Handle:timer)
{
if (IsWarmup)
{
if (timesrepeated >= 1)
{
timesrepeated--;
}
else if (timesrepeated == 0)
{
timesrepeated = g_time;
CancelWarmup();
return Plugin_Stop;
}
}
else
{
timesrepeated = g_time;
return Plugin_Stop;
}
return Plugin_Continue;
}
public Action:DelayWeapon(Handle:timer, any:client)
{
WeaponHandler(client);
}
public EventItemPickup(Handle:event, const String:name[],bool:dontBroadcast)
{
if (g_enabled && IsWarmup)
{
new clientid = GetClientOfUserId(GetEventInt(event, "userid"));
new String:item[32];
GetEventString(event, "item", item, sizeof(item));
if (!StrEqual(item, g_weapon, false))
{
CreateTimer(0.1, DelayWeapon, clientid);
}
}
}
public EventWeaponFire(Handle:event,const String:name[],bool:dontBroadcast)
{
if (g_enabled && IsWarmup)
{
if (StrEqual(g_weapon, "hegrenade", false))
{
new clientid = GetClientOfUserId(GetEventInt(event, "userid"));
new String:weapon[32];
GetEventString(event, "weapon", weapon, sizeof(weapon));
if (StrEqual(weapon, "hegrenade", false))
{
CreateTimer(0.5, DelayWeapon, clientid);
}
}
else if (StrEqual(g_weapon, "molotov", false))
{
new clientid = GetClientOfUserId(GetEventInt(event, "userid"));
new String:weapon[32];
GetEventString(event, "weapon", weapon, sizeof(weapon));
if (StrEqual(weapon, "molotov", false))
{
CreateTimer(0.5, DelayWeapon, clientid);
}
}
else if (StrEqual(g_weapon, "incgrenade", false))
{
new clientid = GetClientOfUserId(GetEventInt(event, "userid"));
new String:weapon[32];
GetEventString(event, "weapon", weapon, sizeof(weapon));
if (StrEqual(weapon, "incgrenade", false))
{
CreateTimer(0.5, DelayWeapon, clientid);
}
}
}
}
Оригинал тут