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

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

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

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

> Правила форума

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

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Ошибка компиляции плагины zp supplyboxes

Статус пользователя TheArtemMaps
сообщение 9.6.2021, 23:12
Сообщение #1
Стаж: 6 лет 8 месяцев
Город: Киев

Сообщений: 703
Благодарностей: 64
Полезность: < 0

Здравствуйте! Скажите пожалуйста почему плагин отказывается компилироватся под все версии? Так-то компилировался нормально когда функция спрайтов в плагине: #define SB_SPRITE // Включить поддержку спрайтов (Закомментируйте для отключения) была включенна! (не закоментированная двомя палочками "//") а так когда выключенна функция не хочет компилироватся. Отключил бо место в прекеше нужно. Сами ошибки:
Cкрытый текст
zp_supplyboxes.sma(317) : error 017: undefined symbol "iKey"
zp_supplyboxes.sma(317) : warning 215: expression has no effect
zp_supplyboxes.sma(317) : error 001: expected token: ";", but found ")"
zp_supplyboxes.sma(317) : error 029: invalid expression, assumed zero
zp_supplyboxes.sma(317) : fatal error 107: too many error messages on one line

И плагин:
Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <xs>
#include <zombieplague>

/*---------------Настроечки---------------*/

// Настройка и установка координат
#define OPTION_MODE // Включить режим настроек (Закомментируйте для отключения)
#if defined OPTION_MODE
new const g_szSbClcmd[] = "zpsb_open"; // Команда для открытия меню с настройками
#define g_iBitAdminFlag ADMIN_RCON // Алмин-флаг доступа к меню
new g_szSbPresentPosFile[128] = "addons/amxmodx/data/zpsb_positions/" // Путь к файлам с координатами
#endif

// Загрузка Extra Items
new const g_szSbPresentIdsFile[] = "addons/amxmodx/configs/zpsb_extraitems.ini" // Путь к файлу с Extra Items

// Настройка модели
new const g_szSbModel[] = "models/zpsb_model.mdl"; // Путь к модели
//#define g_iSbSubModel 0 // Номер сабмодели. Для использования модели с несколькими сабмоделями (Раскомментируйте, чтобы использовать)
new const Float:g_flSbModelMin[] = {-25.0, -25.0, -1.0}; // Минимальные координаты для бокса модели
new const Float:g_flSbModelMax[] = {25.0, 25.0, 15.0}; // Максимальные координаты для бокса модели

// Настройка звуков
new const g_szSbSoundSpawn[] = "zpsb_spawn.wav" // Звук спавна подарка
new const g_szSbSoundGet[] = "zpsb_get.wav" // Звук подбирания подарка

//Настройка сообщений
new const g_szSbMsgSpawn[] = "Подарок доставлен >> Подберите его, чтобы получить бонус" // Текст сообщения прибытия подарка
new const g_szSbMsgGet[] = "подобрал подарок" // Текст соощения, когда кто-то из людей подбирает подарок (Перед этим текстом пишется никнейм игрока, который подобрал подарок)
#define g_flSbInterval 45.0 // Интервал времени, через который будут появляться подарки (В секундах)

//Настройка спрайта
//#define SB_SPRITE // Включить поддержку спрайтов (Закомментируйте для отключения)
#if defined SB_SPRITE
#define UNIT_TO_METER 20.0 // Множитель перевода юнитов в метры (Количество юнитов в одном метре)
#define g_fSpriteScale 0.5 // Размер спрайта
new const g_szSbModelSprite[] = "sprites/zpsb_long.spr"; // Путь к спрайту
//#define REMOVE_KONFLICT // Включите эту функцию, если будут конфликты с GroupInfo
#endif
/*----------------------------------------*/

#define TASK_INTERVAL 666999
#define TASK_DELSPRKEY 969696
#define IMPULSE_PRESENT 6969

#if defined SB_SPRITE
#if defined REMOVE_KONFLICT
#define BitGroup(%0) (1<<((%0+33) & 31))
#else
#define BitGroup(%0) (1<<((%0) & 31))
#endif
#endif

#define SetBit(%0,%1) ((%0) |= (1 << (%1)))
#define ClearBit(%0,%1) ((%0) &= ~(1 << (%1)))
#define IsSetBit(%0,%1) ((%0) & (1 << (%1)))

new Array:g_aPresentEI, g_iaPresentEISize, Array:g_aPresentPosO, Array:g_aPresentPosA, Array:g_aPresentEnt, g_iaPresentPosSize, bool:g_iPluginWork, g_iPresentsSpawned,
#if defined SB_SPRITE
HamHook:g_hPlayerPrethink, g_iBitUserViewSpr, Array:g_aUserSprites[33], g_iUserViewSprCount,
#endif
#if defined OPTION_MODE
bool:g_iOptionMode, Array:g_aPresentOptPosO, Array:g_aPresentOptPosA, g_iaPresentOptPosSize, Array:g_aPresentOptSpawned, bool:g_iSaveINIOpt,
#endif
g_iMaxPlayers, bool:g_iRoundEnd, g_iszInfoTarget;

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, g_szSbModel);
#if defined SB_SPRITE
engfunc(EngFunc_PrecacheModel, g_szSbModelSprite);
#endif
engfunc(EngFunc_PrecacheSound, g_szSbSoundSpawn);
engfunc(EngFunc_PrecacheSound, g_szSbSoundGet);
}

public plugin_init()
{
register_plugin("[ZP] SupplyBoxes", "1.0", "Docaner");

g_iMaxPlayers = get_maxplayers();

g_iszInfoTarget = engfunc(EngFunc_AllocString, "info_target");

register_event("HLTV", "Event_HLTV", "a", "1=0", "2=0");
RegisterHam(Ham_Touch, "info_target", "HM_TargetTouch");
RegisterHam(Ham_Spawn, "player", "HM_PlayerSpawn_Post", 1);
#if defined SB_SPRITE
DisableHamForward(g_hPlayerPrethink = RegisterHam(Ham_Player_PreThink, "player", "HM_PlayerPreThink"));
#endif

#if defined OPTION_MODE
register_clcmd(g_szSbClcmd, "Show_OpenMenu");
register_menucmd(register_menuid("Show_OpenMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9), "Handle_OpenMenu");
#endif
}

public plugin_cfg()
{
g_aPresentEI = ArrayCreate();
g_aPresentPosO = ArrayCreate(3);
g_aPresentPosA = ArrayCreate();
g_aPresentEnt = ArrayCreate();

new szMapName[32];
get_mapname(szMapName, charsmax(szMapName));
add(g_szSbPresentPosFile, charsmax(g_szSbPresentPosFile), szMapName);
add(g_szSbPresentPosFile, charsmax(g_szSbPresentPosFile), ".ini");

load_presents_ids();
load_presents_positions();

if(g_iaPresentEISize && g_iaPresentPosSize) g_iPluginWork = true;
else log_amx("[ZP|SB] Плагин не работает. Не загружены координаты со спавнами или EIs.");
}


#if defined SB_SPRITE
public client_putinserver(id)
set_pev(id, pev_groupinfo, pev(id, pev_groupinfo) | BitGroup(0));

#if AMXX_VERSION_NUM < 183
public client_disconnect(id)
#else
public client_disconnected(id)
#endif
{
set_pev(id, pev_groupinfo, pev(id, pev_groupinfo) & ~BitGroup(0));
if(g_iPluginWork) set_view_spr(id, 0);
}
#endif

load_presents_ids()
{
if(!file_exists(g_szSbPresentIdsFile))
{
log_amx("[ZP|SB] Файл %s не найден.", g_szSbPresentIdsFile);
return;
}
new szBuffer[64], iLine, iLen, i;
while(read_file(g_szSbPresentIdsFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
{
if(!iLen || szBuffer[0] == ';') continue;
i = zp_get_extra_item_id(szBuffer);
if(i == -1)
{
log_amx("[ZP|SB] Extra Item [%s] не найден.", szBuffer);
continue;
}
ArrayPushCell(g_aPresentEI, i);
}
g_iaPresentEISize = ArraySize(g_aPresentEI);
}


load_presents_positions()
{
if(!file_exists(g_szSbPresentPosFile))
{
log_amx("[ZP|SB] Файл %s не найден.", g_szSbPresentPosFile);
return;
}
new szBuffer[128], iLine, iLen, Float:szOrigin[3], szNumbers[4][16];
while(read_file(g_szSbPresentPosFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
{
if(!iLen || szBuffer[0] == ';') continue;
parse(szBuffer, szNumbers[0], charsmax(szNumbers[]), szNumbers[1], charsmax(szNumbers[]), szNumbers[2], charsmax(szNumbers[]), szNumbers[3], charsmax(szNumbers[]));
for(new i; i <= charsmax(szOrigin); i++)
szOrigin[i] = str_to_float(szNumbers[i]);
ArrayPushArray(g_aPresentPosO, szOrigin);
ArrayPushCell(g_aPresentPosA, str_to_float(szNumbers[3]));
ArrayPushCell(g_aPresentEnt, 0);
}
g_iaPresentPosSize = ArraySize(g_aPresentPosO);
}

public zp_round_started(iGameMode)
{
if(g_iPluginWork && iGameMode != MODE_SURVIVOR)
{
set_task(g_flSbInterval, "task_SbInterval", TASK_INTERVAL, _, _, "b");
#if defined SB_SPRITE
for(new i = 1; i <= g_iMaxPlayers; i++) if(is_user_alive(i) && !zp_get_user_zombie(i)) set_view_spr(i, 1);
#endif
}
}

public zp_round_ended()
{
if(g_iPluginWork) remove_task(TASK_INTERVAL);
g_iRoundEnd = true;
}

public Event_HLTV()
{
if(g_iPluginWork)
{
new iEnt;
while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "zpsb"))) set_pev(iEnt, pev_flags, FL_KILLME);
for(new i; i < g_iaPresentPosSize; i++) ArraySetCell(g_aPresentEnt, i, 0);
#if defined SB_SPRITE
set_view_spr(0, 0);
#endif
g_iPresentsSpawned = 0;
}
g_iRoundEnd = false;
}

public task_SbInterval()
{
new iRandom, Float:szOrigin[3], Float:flAngle, iEnt;
if(g_iaPresentPosSize > 1)
{
new Array:aValues = ArrayCreate();
for(new i; i < g_iaPresentPosSize; i++)
{
if(ArrayGetCell(g_aPresentEnt, i)) continue;
ArrayPushCell(aValues, i);
}
iRandom = ArrayGetCell(aValues, random_num(0, ArraySize(aValues) - 1));
ArrayDestroy(aValues);
}
ArrayGetArray(g_aPresentPosO, iRandom, szOrigin);
flAngle = Float:ArrayGetCell(g_aPresentPosA, iRandom);
iEnt = create_present(szOrigin, flAngle);
ArraySetCell(g_aPresentEnt, iRandom, iEnt);
g_iPresentsSpawned++;
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(!is_user_alive(i) || zp_get_user_zombie(i)) continue;
client_cmd(i, "spk sound/%s", g_szSbSoundSpawn);
client_print(i, print_center, g_szSbMsgSpawn);
}
if(g_iPresentsSpawned == g_iaPresentPosSize) remove_task(TASK_INTERVAL);
#if defined SB_SPRITE
if(g_iPresentsSpawned == 1) EnableHamForward(g_hPlayerPrethink);
#endif
}

create_present(Float:szOrigin[3], Float:flAngleRoll = 0.0)
{
new iEnt = engfunc(EngFunc_CreateNamedEntity, g_iszInfoTarget);
if(!pev_valid(iEnt)) return 0;
new Float:szAngles[3];
szAngles[1] = flAngleRoll;
engfunc(EngFunc_SetModel, iEnt, g_szSbModel);
set_pev(iEnt, pev_origin, szOrigin);
set_pev(iEnt, pev_solid, SOLID_TRIGGER);
#if defined g_iSbSubModel
set_pev(iEnt, pev_body, g_iSbSubModel);
#endif
set_pev(iEnt, pev_classname, "zpsb");
set_pev(iEnt, pev_impulse, IMPULSE_PRESENT);
set_pev(iEnt, pev_angles, szAngles);
engfunc(EngFunc_SetSize, iEnt, g_flSbModelMin, g_flSbModelMax);
return iEnt;
}

public HM_TargetTouch(iEnt, id)
{
if(!g_iPluginWork || !pev_valid(iEnt) || !is_user_alive(id) || pev(iEnt, pev_impulse) != IMPULSE_PRESENT || zp_get_user_zombie(id) || zp_get_user_survivor(id)) return HAM_IGNORED;
new szName[32],
#if defined SB_SPRITE
iKey,
#endif
iSprEnt;

zp_force_buy_extra_item(id, ArrayGetCell(g_aPresentEI, g_iaPresentEISize == 1 ? 0 : random_num(0, g_iaPresentEISize - 1)), 1);
get_user_name(id, szName, charsmax(szName));
#if defined SB_SPRITE
#if AMXX_VERSION_NUM < 183
for(new i; i <= g_iaPresentPosSize; i++)
{
if(ArrayGetCell(g_aPresentEnt, i) != iEnt) continue;
iKey = i;
break;
}
#else
iKey = ArrayFindValue(g_aPresentEnt, iEnt)
#endif
#endif
ArraySetCell(g_aPresentEnt, iKey, 0);
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(is_user_alive(i) && !zp_get_user_zombie(i))
client_print(i, print_center, "%s %s", szName, g_szSbMsgGet);
#if defined SB_SPRITE
if(IsSetBit(g_iBitUserViewSpr, i))
{
iSprEnt = ArrayGetCell(g_aUserSprites[i], iKey)
if(iSprEnt)
{
set_pev(ArrayGetCell(g_aUserSprites[i], iKey), pev_flags, FL_KILLME);
ArraySetCell(g_aUserSprites[i], iKey, 0);
}
}
#endif
}
emit_sound(iEnt, CHAN_AUTO, g_szSbSoundGet, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
if(g_iPresentsSpawned == g_iaPresentPosSize && !g_iRoundEnd) set_task(g_flSbInterval, "task_SbInterval", TASK_INTERVAL, _, _, "b");
g_iPresentsSpawned--;
#if defined SB_SPRITE
if(!g_iPresentsSpawned) DisableHamForward(g_hPlayerPrethink);
#endif
set_pev(iEnt, pev_flags, FL_KILLME);
return HAM_IGNORED;
}

#if defined SB_SPRITE

public HM_PlayerSpawn_Post(id) if(g_iPluginWork && is_user_alive(id) && !g_iRoundEnd && zp_has_round_started() == 1 && !zp_is_survivor_round()) set_view_spr(id, 1);
public HM_PlayerKilled_Post(iVictim) if(g_iPluginWork) set_view_spr(iVictim, 0);

public zp_user_infected_post(id) if(g_iPluginWork) set_view_spr(id, 0);
public zp_user_humanized_post(id) if(g_iPluginWork && !g_iRoundEnd && zp_has_round_started() == 1 && !zp_is_survivor_round()) set_view_spr(id, 1);

set_view_spr(id, iValue)
{
if(id) set_spr(id, iValue);
else for(new i; i <= g_iMaxPlayers; i++) if(is_user_connected(i)) set_spr(i, iValue);
}

set_spr(id, iValue)
{
if(iValue)
{
if(IsSetBit(g_iBitUserViewSpr, id)) return;
if(!g_iUserViewSprCount && !g_iPresentsSpawned) EnableHamForward(g_hPlayerPrethink);
g_iUserViewSprCount++;
set_pev(id, pev_groupinfo, pev(id, pev_groupinfo) | BitGroup(id));
g_aUserSprites[id] = ArrayCreate();
for(new i; i < g_iaPresentPosSize; i++) ArrayPushCell(g_aUserSprites[id], 0);
SetBit(g_iBitUserViewSpr, id);
}
else
{
if(!IsSetBit(g_iBitUserViewSpr, id)) return;
new iEnt;
ClearBit(g_iBitUserViewSpr, id);
g_iUserViewSprCount--;
if(!g_iUserViewSprCount) DisableHamForward(g_hPlayerPrethink);
for(new i; i < g_iaPresentPosSize; i++)
{
iEnt = ArrayGetCell(g_aUserSprites[id], i);
if(!iEnt) continue;
set_pev(iEnt, pev_flags, FL_KILLME);
}
ArrayDestroy(g_aUserSprites[id]);
set_pev(id, pev_groupinfo, pev(id, pev_groupinfo) & ~BitGroup(id));
}
}

public HM_PlayerPreThink(id)
{
if(!IsSetBit(g_iBitUserViewSpr, id)) return;
new iEnt, Float:szEntOrigin[3], Float:fDistance, ptr, Float:fVecEnd[3], Float:fVecNormal[3], Float:fFraction, Float:szPlayerOrigin[3];
pev(id, pev_origin, szPlayerOrigin);
for(new i; i < g_iaPresentPosSize; i++)
{
if(!ArrayGetCell(g_aPresentEnt, i)) continue;
iEnt = ArrayGetCell(g_aUserSprites[id], i);
ArrayGetArray(g_aPresentPosO, i, szEntOrigin);
fDistance = get_distance_f(szPlayerOrigin, szEntOrigin)
if(fDistance < UNIT_TO_METER * 100.0)
{
ptr = create_tr2();
engfunc(EngFunc_TraceLine, szPlayerOrigin, szEntOrigin, IGNORE_MONSTERS, 0, ptr);
get_tr2(ptr, TR_flFraction, fFraction);
if(fFraction != 1.0)
{
get_tr2(ptr, TR_vecEndPos, fVecEnd);
get_tr2(ptr, TR_vecPlaneNormal, fVecNormal);
xs_vec_mul_scalar(fVecNormal, 7.0, fVecNormal);
xs_vec_add(fVecEnd, fVecNormal, fVecNormal);
fVecNormal[2] += 10.0;
}
else
{
fVecNormal = szEntOrigin;
fVecNormal[2] += 40.0;
}
free_tr2(ptr);
if(iEnt) engfunc(EngFunc_SetOrigin, iEnt, fVecNormal);
else
{
ArraySetCell(g_aUserSprites[id], i, iEnt = create_sprite(fVecNormal));
set_pev(iEnt, pev_groupinfo, BitGroup(id));
}
set_pev(iEnt, pev_frame, fDistance / UNIT_TO_METER);
}
else if(iEnt)
{
set_pev(iEnt, pev_flags, FL_KILLME);
ArraySetCell(g_aUserSprites[id], i, 0);
}
}
}

create_sprite(Float:szOrigin[3])
{
new iEnt = engfunc(EngFunc_CreateNamedEntity, g_iszInfoTarget);
if(!pev_valid(iEnt)) return 0;
engfunc(EngFunc_SetOrigin, iEnt, szOrigin);
engfunc(EngFunc_SetModel, iEnt, g_szSbModelSprite);
set_pev(iEnt, pev_movetype, MOVETYPE_FLYMISSILE);
set_pev(iEnt, pev_rendermode, kRenderTransAdd);
set_pev(iEnt, pev_renderamt, 255.0);
set_pev(iEnt, pev_scale, g_fSpriteScale);
return iEnt;
}

#endif

#if defined OPTION_MODE
public Show_OpenMenu(id)
{
if(~get_user_flags(id) & g_iBitAdminFlag) return PLUGIN_HANDLED;
new szMenu[512], iKeys = (1<<0|1<<9),
iLen = formatex(szMenu, charsmax(szMenu), "\yМеню настроек координат^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r1\y] \w%s режим настроек^n", g_iOptionMode ? "Выключить" : "Включить");
if(g_iOptionMode)
{
iKeys |= (1<<1);
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r2\y] \wСоздать новый спавн^n");
if(g_iaPresentOptPosSize)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r3\y] \wПовернуть модель^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r4\y] \wУдалить предыдущий спавн^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r5\y] \wУдалить все спавны^n");
iKeys |= (1<<2|1<<3|1<<4);
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r3\y] \dПовернуть модель^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r4\y] \dУдалить предыдущий спавн^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r5\y] \dУдалить все спавны^n");
}
if(g_iaPresentPosSize)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r6\y] \wПерезагрузить спавны^n");
iKeys |= (1<<5);
}
else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r6\y] \dПерезагрузить спавны^n");
if(g_iSaveINIOpt && g_iaPresentOptPosSize)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r7\y] \wСохранить текущие настройки^n^n^n");
iKeys |= (1<<6);
}
else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r7\y] \dСохранить текущие настройки^n^n^n");
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r2\y] \dСоздать новый спавн^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r3\y] \dПовернуть модель^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r4\y] \dУдалить предыдущий спавн^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r5\y] \dУдалить все спавны^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r6\y] \dПерезагрузить спавны^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r7\y] \dСохранить текущие настройки^n^n^n");
}
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y[\r0\y] \wВыход");
return show_menu(id, iKeys, szMenu, -1, "Show_OpenMenu");
}

public Handle_OpenMenu(id, iKey)
{
if(~get_user_flags(id) & g_iBitAdminFlag) return PLUGIN_HANDLED;
switch(iKey)
{
case 0:
{
new iEnt;
while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "zpsb"))) set_pev(iEnt, pev_flags, FL_KILLME);
if(g_iOptionMode)
{
ArrayDestroy(g_aPresentOptSpawned);
ArrayDestroy(g_aPresentOptPosO);
ArrayDestroy(g_aPresentOptPosA);
g_iaPresentOptPosSize = 0;
g_iSaveINIOpt = false;
if(g_iaPresentEISize && g_iaPresentPosSize && !g_iRoundEnd && zp_has_round_started() == 1 && !zp_is_survivor_round())
{
g_iPluginWork = true;
set_task(g_flSbInterval, "task_SbInterval", TASK_INTERVAL, _, _, "b");
for(new i = 1; i <= g_iMaxPlayers; i++) if(is_user_alive(i) && !zp_get_user_zombie(i)) set_view_spr(i, 1);
}
UTIL_SayText(id, "!g[ZP|SB] !yРежим настроек !tвыключен!y.");
}
else
{
g_iPluginWork = false;
remove_task(TASK_INTERVAL);
set_view_spr(0, 0);

new Float:szOrigin[3], Float:Angle;
for(new i; i < g_iaPresentPosSize; i++) ArraySetCell(g_aPresentEnt, i, 0);
g_iPresentsSpawned = 0;

g_aPresentOptSpawned = ArrayCreate();
#if AMXX_VERSION_NUM < 183
g_aPresentOptPosO = ArrayCloneOrigin(g_aPresentPosO, g_iaPresentPosSize);
g_aPresentOptPosA = ArrayCloneCell(g_aPresentPosA, g_iaPresentPosSize);
#else
g_aPresentOptPosO = ArrayClone(g_aPresentPosO);
g_aPresentOptPosA = ArrayClone(g_aPresentPosA);
#endif
g_iaPresentOptPosSize = g_iaPresentPosSize;
if(g_iaPresentOptPosSize)
{
for(new i; i < g_iaPresentOptPosSize; i++)
{
ArrayGetArray(g_aPresentOptPosO, i, szOrigin);
Angle = ArrayGetCell(g_aPresentOptPosA, i);
iEnt = create_present(szOrigin, Angle);
ArrayPushCell(g_aPresentOptSpawned, iEnt);
}
}
UTIL_SayText(id, "!g[ZP|SB] !yРежим настроек !tвключен!y.");
}
g_iOptionMode = !g_iOptionMode;
}
case 1:
{
if(g_iOptionMode)
{
new Float:szOrigin[3];
fm_get_aiming_position(id, szOrigin);
ArrayPushCell(g_aPresentOptSpawned, create_present(szOrigin));
ArrayPushArray(g_aPresentOptPosO, szOrigin);
ArrayPushCell(g_aPresentOptPosA, 0.0);
g_iaPresentOptPosSize++;
g_iSaveINIOpt = true;
UTIL_SayText(id, "!g[ZP|SB] !yСпавн !tсоздан!y.");
}
}
case 2:
{
if(g_iaPresentOptPosSize)
{
new Float:flAngLes[3], iEnt = ArrayGetCell(g_aPresentOptSpawned, g_iaPresentOptPosSize - 1);
pev(iEnt, pev_angles, flAngLes);
flAngLes[1] += 10.0;
if(flAngLes[1] >= 360.0) flAngLes[1] = 0.0;
set_pev(iEnt, pev_angles, flAngLes);
ArraySetCell(g_aPresentOptPosA, g_iaPresentOptPosSize - 1, flAngLes[1]);
g_iSaveINIOpt = true;
}
}
case 3:
{
if(g_iaPresentOptPosSize)
{
set_pev(ArrayGetCell(g_aPresentOptSpawned, g_iaPresentOptPosSize - 1), pev_flags, FL_KILLME);
ArrayDeleteItem(g_aPresentOptSpawned, g_iaPresentOptPosSize - 1);
ArrayDeleteItem(g_aPresentOptPosO, g_iaPresentOptPosSize - 1);
ArrayDeleteItem(g_aPresentOptPosA, g_iaPresentOptPosSize - 1);
g_iaPresentOptPosSize--;
g_iSaveINIOpt = true;
UTIL_SayText(id, "!g[ZP|SB] !yСпавн !tудалён!y.");
}
}
case 4:
{
if(g_iaPresentOptPosSize)
{
new iEnt;
while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "zpsb"))) set_pev(iEnt, pev_flags, FL_KILLME);
ArrayClear(g_aPresentOptSpawned);
ArrayClear(g_aPresentOptPosO);
ArrayClear(g_aPresentOptPosA);
g_iaPresentOptPosSize = 0;
g_iSaveINIOpt = false;
UTIL_SayText(id, "!g[ZP|SB] !yСпавны !tудалены!y.");
}
}
case 5:
{
if(g_iOptionMode && g_iaPresentPosSize)
{
new iEnt, Float:szOrigin[3], Float:Angle;
while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "zpsb"))) set_pev(iEnt, pev_flags, FL_KILLME);
ArrayDestroy(g_aPresentOptSpawned);
ArrayDestroy(g_aPresentOptPosO);
ArrayDestroy(g_aPresentOptPosA);
g_aPresentOptSpawned = ArrayCreate();
#if AMXX_VERSION_NUM < 183
g_aPresentOptPosO = ArrayCloneOrigin(g_aPresentPosO, g_iaPresentPosSize);
g_aPresentOptPosA = ArrayCloneCell(g_aPresentPosA, g_iaPresentPosSize);
#else
g_aPresentOptPosO = ArrayClone(g_aPresentPosO);
g_aPresentOptPosA = ArrayClone(g_aPresentPosA);
#endif
g_iaPresentOptPosSize = g_iaPresentPosSize;
if(g_iaPresentOptPosSize)
{
for(new i; i < g_iaPresentOptPosSize; i++)
{
ArrayGetArray(g_aPresentOptPosO, i, szOrigin);
Angle = ArrayGetCell(g_aPresentOptPosA, i);
iEnt = create_present(szOrigin, Angle);
ArrayPushCell(g_aPresentOptSpawned, iEnt);
}
}
g_iSaveINIOpt = false;
UTIL_SayText(id, "!g[ZP|SB] !yСпавны !tперезагружены!y.");
}
}
case 6:
{
if(g_iSaveINIOpt && g_iaPresentOptPosSize)
{
ArrayClear(g_aPresentPosO);
ArrayClear(g_aPresentPosA);
#if AMXX_VERSION_NUM < 183
g_aPresentPosO = ArrayCloneOrigin(g_aPresentOptPosO, g_iaPresentOptPosSize);
g_aPresentPosA = ArrayCloneCell(g_aPresentOptPosA, g_iaPresentOptPosSize);
ArrayClear(g_aPresentEnt);
for(new i; i < g_iaPresentOptPosSize; i++) ArrayPushCell(g_aPresentEnt, 0);
#else
g_aPresentPosO = ArrayClone(g_aPresentOptPosO);
g_aPresentPosA = ArrayClone(g_aPresentOptPosA);
ArrayResize(g_aPresentEnt, g_iaPresentOptPosSize);
for(new i; i < g_iaPresentOptPosSize; i++) ArraySetCell(g_aPresentEnt, i, 0);
#endif
g_iaPresentPosSize = g_iaPresentOptPosSize;
save_positions();
g_iSaveINIOpt = false;
UTIL_SayText(id, "!g[ZP|SB] !yСпавны !tсохранены!y.");
}
}
case 9: return PLUGIN_HANDLED;
}
return Show_OpenMenu(id);
}
#if AMXX_VERSION_NUM < 183
Array:ArrayCloneOrigin(Array:aOrigin, iSize)
{
new Array:aCloneOrigin = ArrayCreate(3), Float:szOrigin[3];
for(new i; i < iSize; i++)
{
ArrayGetArray(aOrigin, i, szOrigin);
ArrayPushArray(aCloneOrigin, szOrigin);
}
return aCloneOrigin;
}

Array:ArrayCloneCell(Array:aOrigin, iSize)
{
new Array:aCloneOrigin = ArrayCreate();
for(new i; i < iSize; i++) ArrayPushCell(aCloneOrigin, ArrayGetCell(aOrigin, i));
return aCloneOrigin;
}
#endif
save_positions()
{
new szBuffer[256], Float:szOrigin[3];
if(file_exists(g_szSbPresentPosFile)) delete_file(g_szSbPresentPosFile);
for(new i; i < g_iaPresentPosSize; i++)
{
ArrayGetArray(g_aPresentPosO, i, szOrigin);
formatex(szBuffer, charsmax(szBuffer), "%.2f %.2f %.2f %.2f", szOrigin[0], szOrigin[1], szOrigin[2], ArrayGetCell(g_aPresentPosA, i));
write_file(g_szSbPresentPosFile, szBuffer);
}
}
#endif
stock UTIL_SayText(pPlayer, const szMessage[], any:...)
{
new szBuffer[190];
if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
else copy(szBuffer, charsmax(szBuffer), szMessage);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
switch(pPlayer)
{
case 0:
{
for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
{
if(!is_user_connected(iPlayer)) continue;
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, 76, {0.0, 0.0, 0.0}, iPlayer);
write_byte(iPlayer);
write_string(szBuffer);
message_end();
}
}
default:
{
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, 76, {0.0, 0.0, 0.0}, pPlayer);
write_byte(pPlayer);
write_string(szBuffer);
message_end();
}
}
}
#if defined OPTION_MODE
stock fm_get_aiming_position(pPlayer, Float:vecReturn[3])
{
new Float:vecOrigin[3], Float:vecViewOfs[3], Float:vecAngle[3], Float:vecForward[3];
pev(pPlayer, pev_origin, vecOrigin);
pev(pPlayer, pev_view_ofs, vecViewOfs);
xs_vec_add(vecOrigin, vecViewOfs, vecOrigin);
pev(pPlayer, pev_v_angle, vecAngle);
engfunc(EngFunc_MakeVectors, vecAngle);
global_get(glb_v_forward, vecForward);
xs_vec_mul_scalar(vecForward, 8192.0, vecForward);
xs_vec_add(vecOrigin, vecForward, vecForward);
engfunc(EngFunc_TraceLine, vecOrigin, vecForward, DONT_IGNORE_MONSTERS, pPlayer, 0);
get_tr2(0, TR_vecEndPos, vecReturn);
}
#endif

/*
Автор: Docaner
Контакты: https://vk.com/docaner
*/


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 2 гостей читают эту тему: