[Решено] Проблема с BunnyHop

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303
Всем привет. Недавно познакомился с одной замечательной вещью, а именно "ConVar". Мне необходимо сделать выдачу BunnyHop'а через админ панель. Используя консольную переменную sv_autobunnyhopping и несколько других, а также функцию "SendConVarValue" попытался определённому игроку изменить значение консольных переменных. Компилятор вроде не ругается, но вот в игре при 1 прыжке все хорошо, а остальные с зажатым пробелом очень низко и странно прыгают. Если кто знает в чем проблема, прошу помочь мне. Прикрепляю часть кода, плагины и версию.

PHP:
public int MenuHandler_GiveBunnyHop(Menu hMenu, MenuAction action, int iClient, int iItem)
{
   switch(action)
   {
       case MenuAction_Select:
       {
           char szInfo[128];
           hMenu.GetItem(iItem, szInfo, sizeof(szInfo));
           int temp = GetClientOfUserId(StringToInt(szInfo));
       
           if(!IsClientInGame(temp))
           {
               CGOPrintToChat(iClient, "Вы не можете выбрать этого игрока, так как он вышел с сервера", temp, temp);
           }
           else if(IsFakeClient(temp))
           {
               CGOPrintToChat(iClient, "Вы не можете выбрать этого игрока, так как он является ботом", temp, temp);
           }
           else
           {
               bBunnyHop[temp] = bBunnyHop[temp] ? false : true;
               
               CGOPrintToChat(iClient, "Ты выбрал игрока под индексом: {GREEN}%i {DEFAULT}( {GREEN}%N {DEFAULT})", temp, temp);
               CGOPrintToChatAll("Администратор: {GREEN}%N {DEFAULT}%s BunnyHop игроку: {GREEN}%N", iClient, bBunnyHop[temp] ? "включил" : "выключил", temp);
               
               SendConVarValue(temp, FindConVar("sv_enablebunnyhopping"), bBunnyHop[temp] ? "1" : "0");
               SendConVarValue(temp, FindConVar("sv_autobunnyhopping"), bBunnyHop[temp] ? "1" : "0");
               SendConVarValue(temp, FindConVar("sv_staminamax"), bBunnyHop[temp] ? "0" : "80");
               SendConVarValue(temp, FindConVar("sv_airaccelerate"), bBunnyHop[temp] ? "2000" : "12");
               SendConVarValue(temp, FindConVar("sv_staminajumpcost"), bBunnyHop[temp] ? "0" : ".080");
               SendConVarValue(temp, FindConVar("sv_staminalandcost"), bBunnyHop[temp] ? "0" : ".050");
           
       
               Menu_GiveBunnyHop(iClient);
           }
       }
       case MenuAction_Cancel:
       {
           if(iItem == MenuCancel_ExitBack)
           {
               Settings(iClient, 0);
           }
       }
   }
}

[SM] Listing 1 plugin:
01 "Test plugin" (1.6.0) by Nico Yazawa

SourceMod Version: 1.9.0.6273
SourcePawn Engine: 1.9.0.6273, jit-x86 (build 1.9.0.6273)
SourcePawn API: v1 = 4, v2 = 12
Compiled on: Jan 1 2019 12:57:25
Built from: Fix BfRead.BytesLeft not being able to be optional. (fixes #945). · alliedmodders/sourcemod@95027e0
Build ID: 6273:95027e0a
SourceMod: Half-Life 2 Scripting
 

HenryTownshand

Чел ты
Сообщения
255
Реакции
140
@MrChester, проблема не совсем в коде. На сколько я понял, это происходит из за того что у самого сервера sv_autobunnyhopping 0, а у клиента 1. Из за этого различия так странно прыгает.
 

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303

Faya™

Жуестер
Сообщения
867
Реакции
457
PHP:
           if(!IsClientInGame(temp))
           {
               CGOPrintToChat(iClient, "Вы не можете выбрать этого игрока, так как он вышел с сервера", temp, temp);
           }
           else if(IsFakeClient(temp))
           {
               CGOPrintToChat(iClient, "Вы не можете выбрать этого игрока, так как он является ботом", temp, temp);
           }
Я конечно извиняюсь но зачем тут аргументы тебе?
Я про temp, temp
Если ты там не форматирует текст, или это копипаст?
 

Reg1oxeN

Участник
Сообщения
399
Реакции
314
SendConVarValue(temp, FindConVar("sv_enablebunnyhopping"), bBunnyHop[temp] ? "1" : "0");
SendConVarValue(temp, FindConVar("sv_autobunnyhopping"), bBunnyHop[temp] ? "1" : "0");
SendConVarValue(temp, FindConVar("sv_staminamax"), bBunnyHop[temp] ? "0" : "80");
SendConVarValue(temp, FindConVar("sv_airaccelerate"), bBunnyHop[temp] ? "2000" : "12");
SendConVarValue(temp, FindConVar("sv_staminajumpcost"), bBunnyHop[temp] ? "0" : ".080");
SendConVarValue(temp, FindConVar("sv_staminalandcost"), bBunnyHop[temp] ? "0" : ".050");
переменные, отвечающие за передвижение игрока не будут иметь должного эффекта, если они различаются с серверными.
это будет провоцировать ошибки на стороне клиента и всячески дергать или подлагивать его, в зависимости от величины пинга.
 
Сверху Снизу