AUG & SG552 Scope

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Основная информация

Проблема: AUG & SG552 Scope

Ошибка:
Код:
L 08/01/2017 - 10:15:37: [AMXX] Displaying debug trace (plugin "CSGO_Assault_Scope.amxx", version "0.x.x")
L 08/01/2017 - 10:15:37: [AMXX] Run time error 4: index out of bounds
L 08/01/2017 - 10:15:37: [AMXX] [0] CSGO_Assault_Scope.sma::UnScope (line 92)
L 08/01/2017 - 10:15:37: [AMXX] [1] CSGO_Assault_Scope.sma::client_disconnected (line 82)
Дополнительная информация

Amx Mod X: ReAMXX

Билд:
Код:
Не указан


ReGamedll:
Код:
Не указан


Список модулей:
PHP:
Не указан


Список плагинов:
HTML:
Не указан


Список метамодулей:
PHP:
Не указан


Исходник:
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>

#define PLUGIN_NAME "CS:GО Assault Scope"
#define PLUGIN_VERSION "0.x.x"
#define PLUGIN_AUTHOR "hellmonja"

#define HIDEHUD_CROSSHAIR (1<<6)
#define m_iHideHUD 361

new const AUG_SCOPE[] = "models/ae/pb/fix/v_augscope2.mdl"
new const SIG_SCOPE[] = "models/ae/pb/fix/v_sigscope2.mdl"
new const AUG[] = "models/ae/pb/fix/v_aug_fix11.mdl"
new const SG552[] = "models/ae/pb/fix/v_sg552_fix11.mdl"

new weapon_weapon[][] = {
"weapon_aug",
"weapon_sg552"
}

new g_Zoom[32], Float:g_ZoomTime[33]

public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_event("HLTV", "Event_New_Round", "a", "1=0", "2=0")
register_forward(FM_CmdStart, "FW_CmdStart")

for(new i = 0; i < sizeof weapon_weapon; i++)
RegisterHam(Ham_Weapon_Reload, weapon_weapon, "fw_Weapon_Reload_Post", 1)
}

public plugin_precache() {
precache_model(AUG_SCOPE)
precache_model(SIG_SCOPE)
}

public Event_New_Round() {
new id, players[32], num
get_players(players, num, "ac")
for (new i = 0; i < num; i++) {
id = players;
if(get_user_weapon(id) == CSW_AUG || get_user_weapon(id) == CSW_SG552) UnScope(id)
}
}

public FW_CmdStart(id, uc_handle, seed) {
if(!is_user_alive(id)) return FMRES_IGNORED
if(is_user_bot(id)) return FMRES_IGNORED

static NewButton, zoom
NewButton = get_uc(uc_handle, UC_Buttons)

if(NewButton & IN_ATTACK2) {
if(get_user_weapon(id) == CSW_AUG || get_user_weapon(id) == CSW_SG552) {
if(get_gametime() > g_ZoomTime[id]) {
zoom = cs_get_user_zoom(id)
if(g_Zoom[id] && zoom == 1) UnScope(id)
else if(!g_Zoom[id] && zoom == 4) Scope(id)

g_ZoomTime[id] = get_gametime()
}
}
}

return FMRES_HANDLED
}

public fw_Weapon_Reload_Post(ent) {
static id
id = pev(ent, pev_owner)
new zoom = cs_get_user_zoom(id)

if(get_user_weapon(id) == CSW_AUG || get_user_weapon(id) == CSW_SG552)
if(zoom == 1) UnScope(id);

return HAM_HANDLED
}

public client_disconnected(id) UnScope(id)

stock Scope(id) {
g_Zoom[id] = 1

if(get_user_weapon(id) == CSW_AUG) entity_set_string(id, EV_SZ_viewmodel, AUG_SCOPE)
else if(get_user_weapon(id) == CSW_SG552) entity_set_string(id, EV_SZ_viewmodel, SIG_SCOPE)
set_pdata_int(id, m_iHideHUD, get_pdata_int(id, m_iHideHUD) | HIDEHUD_CROSSHAIR)
}

stock UnScope(id) {
g_Zoom[id] = 0

if(get_user_weapon(id) == CSW_AUG) entity_set_string(id, EV_SZ_viewmodel, AUG)
else if(get_user_weapon(id) == CSW_SG552) entity_set_string(id, EV_SZ_viewmodel, SG552)
set_pdata_int(id, m_iHideHUD, get_pdata_int(id, m_iHideHUD) & ~HIDEHUD_CROSSHAIR)
}


Комментарий:
Что вообще тут можно переделать под ReApi?
 
В этой теме было размещено решение! Перейти к решению.
Последнее редактирование модератором:
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)
Код:

new g_Zoom[32]
>>
new g_Zoom[33]

1 Авг 2017
Что вообще тут можно переделать под ReApi?
FM_CmdStart тут не совсем уместен.
Я полагаю, что можно и лучше реализовать, допустим на Weapon_SecondaryAttack
Например:
Код:

#include <amxmodx>
#include <hamsandwich>

public plugin_init()
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg552", "Weapon_SecondaryAttack", .Post = false);

public Weapon_SecondaryAttack(iWeaponEnt)
{
server_print("'%i' = SecondaryAttack", iWeaponEnt);
return HAM_SUPERCEDE;
}
 
Последнее редактирование:
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
wopox1337, я не просто так написал про перепись под ReApi. Тут используется модуль cstrike. И это единственный плагин, в котором он подключен. Не хочу держать лишний модуль из-за одного плагина.
Не нашел информации по поводу функции cs_get_user_zoom на ReApi.
 
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)
Последнее редактирование:
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
wopox1337, а чем можно заменить в плане ReApi (например, хуки): FM_CmdStart и Ham_Weapon_Reload?
 
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)
Minni, я описал выше чем заменить FM_CmdStart.
Reload - лучше оставить от Ham
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
wopox1337, как-то не очень получилось у меня...
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <reapi>
#include <hamsandwich>

#pragma semicolon 1

#define PLUGIN_NAME "CS:GO Assault Scope"
#define PLUGIN_VERSION "0.x.x + fix"
#define PLUGIN_AUTHOR "hellmonja"

#define UsesZoom(%1) (get_member(id, m_iFOV) != 90)
#define HIDEHUD_CROSSHAIR (1<<6)
#define m_iHideHUD 361

new const AUG_SCOPE[] = "models/ae/pb/fix/v_augscope2.mdl";
new const SIG_SCOPE[] = "models/ae/pb/fix/v_sigscope2.mdl";
new const AUG[] = "models/ae/pb/fix/v_aug_fix11.mdl";
new const SG552[] = "models/ae/pb/fix/v_sg552_fix11.mdl";

new weapon_weapon[][] = {
"weapon_aug",
"weapon_sg552"
};

new g_Zoom[33], Float:g_ZoomTime[33];

public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
register_event("HLTV", "Event_New_Round", "a", "1=0", "2=0");

for(new i = 0; i < sizeof weapon_weapon; i++) {
RegisterHam(Ham_Weapon_SecondaryAttack, weapon_weapon, "Weapon_SecondaryAttack", 1);
RegisterHam(Ham_Weapon_Reload, weapon_weapon, "Weapon_Reload", 1);
}
}

public plugin_precache() {
precache_model(AUG_SCOPE);
precache_model(SIG_SCOPE);
}

public Event_New_Round() {
new id, players[32], num;
get_players(players, num, "ac");
for (new i = 0; i < num; i++) {
id = players;
if(get_user_weapon(id) == CSW_AUG || get_user_weapon(id) == CSW_SG552) UnScope(id);
}
}

public Weapon_SecondaryAttack(id) {
if(!is_user_alive(id) || is_user_bot(id)) return HAM_IGNORED;

if(pev_valid(id)) {
new iPlayer = pev(id, pev_owner);
if(get_user_weapon(iPlayer) == CSW_AUG || get_user_weapon(iPlayer) == CSW_SG552) {
if(get_gametime() > g_ZoomTime[iPlayer]) {
new zoom = UsesZoom(iPlayer);
if(g_Zoom[iPlayer] && zoom == 90) UnScope(iPlayer);
else if(!g_Zoom[iPlayer] && zoom == 0) Scope(iPlayer);
g_ZoomTime[iPlayer] = get_gametime();
}
}
}
return HAM_HANDLED; //Нужен ли он тут? :D
}

public Weapon_Reload(ent) {
static id;
id = pev(ent, pev_owner);
new zoom = UsesZoom(id);

if(get_user_weapon(id) == CSW_AUG || get_user_weapon(id) == CSW_SG552)
if(zoom == 1) UnScope(id);

return HAM_HANDLED;
}

public client_disconnected(id) UnScope(id);

stock Scope(id) {
g_Zoom[id] = 1;

if(get_user_weapon(id) == CSW_AUG) entity_set_string(id, EV_SZ_viewmodel, AUG_SCOPE);
else if(get_user_weapon(id) == CSW_SG552) entity_set_string(id, EV_SZ_viewmodel, SIG_SCOPE);
set_pdata_int(id, m_iHideHUD, get_pdata_int(id, m_iHideHUD) | HIDEHUD_CROSSHAIR);
}

stock UnScope(id) {
g_Zoom[id] = 0;

if(get_user_weapon(id) == CSW_AUG) entity_set_string(id, EV_SZ_viewmodel, AUG);
else if(get_user_weapon(id) == CSW_SG552) entity_set_string(id, EV_SZ_viewmodel, SG552);
set_pdata_int(id, m_iHideHUD, get_pdata_int(id, m_iHideHUD) & ~HIDEHUD_CROSSHAIR);
}



Где я сделал ошибку, ибо у меня вообще перестало работать? :D
 
Последнее редактирование:
Сообщения
846
Реакции
524
Помог
13 раз(а)
Код:
#define UsesZoom(%1)                 (get_member(id, m_iFOV) != 90)
2 Авг 2017


Код:
if(zoom == 1) UnScope(id);
lol
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
BalbuR, я знаю. Пробовал ставить значение 90, вместо 4. Ничего не изменилось.
 
Сообщения
846
Реакции
524
Помог
13 раз(а)
у тебя дефайн некорректный
должно быть так
Код:
#define UsesZoom(%1)                 (get_member(%1, m_iFOV) != 90)
2 Авг 2017
попробуй

Код:
#include <amxmodx>
#include <hamsandwich>
#include <reapi>
#include <engine>

#define PLUGIN_NAME  "CS:GO Assault Scope"
#define PLUGIN_VERSION  "0.x.x + fix"
#define PLUGIN_AUTHOR  "hellmonja"

#define UsesZoom(%0)  get_member(%0, m_iFOV)
#define HIDEHUD_CROSSHAIR  (1<<6)


new const AUG_SCOPE[] = "models/ae/pb/fix/v_augscope2.mdl";
new const SIG_SCOPE[] = "models/ae/pb/fix/v_sigscope2.mdl";
new const AUG[] = "models/ae/pb/fix/v_aug_fix11.mdl";
new const SG552[] = "models/ae/pb/fix/v_sg552_fix11.mdl";

#define SCOPE_DELAY   0.3

new weapon_weapon[][] = {
  "weapon_aug",
  "weapon_sg552"
};

public plugin_init() {
  register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

  for(new i = 0; i < sizeof weapon_weapon; i++) {
  RegisterHam(Ham_Weapon_SecondaryAttack, weapon_weapon[i], "Weapon_SecondaryAttack", 1);
  RegisterHam(Ham_Weapon_Reload, weapon_weapon[i], "Weapon_Reload", 1);
  }
}

public plugin_precache() 
{
  precache_model(AUG_SCOPE);
  precache_model(SIG_SCOPE);
}

public Weapon_SecondaryAttack(ent)
{
   new id = get_member(ent, m_pPlayer);

   if(!is_user_alive(id) || is_user_bot(id))
   {
     return;
   }

   if(UsesZoom(id) < 90)
   {
     Scope(id, true);
   }   
   else
   {
     Scope(id, false);
   }
}

public Weapon_Reload(ent) 
{
   static id;   id = get_member(ent, m_pPlayer);

   Scope(id, false);
}

stock Scope(id, bool:crosshair=false) 
{
   if(crosshair)
   {
     set_member(id, m_iFOV, 90)
     
     switch(get_user_weapon(id))
     {
       case CSW_AUG:   entity_set_string(id, EV_SZ_viewmodel, AUG);
       case CSW_SG552:   entity_set_string(id, EV_SZ_viewmodel, SG552);
     }
 
     set_member(id, m_iHideHUD, get_member(id, m_iHideHUD) & ~HIDEHUD_CROSSHAIR);
   }
   else
   {
     set_member(id, m_iFOV, 40)
     
     switch(get_user_weapon(id))
     {
       case CSW_AUG:   entity_set_string(id, EV_SZ_viewmodel, AUG_SCOPE);
       case CSW_SG552:   entity_set_string(id, EV_SZ_viewmodel, SIG_SCOPE);
     }
 
     set_member(id, m_iHideHUD, get_member(id, m_iHideHUD) | HIDEHUD_CROSSHAIR);
   }
}
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
BalbuR, просто чудеса какие-то происходят. Лучше бы не работало вообще :D
2 Авг 2017
При обычном переключении - ничего не происходит. При попытке перезарядится - выбивает в такое положение. И никак нельзя убрать, только сменой оружия или дропнуть его, но при поднятии или возврате на него, появляется снова.
 

Вложения

Сообщения
846
Реакции
524
Помог
13 раз(а)
точнее
из скрина ничего не ясно
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
BalbuR,
При обычном переключении - ничего не происходит. При попытке перезарядится - выбивает в такое положение. И никак нельзя убрать, только сменой оружия или дропнуть его, но при поднятии или возврате на него, появляется снова.
 
Сообщения
846
Реакции
524
Помог
13 раз(а)
Код:
public Weapon_SecondaryAttack(ent)
{
   new id = get_member(ent, m_pPlayer);

   if(!is_user_alive(id) || is_user_bot(id))
   {
     return;
   }

   if(UsesZoom(id) < 90)
   {
     Scope(id, false);
   }   
   else
   {
     Scope(id, true);
   }
}
так попробуй
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
BalbuR, спасибо за такой толчек в решении проблемы.

Если честно, давно решил проблему,просто надумал позакрывать хвосты тут)
18 Окт 2017
Тему можно закрывать.
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Tranquillity, ответ BalbuR можно считать решением. Он послужил основой для дальнейших исправлений. Прислать готовое решение я не смогу, ибо нет доступа к ПК, да и не особо получится. Я вшил в плагин мода)
 
Сообщения
1,536
Реакции
2,324
Помог
39 раз(а)
Minni, кнопка "отметить как решение" вам не доступна?
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу