Вопросы по скрипту :)

m22b

Участник
Сообщения
1,007
Реакции
283
Оригинал тут :
[CS:GO] Change Glove Menu - Page 3 - AlliedModders

И так вопросы :

1
Как заменить AddFileToDownloadsTable одним файлом (то есть чтоб весь список он брал например из download.txt а не прописывать AddFileToDownloadsTable для каждого файла)

2
Как реализовать cookie? Что бы после смены карты не нужно было заново выбирать перчатки...

Я так понимаю :
C-подобный:
public void OnClientConnected(int client)
{
 cloud9[client] = false;
 immortals[client] = false;
 EnvyUs[client] = false;
 epsilon[client] = false;
 faze[client] = false;
 dignitas[client] = false;
 fnatic[client] = false;
 g2[client] = false;
 gambit[client] = false;
 godsent[client] = false;
 hellraisers[client] = false;
 iBuyPower[client] = false;
 Liquid[client] = false;
 Lum[client] = false;
 Mouz[client] = false;
 NiP[client] = false;
 NaVi[client] = false;
 TSM[client] = false;
 Ren[client] = false;
 SK[client] = false;
 Asiimov[client] = false;
 Special_Force[client] = false;
 Umbrella[client] = false;
 Tigers[client] = false;
 Vulcan[client] = false;
 Fire_Arms[client] = false;
}

Сбрасывает все, а нужно что бы он считывал куки а если их нет то ставил бы дефолтные.


3
Есть ли какой либо способ быстро исправить предупреждение Loose Indentation (217), и влияет ли оно на производительность ? :)
 

Вложения

  • GlovesMenu.sp
    31.1 КБ · Просмотры: 4

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
Есть ли какой либо способ быстро исправить предупреждение Loose Indentation (217), и влияет ли оно на производительность ? :)
Не влияет. Наверно
в NP++ заходишь в "найти", потом заменить, ставишь галку на Расширенный, и меняешь 4 пробела на \t
Ну или #pragma tabsize 0

public void OnClientConnected(int client) { cloud9[client] = false; immortals[client] = false; EnvyUs[client] = false; epsilon[client] = false; faze[client] = false; dignitas[client] = false; fnatic[client] = false; g2[client] = false; gambit[client] = false; godsent[client] = false; hellraisers[client] = false; iBuyPower[client] = false; Liquid[client] = false; Lum[client] = false; Mouz[client] = false; NiP[client] = false; NaVi[client] = false; TSM[client] = false; Ren[client] = false; SK[client] = false; Asiimov[client] = false; Special_Force[client] = false; Umbrella[client] = false; Tigers[client] = false; Vulcan[client] = false; Fire_Arms[client] = false; }
Зачем так, если можно 1 переменную int создать, и в ней хранить номер?
Если верить Никите Ушакову, bool занимает столько-же места, сколько и просто int. Разницы в скорости нету.

Как реализовать cookie?
PHP:
#include <sourcemod>
#include <clientprefs>

Handle gCoc

#define DEFAULT_COOKIE 0

public void OnPluginStart()
{
    gCoc = RegClientCookie("the_name_of_cookie", "desc", CookieAccess_Private)
}

public void OnClientCookiesCached(int client)
{
    char buffer[16]
    int number = 0
    GetClientCookie(client, gCoc, buffer, 16)
    if(buffer[0]=='\0')
        number = DEFAULT_COOKIE
    else
        number = StringToInt(buffer)
    PrintToServer("Этот игрок заходил уже %i раз", number)
    number++
    IntToString(number, buffer, 16)
    SetClientCookie(client, gCoc, buffer)
}
--- Добавлено позже ---
Как заменить AddFileToDownloadsTable одним файлом (то есть чтоб весь список он брал например из download.txt а не прописывать AddFileToDownloadsTable для каждого файла)
SM File/Folder Downloader and Precacher - AlliedModders

Там можно просто указывать путь до папки(В конце не нужен /)
Folder Download usage:
Write your folder name in the downloads.ini or downloads_simple.ini.
Example:
Correct: sound/misc
Incorrect: sound/misc/
 

m22b

Участник
Сообщения
1,007
Реакции
283
Не влияет. Наверно
в NP++ заходишь в "найти", потом заменить, ставишь галку на Расширенный, и меняешь 4 пробела на \t
Ну или #pragma tabsize 0


Зачем так, если можно 1 переменную int создать, и в ней хранить номер?
Если верить Никите Ушакову, bool занимает столько-же места, сколько и просто int. Разницы в скорости нету.


PHP:
#include <sourcemod>
#include <clientprefs>

Handle gCoc

#define DEFAULT_COOKIE 0

public void OnPluginStart()
{
    gCoc = RegClientCookie("the_name_of_cookie", "desc", CookieAccess_Private)
}

public void OnClientCookiesCached(int client)
{
    char buffer[16]
    int number = 0
    GetClientCookie(client, gCoc, buffer, 16)
    if(buffer[0]=='\0')
        number = DEFAULT_COOKIE
    else
        number = StringToInt(buffer)
    PrintToServer("Этот игрок заходил уже %i раз", number)
    number++
    IntToString(number, buffer, 16)
    SetClientCookie(client, gCoc, buffer)
}
--- Добавлено позже ---

SM File/Folder Downloader and Precacher - AlliedModders

Там можно просто указывать путь до папки(В конце не нужен /)
Folder Download usage:
Write your folder name in the downloads.ini or downloads_simple.ini.
Example:
Correct: sound/misc
Incorrect: sound/misc/

Я знаю про SM File/Folder Downloader and Precacher, мне интересно как без него можно сделать :)
 

FurFur

Участник
Сообщения
153
Реакции
85
Как заменить AddFileToDownloadsTable одним файлом (то есть чтоб весь список он брал например из download.txt а не прописывать AddFileToDownloadsTable для каждого файла)

PHP:
File dFile = OpenFile("cfg/downloads.ini", "r");
if (dFile != null)
{
    char dwnlBuf[70];
    while (!dFile.EndOfFile())
    {
        if (dFile.ReadLine(dwnlBuf, 70))
        {
            StripQuotes(dwnlBuf);
            TrimString(dwnlBuf);
            AddFileToDownloadsTable(dwnlBuf);
        }
    }
   
    dFile.Close();
}
 
  • Мне нравится
Реакции: m22b

m22b

Участник
Сообщения
1,007
Реакции
283
Крайне не советую делать такой маленький массив. Рекомендуется полный PLATFORM_MAX_PATH. Оффтоп

Если не затруднит дайте пример как для определенного ножа установить cookie и при заходе клиента он бы эти cookie считывал... ;)
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
для определенного ножа установить cookie и при заходе клиента он бы эти cookie считывал
ОффтопПолучается такая "гармошка":
PHP:
#include <clientprefs>

Handle gCoc;

#define DEFAULT_COOKIE 0

public void OnPluginStart()
{
	gCoc = RegClientCookie("Gloves Menu", "Gloves make", CookieAccess_Public);
}

public void OnClientCookiesCached(int client)
{
	cloud9[client] = false;
	immortals[client] = false;
	EnvyUs[client] = false;
	epsilon[client] = false;
	faze[client] = false;
	dignitas[client] = false;
	fnatic[client] = false;
	g2[client] = false;
	gambit[client] = false;
	godsent[client] = false;
	hellraisers[client] = false;
	iBuyPower[client] = false;
	Liquid[client] = false;
	Lum[client] = false;
	Mouz[client] = false;
	NiP[client] = false;
	NaVi[client] = false;
	TSM[client] = false;
	Ren[client] = false;
	SK[client] = false;
	TeamX[client] = false;
	char buffer[3];
	GetClientCookie(client, gCoc, buffer, sizeof(buffer));
	switch (buffer[0] ? StringToInt(buffer):DEFAULT_COOKIE)
	{
		case 0: cloud9[client] = true;
		case 1: immortals[client] = true;
		case 2: EnvyUs[client] = true;
		case 3: epsilon[client] = true;
		case 4: faze[client] = true;
		case 5: dignitas[client] = true;
		case 6: fnatic[client] = true;
		case 7: g2[client] = true;
		case 8: gambit[client] = true;
		case 9: godsent[client] = true;
		case 10: hellraisers[client] = true;
		case 11: iBuyPower[client] = true;
		case 12: Liquid[client] = true;
		case 13: Lum[client] = true;
		case 14: Mouz[client] = true;
		case 15: NiP[client] = true;
		case 16: NaVi[client] = true;
		case 17: TSM[client] = true;
		case 18: Ren[client] = true;
		case 19: SK[client] = true;
		case 20: TeamX[client] = true;
	}
}

public void OnClientDisconnect(int client)
{
	if (AreClientCookiesCached(client)) SetClientCookie(client, gCoc, 
	cloud9[client] ? "0":
	immortals[client] ? "1":
	EnvyUs[client] ? "2":
	epsilon[client] ? "3":
	faze[client] ? "4":
	dignitas[client] ? "5":
	fnatic[client] ? "6":
	g2[client] ? "7":
	gambit[client] ? "8":
	godsent[client] ? "9":
	hellraisers[client] ? "10":
	iBuyPower[client] ? "11":
	Liquid[client] ? "12":
	Lum[client] ? "13":
	Mouz[client] ? "14":
	NiP[client] ? "15":
	NaVi[client] ? "16":
	TSM[client] ? "17":
	Ren[client] ? "18":
	SK[client] ? "19":"20");
}
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@m22b, там проще половину плагина переписать, чем костыли городить
Как работать с куки тебе в первом же комменте написали
Тебе осталось придумать как с помощью этих самых печенек хранить статус перчаток
public void OnClientConnected(int client) {
cloud9[client] = false;
...
}
А может быть чтобы сразу у нескольких перчаток одновременно было значение true?
Это показывает какие перчатки игрок может использовать или какие надеты?
Если первое то печеньки в виде флагов лучше кмк, если второе, то простым числом от 0 до 25.
--- Добавлено позже ---
Есть ли какой либо способ быстро исправить предупреждение Loose Indentation (217), и влияет ли оно на производительность ?
Да есть: или выключить проверку отступов, или сразу нормально отступы ставить
--- Добавлено позже ---
глянул код. Его можно минимум в 2 раза сократить. Погорячился, там и 5 раз маловато будет:biggrin:
Сделать примерно так же как у меня сделано в [NMRiH] Laser Aim
 
Последнее редактирование:
  • Мне нравится
Реакции: m22b

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
проще половину плагина переписать, чем костыли городить
Оффтоп
печеньки в виде флагов лучше кмк
Какой-то непрофессиональный сленг. Оффтоп
Это. Надеваются последние "true" из массивов.
 
  • Мне нравится
Реакции: m22b

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
Оффтоп
Уже занят.
Какой-то непрофессиональный сленг. Оффтоп
Вообще-то это дословный перевод с англицкого.
Это. Надеваются последние "true" из массивов.
Да я уже глянул.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@AlmazON, я прямо сейчас потихоньку оптимизирую и добавляю запоминание перчаток.
Даже сделал быстрый выбор перчаток командой nsm_gloves <num>, где num - номер перчаток в массиве (0 = дефолтные перчатки).

Мне вот интересно: неужели нельзя сменить перчатки на лету, как модельки игроков?! Почему смена только после смерти?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
В крайнем случае, если смена моделек происходит из-за особенностей движка, может можно выключить отображение модельки рук (через m_bDrawViewmodel), сменить модельку и снова включить отображение?
--- Добавлено позже ---
@AlmazON, ну если мне предоставят доступ к серверу для испытаний плагина, то можно и попробовать.

Я больше года забил на CSGO и занимаюсь максимум компиляцией плагина для этой игры, но не испытанием.
Или можно как-то запустить локальный сервак без токена, но с авторизацией через SteamID?
 

m22b

Участник
Сообщения
1,007
Реакции
283
Тему можно закрывать.
Я все узнал что мне нужно :)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@m22b, куда закрывать?! я ещё переписанный плагин не выложил!
Там в 5 раз меньше строк кода при увеличенном функционале.
 
  • Мне нравится
Реакции: m22b

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@m22b, держи.
На AlliedModders тоже в комменте прикрепил.
З.Ы.
Gloves Menu.png

--- Добавлено позже ---
Скиньте что ли скрины менюшки, чтобы можно было запостить
Или адрес сервака: я сам заскриню

UPD Исправлена ошибка «Array index out-of-bounds (index 22, limit 22)»
 

Вложения

  • GlovesMenu 1.2.0.sp
    5.9 КБ · Просмотры: 2
Последнее редактирование:
  • Мне нравится
Реакции: m22b

m22b

Участник
Сообщения
1,007
Реакции
283
public Action PlayerSpawned(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(GetEventInt(event, "userid"));

if(IsValidClient(client) && gloves[client] > 0)
{
char buffer[PLATFORM_MAX_PATH];
Format(buffer, sizeof(buffer), "models/weapons/eminem/ct_arms_idf_%s.mdl", GlovesType[gloves[client]]);
SetEntPropString(client, Prop_Send, "m_szArmsModel", buffer);
}
}

Я так понимаю что теперь плагин заточен только под /eminem/ (папку) и как теперь например добавить другие перчатки ? в коде тот что я прикреплял в первом посту легко можно было :).

Да и вроде в на том же AlliedModders писали про то что перчатки cloud9 глючат и их намеренно убрали из скрипта... (из меню выбора)

Что я имеел ввиду под добавлением других перчаток - (это по мимо этих которые уже в плагине еще и от level rank'a, то есть просто добавив в код пути к ним и возможность их выбора, на примере этих же перчаток) :)
 

Вложения

  • Gloves.sp
    43.9 КБ · Просмотры: 4
Сверху Снизу