Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Информационная доска

Данный раздел предназначен для обсуждения, а также решения технических проблем связанных с серверной частью. Обсуждения касательно игровых клиентов ведутся здесь.

1. Во время создания новой темы аккуратно оформляйте её, не допускайте грамматических ошибок.
2. Описывая проблему старайтесь, как можно больше рассказать о ней, а так же о действиях с сервером после которых она возникла, по возможности подкрепите информацию логами.
3. Если вопрос касается проблемы в работе сервера, то обязательно прикрепляйте список плагинов (введите в консоли сервера: meta list и amxx plugins), настройки server.cfg, логи. Так же указывайте операционную систему, версию HLDS (введите к консоли сервера: version) и где хостится сервер.

Длинную информацию скрывайте под спойлер.

Получить щит

, Кто разбирается в amxx
Статус пользователя pic0
сообщение 23.11.2011, 13:05
Сообщение #1


Стаж: 15 лет

Сообщений: 43
Благодарностей: 4
Полезность: 73

Есть вот такой плагин: Warmup Round
Этот плагин включает разминку в начале карты.
В нем есть квары:
warmup_weapons - какое оружие дать игрокам в режиме разминки
warmup_ammo - какие патроны дать игрокам в режиме разминки

Строка по умолчанию warmup_ammo установлена в положение "000000000000000". 0 ничего не делает, а 1 говорит, что определенный тип патронов бесконечно доступны. Эти боеприпасы в строке:
PHP код:
0 - ammo_338mag
1 - ammo_762mm
2 - ammo_556mm_box
3 - ammo_556mm
4 - ammo_buckshot
5 - ammo_45cp
6 - ammo_57mm
7 - ammo_50e
8 - ammo_357sig
9 - ammo_9mm
10 - ammo_flashbang
11 - ammo_hegrenade
12 - ammo_smokegrenade
Пример: 0010000000010 дать hegrenades и патронов пачку для 556го.

Настройки по умолчанию строки warmup_weapons : 000000000000000000000000000001000.
Она имеет 31 цифр, в ней 0-не давать, 1-дать 2-дать+неограниченные боеприпасы

0 - 1 для кевлара, 2 для шлема
1 - weapon_p228
2 - не используется
3 - weapon_scout
4 - weapon_hegrenade
5 - weapon_xm1014
6 - weapon_c4
7 - weapon_mac10
8 - weapon_aug
9 - weapon_smokegrenade
10 - weapon_elite
11 - weapon_fiveseven
12 - weapon_ump45
13 - weapon_sg550
14 - weapon_galil
15 - weapon_famas
16 - weapon_usp
17 - weapon_glock18
18 - weapon_awp
19 - weapon_mp5navy
20 - weapon_m249
21 - weapon_m3
22 - weapon_m4a1
23 - weapon_tmp
24 - weapon_g3sg1
25 - weapon_flashbang
26 - weapon_deagle
27 - weapon_sg552
28 - weapon_ak47
29 - weapon_knife
30 - weapon_p90
Пример: 0000000000000000000000000000210 даст всем игрокам, нож и ak47 с бесконечными патронами.

Помогите пожалуйста вставить во вторую не используемую ячейку квара warmup_weapons щит (weapon_shield), т.е.:
0 - 1 для кевлара, 2 для шлема
1 - weapon_p228
2 - не используется <= weapon_shield
3 - weapon_scout

Пробовал по разному, но не получается (( , очень надеюсь на вашу помошь.

КОД:
CODE
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <cstrike>

#define DEBUG

#pragma semicolon 1
#pragma ctrlchar '\'

#define OFFSET_CLIPAMMO 51
#define OFFSET_LINUX_WEAPONS 4
#define fm_cs_set_weapon_ammo(%1,%2) set_pdata_int(%1, OFFSET_CLIPAMMO, %2, OFFSET_LINUX_WEAPONS)

#define m_pActiveItem 373
#define m_rgpPlayerItems_0 376

enum {
ammo_338mag = 1, // 30
ammo_762mm, // 90
ammo_556mm_box, // 200
ammo_556mm, // 90
ammo_buckshot, // 32
ammo_45cp, // 100
ammo_57mm, // 100
ammo_50e, // 35
ammo_357sig, // 52
ammo_9mm, // 120
ammo_flashbang, // 2
ammo_hegrenade, // 1
ammo_smokegrenade, // 1
ammo_c4 // 1
};

static weapon_ammo_info[][] = {
{ 0, 0 },
{ 30, "ammo_338mag" },
{ 90, "ammo_762mm" },
{ 200, "ammo_556mm_box" },
{ 90, "ammo_556mm" },
{ 32, "ammo_buckshot" },
{ 100, "ammo_45cp" },
{ 100, "ammo_57mm" },
{ 35, "ammo_50e" },
{ 52, "ammo_357sig" },
{ 120, "ammo_9mm" },
{ 2, "ammo_flashbang" },
{ 1, "ammo_hegrenade" },
{ 1, "ammo_smokegrenade" },
{ 1, "ammo_c4" }
};

static weapon_info[][] =
{
{ 0, 0, 0 }, // 0
{ 13, ammo_357sig, "weapon_p228" }, // 1
{ 0, 0, 0 }, // 2
{ 10, ammo_762mm, "weapon_scout" }, // 3
{ 0, ammo_hegrenade, "weapon_hegrenade" }, // 4
{ 7, ammo_762mm, "weapon_xm1014" }, // 5
{ 0, ammo_c4, "weapon_c4" }, // 6 - c4
{ 30, ammo_45cp, "weapon_mac10" }, // 7
{ 30, ammo_556mm, "weapon_aug" }, // 8
{ 0, ammo_smokegrenade, "weapon_smokegrenade" }, // 9 - smoke
{ 15, ammo_9mm, "weapon_elite" }, // 10
{ 20, ammo_57mm, "weapon_fiveseven" }, // 11
{ 25, ammo_45cp, "weapon_ump45" }, // 12
{ 30, ammo_556mm, "weapon_sg550" }, // 13
{ 35, ammo_556mm, "weapon_galil" }, // 14
{ 25, ammo_556mm, "weapon_famas" }, // 15
{ 12, ammo_45cp, "weapon_usp" }, // 16
{ 20, ammo_9mm, "weapon_glock18" }, // 17
{ 10, ammo_338mag, "weapon_awp" }, // 18
{ 30, ammo_9mm, "weapon_mp5navy" }, // 19
{ 100, ammo_556mm_box, "weapon_m249" }, // 20
{ 8, ammo_buckshot, "weapon_m3" }, // 21
{ 30, ammo_556mm, "weapon_m4a1" }, // 22
{ 30, ammo_9mm, "weapon_tmp" }, // 23
{ 20, ammo_762mm, "weapon_g3sg1" }, // 24
{ 0, ammo_flashbang, "weapon_flashbang" }, // 25 - flashbang
{ 7, ammo_50e, "weapon_deagle" }, // 26
{ 30, ammo_556mm, "weapon_sg552" }, // 27
{ 30, ammo_762mm, "weapon_ak47" }, // 28
{ 0, 0, "weapon_knife" }, // 29
{ 50, ammo_57mm, "weapon_p90" }, // 30
{ 0, 0, 0, }, // 31 - vest
{ 0, 0, 0, } // 32 - vesthelm
};

static weapon_shortcuts[][] =
{
{ CSW_HEGRENADE, "he" },
{ CSW_HEGRENADE, "hegren" },
{ CSW_SMOKEGRENADE, "sg" },
{ CSW_SMOKEGRENADE, "sggren" },
{ CSW_FLASHBANG, "fb" },
{ CSW_FLASHBANG, "fbgren" },
{ CSW_AK47, "ak" },
{ CSW_GLOCK18, "glock" },
{ CSW_MP5NAVY, "mp5" },
{ CSW_MP5NAVY, "mp" },
{ CSW_MAC10, "mac" },
{ CSW_P228, "compact" },
{ CSW_XM1014, "autoshotgun" },
{ CSW_AUG, "bullpup" },
{ CSW_UMP45, "sm" },
{ CSW_SG550, "krieg550" },
{ CSW_SG552, "krieg552" },
{ CSW_GALIL, "defender" },
{ CSW_FAMAS, "clarion" },
{ CSW_AWP, "magnumn" },
{ CSW_DEAGLE, "nighthawk" }
};

const WPN_GRENADES = (1 << CSW_HEGRENADE) | (1 << CSW_SMOKEGRENADE) | (1 << CSW_FLASHBANG);
const WPN_NOCLIP = WPN_GRENADES | (1 << CSW_KNIFE ) | (1 << CSW_C4);
weapon_has_clip(weapon_id) { return !(WPN_NOCLIP & (1 << weapon_id)); }
weapon_is_grenade(weapon_id) { return WPN_GRENADES & (1 << weapon_id); }

new g_enabled = 0,
g_starttime,
g_taskid,
g_time,
g_buy = 1,
g_armoury_invisibility = 0,
g_weapon_settings[31],
g_ammo_settings[sizeof(weapon_ammo_info)];

// Setters and getters for some variables

warmup_set(i) { g_enabled = i; }
warmup_get() { return g_enabled; }

warmup_buy_set(i) { g_buy = i; }
warmup_buy_get() { return g_buy; }

warmup_armoury_invis_set(i) { g_armoury_invisibility = i; }
warmup_armoury_invis_get() { return g_armoury_invisibility; }

// cvar global variables

new gcv_warmup,
gcv_warmup_time,
gcv_warmup_message,
gcv_warmup_message_timer,
gcv_warmup_mode,
gcv_warmup_mode_hud,
gcv_warmup_respawn,
gcv_warmup_respawn_delay,
gcv_warmup_armoury_invis,
gcv_warmup_armoury_pick,
gcv_warmup_weapons,
gcv_warmup_ammo,
gcv_warmup_weapon_drop,
gcv_warmup_weapon_pick;

public plugin_init()
{
register_plugin("warmup", "0.4", "Andrius Bentkus");

gcv_warmup = register_cvar("warmup", "1" );
gcv_warmup_time = register_cvar("warmup_time", "40" );
gcv_warmup_message = register_cvar("warmup_message", "1" );
gcv_warmup_message_timer = register_cvar("warmup_message_timer", "1" );
gcv_warmup_mode = register_cvar("warmup_mode", "1" );
gcv_warmup_mode_hud = register_cvar("warmup_mode_hud", "0" );
gcv_warmup_respawn = register_cvar("warmup_respawn", "1" );
gcv_warmup_respawn_delay = register_cvar("warmup_respawn_delay", "0.2");
gcv_warmup_armoury_invis = register_cvar("warmup_armoury_invis", "1" );
gcv_warmup_armoury_pick = register_cvar("warmup_armoury_pick", "0" );
gcv_warmup_weapon_drop = register_cvar("warmup_weapon_drop", "0" );
gcv_warmup_weapon_pick = register_cvar("warmup_weapon_pick", "0" );

// knife only: 0000000000000000000000000000010, knife
// knife + infinite ak: 0000000000000000000000000000210, ak47! knife
gcv_warmup_weapons = register_cvar("warmup_weapons", "knife");
gcv_warmup_ammo = register_cvar("warmup_ammo", "000000000000000");

register_concmd("warmup_start", "cmd_warmup_start", ADMIN_IMMUNITY, "<warmup time in seconds, 0 for indefinite, blank = warmup_delay>");
register_concmd("warmup_end", "cmd_warmup_end", ADMIN_IMMUNITY);
#if defined DEBUG
register_concmd("warmup_test", "cmd_warmup_test", ADMIN_IMMUNITY);
#endif

register_clcmd("drop", "client_command_drop");

register_event("TextMsg", "game_start_event", "a", "2&#Game_C");
register_event("HLTV", "new_round_event", "a", "1=0", "2=0");

register_message(get_user_msgid("StatusIcon"), "msg_status_icon_message");
register_message(get_user_msgid("CurWeapon"), "current_weapon_message" );
register_message(get_user_msgid("AmmoX"), "ammox_message" );

RegisterHam(Ham_Touch, "weaponbox", "forwad_ham_touch_weaponbox_post", 1);
RegisterHam(Ham_Touch, "armoury_entity", "forward_ham_touch_armoury_post", 1);
RegisterHam(Ham_Spawn, "player", "forward_ham_player_spawn_post", 1);
RegisterHam(Ham_Killed, "player", "forward_ham_player_killed_pre", 0);
}

// commands

public cmd_warmup_start(client, level, cid)
{
if (!cmd_access(client, level, cid, 0)) return PLUGIN_HANDLED;

new len = get_pcvar_num(gcv_warmup_time);

if (read_argc() > 1)
{
new arg[32];
read_argv(1, arg, sizeof(arg) -1);
len = str_to_num(arg);
}

new players[32];
new player_count;

get_players(players, player_count, "a");

// start the counter
start_warmup(len);
// and loop through all players, take everything away, send message
for (new i = 0; i < player_count; i++) handle_player(players[i]);

return PLUGIN_HANDLED;
}

public cmd_warmup_end(client, level, cid)
{
if (!cmd_access(client, level, cid, 0)) return PLUGIN_HANDLED;
end_warmup();
return PLUGIN_HANDLED;
}

#if defined DEBUG
public cmd_warmup_test(client, level, cid)
{
if (!cmd_access(client, level, cid, 0)) return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
#endif

public client_command_drop(id)
{
if (warmup_get() && !get_pcvar_num(gcv_warmup_weapon_drop)) return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}

// events, hooks, forwards

public game_start_event()
{
if (get_pcvar_num(gcv_warmup))
{
if (!warmup_get()) start_warmup(get_pcvar_num(gcv_warmup_time));
}
}

new g_forward_start_frame_id;
public new_round_event()
{
if (warmup_get() && warmup_armoury_invis_get())
g_forward_start_frame_id = register_forward(FM_StartFrame, "forward_start_frame");
}

public forward_start_frame()
{
unregister_forward(FM_StartFrame, g_forward_start_frame_id);
set_armoury_invisibility(true, true, false);
}

public current_weapon_message(msgid, msgdest, id)
{
if (!warmup_get()) return PLUGIN_CONTINUE;
new active = get_msg_arg_int(1);
new weapon_id = get_msg_arg_int(2);
// it returns 255 when you die
if (weapon_id == 255) return PLUGIN_CONTINUE;
if (g_weapon_settings[weapon_id] < 2) return PLUGIN_CONTINUE;
new clip_ammo = get_msg_arg_int(3);

new max_clip_ammo = weapon_info[weapon_id][0];
if (active && weapon_has_clip(weapon_id) && (clip_ammo != max_clip_ammo))
{
fm_cs_set_weapon_ammo(get_pdata_cbase(id, m_pActiveItem) , weapon_info[weapon_id][0]);
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}

public ammox_message(msgid, msgdest, id)
{
if (!warmup_get()) return PLUGIN_CONTINUE;
new ammo_id = get_msg_arg_int(1);
if (ammo_id >= sizeof(g_ammo_settings)) return PLUGIN_CONTINUE;
new ammount = get_msg_arg_int(2);
if (!g_ammo_settings[ammo_id]) return PLUGIN_CONTINUE;
if (ammount < weapon_ammo_info[ammo_id][0]) {
set_pdata_int(id, m_rgpPlayerItems_0 + ammo_id, weapon_ammo_info[ammo_id][0], 5);
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}


public forwad_ham_touch_weaponbox_post(victim)
{
if (warmup_get() && !get_pcvar_num(gcv_warmup_weapon_pick)) return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}

public forward_ham_touch_armoury_post(victim)
{
if (warmup_get() && !get_pcvar_num(gcv_warmup_armoury_pick)) return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}

public forward_ham_player_killed_pre(victim)
{
if (warmup_get() && get_pcvar_num(gcv_warmup_respawn))
{
set_task(get_pcvar_float(gcv_warmup_respawn_delay), "respawn_player", victim);
}
return PLUGIN_CONTINUE;
}

public respawn_player(id)
{
ExecuteHam(Ham_CS_RoundRespawn, id);
}

public forward_ham_player_spawn_post(id)
{
if (warmup_get() && is_user_alive(id) && !is_user_bot(id)) handle_player(id);
return PLUGIN_CONTINUE;
}

public msg_status_icon_message(msgid, msgdest, id)
{
// Thanks to grimvh2
// Site: http://forums.alliedmods.net/showpost.php?p=1281450
if (!warmup_buy_get())
{
static sz_msg[8];
get_msg_arg_string(2, sz_msg, 7);

if (equal(sz_msg, "buyzone") && get_msg_arg_int(1))
{
set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1 << 0));
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}

// custom commands

new message_timer_task_id = 0;
public start_warmup(time)
{
if (warmup_get() && g_time) remove_task(g_taskid);
load_weapon_settings();

if (message_timer_task_id) {
remove_task(message_timer_task_id);
message_timer_task_id = 0;
}

warmup_set(true);
g_starttime = get_systime();
g_time = time;

warmup_buy_set(!get_pcvar_num(gcv_warmup_mode));
warmup_armoury_invis_set(get_pcvar_num(gcv_warmup_armoury_invis));

set_armoury_invisibility(warmup_armoury_invis_get());

set_cvar_num("mp_friendlyfire", 1);

if (g_time)
{
g_taskid = get_free_task_id();
set_task(float(time), "end_warmup", g_taskid);

if (get_pcvar_num(gcv_warmup_message_timer))
{
message_timer_task_id = get_free_task_id();
set_task(1.0, "message_timer_task", message_timer_task_id, _, _, "b");
}
}
}

public message_timer_task()
{
new time = g_time - (get_systime() - g_starttime);

if (time > 0) send_restart_messages(0, time);
else {
remove_task(message_timer_task_id);
message_timer_task_id = 0;
}
}

public end_warmup()
{
warmup_set(false);
warmup_buy_set(true);

if (warmup_armoury_invis_get()) {

set_armoury_invisibility(false, false, true);
warmup_armoury_invis_set(false);

}
set_cvar_num("mp_friendlyfire", 0);

server_cmd("sv_restart 1");
}

load_weapon_settings()
{
new sz_buffer[512]; // = "ak47 usp! knife";
new sz_pre[32], sz_rest[512];

get_pcvar_string(gcv_warmup_ammo, sz_buffer, sizeof(gcv_warmup_ammo));
for (new i =0; i < strlen(sz_buffer); i++)
g_ammo_settings[i] = (sz_buffer[i] - '0') % 2;

for (new i = strlen(sz_buffer); i < sizeof(g_ammo_settings); i++) g_ammo_settings[i] = 0;


get_pcvar_string(gcv_warmup_weapons, sz_buffer, sizeof(sz_buffer) -1);

// if string is a 012 configuration
if ((strlen(sz_buffer) == sizeof(g_weapon_settings)) && (str_valid_chars(sz_buffer, "012"))) {
for (new i = 0; i < strlen(sz_buffer); i++)
g_weapon_settings[i] = (sz_buffer[i] - '0') % 3;

} else { // if not, assume that it is keyword config
// reset first old settings
for (new i = 0; i < sizeof(g_weapon_settings); i++) g_weapon_settings[i] = 0;

while (true)
{
if (!strlen(sz_buffer)) break;
strtok(sz_buffer, sz_pre, sizeof(sz_pre) -1, sz_rest, sizeof(sz_rest) -1, ' ', 0);
copy(sz_buffer, sizeof(sz_rest), sz_rest);

new ammo = 0, clip = 0;
if (str_ends_with(sz_pre, "!")) { // ! for uclip
clip = 1;
sz_pre[strlen(sz_pre)-1] = 0;
} else if (str_ends_with(sz_pre, "?")) { // ? for uammo
ammo = 1;
sz_pre[strlen(sz_pre)-1] = 0;
}

if (equal(sz_pre, "kevlar")) {
g_weapon_settings[0] = 1;
} else if (equal(sz_pre, "vesthelm")) {
g_weapon_settings[0] = 2;
}

new weapon_id;
if ((weapon_id = weapon_index(sz_pre)) != -1)
{
if (weapon_is_grenade(weapon_id) > 0) {
g_weapon_settings[weapon_id] = 1;
if (clip || ammo) {
server_print("%d\n", weapon_id);
g_ammo_settings[weapon_info[weapon_id][1]] = 1;
}
} else {
g_weapon_settings[weapon_id] = (clip ? 2 : 1 );
g_ammo_settings[weapon_info[weapon_id][1]] = (ammo ? 1 : 0);
}
} else if ((weapon_id = weapon_ammo_index(sz_pre)) != -1) {
g_ammo_settings[weapon_id] = 1;
}
}
}
}

handle_player(id)
{
if (!warmup_buy_get()) {
strip_user_weapons(id);
set_pdata_int(id, 116, 0);

for (new i = 0; i < sizeof(g_weapon_settings); i++) {
switch (i)
{
case 0: {
cs_set_user_armor(id, 100, (g_weapon_settings[i] == 1 ? CS_ARMOR_KEVLAR : CS_ARMOR_VESTHELM ));
}
case 2: { }
default: {
if (g_weapon_settings[i])
{
give_item(id, weapon_info[i][2]);
if (weapon_has_clip(i))
cs_set_user_bpammo(id, i, weapon_ammo_info[weapon_info[i][1]][0]);
}
}

}
}

if (!get_pcvar_num(gcv_warmup_mode_hud)) send_hud_message(id, 0);
}

if (get_pcvar_num(gcv_warmup_message)) {
// if the time is not indefinite, send a message to inform the player
if (g_time) send_restart_messages(id, g_time - (get_systime() - g_starttime));
}
}

send_restart_messages(id, time)
{
new sz_buffer[8];
format(sz_buffer, sizeof(sz_buffer) - 1, "%d", time);

//TextMsg(77)(AllReliable, 0, 0)(byte:4, string:"#Game_will_restart_in", string:"1", string:"SECOND");
message_begin(id ? MSG_ONE : MSG_ALL, get_user_msgid("TextMsg"), _, id);
write_byte(4);
write_string("#Game_will_restart_in");
write_string(sz_buffer);
write_string(time > 1 ? "seconds" : "SECOND");
message_end();

//TextMsg(77)(AllReliable, 0, 0)(byte:2, string:"#Game_will_restart_in_console", string:"1", string:"SECOND");
message_begin(id ? MSG_ONE : MSG_ALL, get_user_msgid("TextMsg"), _, id);
write_byte(2);
write_string("#Game_will_restart_in_console");
write_string(sz_buffer);
write_string(time > 1 ? "seconds" : "SECOND");
message_end();
}

send_hud_message(id, hide)
{
message_begin(id ? MSG_ONE : MSG_ALL, get_user_msgid("HideWeapon"), _, id);
write_byte(hide ? (1<<7) : (1<<5));
message_end();
}

set_armoury_invisibility(val, visibility = true, touch = true)
{
static ent = FM_NULLENT;
while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "armoury_entity")))
{
if (val) {
if (visibility) set_pev(ent, pev_effects, pev(ent, pev_effects) | EF_NODRAW);
if (touch) set_pev(ent, pev_solid, SOLID_NOT);
} else {
if (visibility) set_pev(ent, pev_effects, pev(ent, pev_effects) & ~EF_NODRAW);
if (touch) set_pev(ent, pev_solid, SOLID_TRIGGER);
}
}
}

get_free_task_id()
{
// 0 is usefull for statements
for (new i = 1;; i++) if (!task_exists(i)) return i;
// to get rid of the warning by the compilers
return 1;
}

// string functions

stock str_ends_with(string[], postfix[])
{
// own implementation
new string_len = strlen(string);
new postfix_len = strlen(postfix);
if (string_len < postfix_len) return false;
for (new i = string_len - postfix_len; i < string_len; i++)
{
new string_char = string[i];
new postfix_char = postfix[i-string_len+postfix_len];
if (string_char != postfix_char) return false;
}
return true;

// this is an epic fail of amxmodx, check the source code for strfind
//return strfind(string, postfix, ignorecase, string_len - postfix_len + 1) == != -1;
}

stock str_begins_with(string[], prefix[])
{
new string_len = strlen(string);
new prefix_len = strlen(prefix);
return strfind(string, postfix, ignorecase) == 0;
}

str_valid_chars(string[], chars[])
{
new string_len = strlen(string), chars_len = strlen(chars);
for (new i = 0; i < string_len; i++) {
new found = false;
for (new j = 0; j < chars_len; j++) {
if (string[i] == chars[j]) found = true;
}
if (!found) return false;
}
return true;
}

// weapon functions

stock weapon_index(postfix[])
{
for (new i = 0; i < sizeof(weapon_info); i++)
{
if (str_ends_with(weapon_info[i][2], postfix)) return i;
}
for (new i = 0; i < sizeof(weapon_shortcuts); i++)
{
if (equal(weapon_shortcuts[i][1], postfix)) return weapon_shortcuts[i][0];
}
return -1;
}
stock weapon_ammo_index(postfix[])
{
for (new i = 0; i < sizeof(weapon_ammo_info); i++)
{
if (str_ends_with(weapon_ammo_info[i][1], postfix)) return i;
}
return -1;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: