Русское сообщество по скриптингу

HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Утвержденные плагины для Metamod администратором/модератором форума.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только работоспособных плагинов для Metamod. Новые плагины нужно выкладывать в разделе "Добавленные новые плагины".

HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение Rejiser » 03 фев 2014, 19:43

HLDS VoiceTranscoder
Перекодирование Speex в SILK и наоборот

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

Важно:
Этот модуль будет работать только с дпрото версии 0.9.356 и более новых.
Брать Вы должны зарегистрироваться, чтобы видеть ссылки..

Version 0.9.356:
Added support of upcoming voice transcoding module.


Это модуль не будет работать с голосовым кодеком Miles.
Обязательно должен быть включен speex.


sv_voicecodec voice_speex
sv_voicequality 4 (значение настраивается самостоятельно)


Особенности:

    — Перекодирование из Speex (старый кодек клиентов) в SILK (новые клиенты), и наоборот.
    — Увеличение громкости голоса (только для перекодирования , sv_voicevolume_speex и sv_voicevolume_silk Cvars) .
    — Предотвращение флуда голосовыми пакетами (квар sv_voicefloodms ).

CVAR's:

    sv_voicevolume_speex - для увеличения громкости Speex - > SILK перекодировки (значение по умолчанию 1.0)
    sv_voicevolume_silk - для увеличения громкости для SILK -> Speex перекодировки (значение по умолчанию 1.0)
    sv_voicefloodms - для предотвращения флуда голосовыми пакетами (например, спидхак) , в миллисекундах (то есть минимальное время между голосовыми пакетами , значение по умолчанию 30)

Установка:
В папку addons скопировать папку vtc из архива.
Затем подключите VoiceTranscoder к Metamod'у -> /addons/metamod/ и добавить в plugins.ini ОБЯЗАТЕЛЬНО ПОСЛЕ DPROTO :
Для windows: win32 addons\vtc\vtc.dll
Для linux: linux addons/vtc/vtc.so

ВАЖНО!!!!

Известные проблемы:
Плагин запускается, но игроки не могут говорить (кривой liblist.gam).
Чтобы исправить эту проблему, вам нужно закомментировать или удалить эти строчки в liblist.gam:

Код: Выделить всё
gamedll "dlls\mp.dll"
gamedll "dlls\hl.dll"
gamedll_linux "dlls/cs_i386.so"
gamedll_linux "dlls/hl_i386.so"
gamedll_linux "dlls/cs.so"


Список изменений:

79-80
- Добавлено дополнительное логирование (logs/vtc.log)
- Значение квары sv_voicecodec в любом случае voice_speex (сколько не меняйте)
- Теперь значение sv_voicefloodms по умолчанию 0 (я думаю временно)
78-79
- Пофишкен баг с кваром sv_voicefloodms (игроки не могли говорить после смены карты)


P.s. Запуск модуля на работающем сервере без рестарта:
Заливаем все файлы, запускаем модуль:

Для linux: meta load addons/vtc/vtc.so
Для Windows: meta load addons\vtc\vtc.dll

Скачать:
Current version: 80
VoiceTranscoder80.zip

Предыдущая версия:
Beta (Отключение лога или смена пути логирования)
VoiceTranscoder79.zip

Возможно прав доступа к папке logs нет.
Можете бета версию попробовать. Список изменений:
    Добавлены квары vtc_log и vtc_logdir

vtc_log [0/1] - выключает или включает логи, по умолчанию 0 (выключены)
vtc_logdir - директория для лога, если в значение пустая строка (""), то логируется в папку с VTC, иначе в ту папку которую укажете, по умолчанию "" (в папку с VTC)


Проблемы совместимости и способы решения

Цитата(Shur1k_ua @ 14.11.2013, 13:43) *
всё таки модуль пашет, несовместим модуль подбот с новой версией дпрото.... вот такая беда


Пока только отключение POD...

upd 30.11:
Решение проблемы совместимости с психостатом:

У кого установлен психостат, возникает проблема чтения логов, по причине того что в версии 80 принудительно ведется лог vtc.log, псих стиает что это последний лог, и пытается брать инфу оттуда... но там для него нет ничего интерсного, поэтому стата не обновляется!

Решение:
Код: Выделить всё
.../psychostats/admin/logsources_edit.php

Поставить галочку в настройках логов серверов "skip last logs"
Второй вариант поставить бета версию, и в кварах либо отключить логирование, либо изменить путь до лога!

Источник: Вы должны зарегистрироваться, чтобы видеть ссылки.
Автор: PRoSToTeM@
Аватара пользователя
Rejiser
 
Сообщения: 2934
Зарегистрирован: 03 сен 2010, 16:23
Благодарил (а): 215 раз.
Поблагодарили: 674 раз.
Языки программирования: Counter-Strike 1.6

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение __valera__ » 03 фев 2014, 21:11

Выложили наконец сюды :)
Лучший по моему мнению хостинг, регаться по реф. ссылке:) Мне за это бонусы дают =Р

Multi Play

IDEAL VIP v3.0
[spoiler]тема[/spoiler]
Аватара пользователя
__valera__
 
Сообщения: 438
Зарегистрирован: 05 сен 2011, 17:55
Благодарил (а): 204 раз.
Поблагодарили: 74 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение Chuvi » 03 фев 2014, 21:56

Хи. Я только-только закончил писать плагин, который сделает возможным запись голоса на HLTV.
(Просто HLTV на QueryClientCvar не отвечает, поэтому VTC туда ничего не отправляет)

Он пока не совсем готов, поэтому выкладываю пока тут, а не в добавленных плагинах.
[spoiler][pawn]
  1. #include <amxmodx>

  2. #include <amxmisc>

  3. #include <orpheu>

  4.  

  5.  

  6. #define PLUGIN "VoiceTranscoderHLTVFix"

  7. #define VERSION "1.0"

  8. #define AUTHOR "Chuvi"

  9.  

  10.  

  11. new OrpheuFunction:NumForEdict

  12. new OrpheuFunction:MSG_ReadLong;

  13. new OrpheuFunction:MSG_ReadString;

  14. new OrpheuFunction:SV_ParseCvarValue2

  15.  

  16. new OrpheuHook:MSG_ReadLongHook;

  17. new OrpheuHook:MSG_ReadStringHook;

  18. new MsgReadStringCount=0;

  19. new QueryRequestIDs[33]

  20. new QueryRequestID

  21. new CurClient;

  22. new ClientID[33]

  23.  

  24. new OrpheuConfigs[200]

  25. new pHltvCodec

  26. public plugin_init()

  27. {

  28.         get_configsdir(OrpheuConfigs,charsmax(OrpheuConfigs))

  29.         format(OrpheuConfigs,charsmax(OrpheuConfigs),"%s/orpheu/functions",OrpheuConfigs)

  30.        

  31.         new bool:rs=false;

  32.         rs=Create_MSG_ReadLong()||rs;

  33.         rs=Create_MSG_ReadString()||rs;

  34.         rs=Create_NUM_FOR_EDICT()||rs;

  35.         rs=Create_QueryClientCvarValue2()||rs;

  36.         rs=Create_SV_ParseCvarValue2()||rs;

  37.         rs=Create_SV_ExecuteClientMessage()||rs;

  38.         if(rs)

  39.                 server_cmd("restart");

  40.                

  41.  

  42.         register_plugin(PLUGIN, VERSION, AUTHOR)

  43.         OrpheuRegisterHook(OrpheuGetFunction("QueryClientCvarValue2"), "On_QueryClientCvarValue2", OrpheuHookPre)

  44.         OrpheuRegisterHook(OrpheuGetFunction("SV_ExecuteClientMessage"),"On_SV_ExecuteClientMessage",OrpheuHookPre)

  45.         pHltvCodec=register_cvar("vtc_hltv_codec","1")

  46.         NumForEdict=OrpheuGetFunction("NUM_FOR_EDICT");

  47.         MSG_ReadLong=OrpheuGetFunction("MSG_ReadLong");

  48.         MSG_ReadString=OrpheuGetFunction("MSG_ReadString");

  49.         SV_ParseCvarValue2=OrpheuGetFunction("SV_ParseCvarValue2");

  50.         // Add your code here...

  51. }

  52.  

  53.  

  54.  

  55. public OrpheuHookReturn:On_SV_ExecuteClientMessage(client)

  56. {

  57.         CurClient=client;

  58.         //server_print("On_SV_ExecuteClientMessage %i",client);

  59.         return OrpheuIgnored;

  60.         //Ну не придумал я способа лучше узнать client_t

  61. }

  62. public client_connect(id)

  63. {

  64.         server_print("%i connected",id)

  65. }

  66.  

  67. public client_authorized(id)

  68. {

  69.        

  70.         server_print("%i %s HLTV",id,is_user_hltv(id)?"is":"is not")

  71.         if(!is_user_hltv(id)||QueryRequestIDs[id]==0||ClientID[id]==0)

  72.         {

  73.                 QueryRequestIDs[id]=0;

  74.                 ClientID[id]=0;

  75.                 return;

  76.         }

  77.        

  78.         QueryRequestID=QueryRequestIDs[id]

  79.         MSG_ReadLongHook=OrpheuRegisterHook(MSG_ReadLong,"On_MSG_ReadLong",OrpheuHookPre)

  80.         MSG_ReadStringHook=OrpheuRegisterHook(MSG_ReadString,"On_MSG_ReadString",OrpheuHookPre)

  81.         MsgReadStringCount=0;

  82.         OrpheuCall(SV_ParseCvarValue2,ClientID[id])

  83.         OrpheuUnregisterHook(MSG_ReadLongHook)

  84.         OrpheuUnregisterHook(MSG_ReadStringHook)

  85.         QueryRequestIDs[id]=0;

  86.         ClientID[id]=0;

  87.         return

  88.        

  89. }

  90.  

  91.  

  92. public OrpheuHookReturn:On_QueryClientCvarValue(Edict,CvarName[],RequestID)

  93. {

  94.         server_print("On_QueryClientCvarValue CvarName:%s",CvarName);

  95.         return OrpheuIgnored

  96. }

  97.  

  98. public OrpheuHookReturn:On_QueryClientCvarValue2(Edict,CvarName[],RequestID)

  99. {

  100.         server_print("CvarName:%s",CvarName);

  101.         if(!equali(CvarName,"sv_version"))

  102.         {

  103.                 server_print("On_QueryClientCvarValue2:Not sv_version");

  104.                 return OrpheuIgnored;

  105.         }

  106.         server_print("On_QueryClientCvarValue2");

  107.         new id=OrpheuCall(NumForEdict,Edict);

  108.         if(id<1||id>get_maxplayers())

  109.                 return OrpheuIgnored

  110.                

  111.         server_print("CVAR_Query: %i (id=%i) ^"%s^" %i^nfunc=%i",Edict,id,CvarName,RequestID,NumForEdict)

  112.         server_print("MSG_ReadLong=%i^nMSG_ReadString=%i",MSG_ReadLong,MSG_ReadString);

  113.  

  114.        

  115.         QueryRequestIDs[id]=RequestID;

  116.         ClientID[id]=CurClient;

  117.         return OrpheuIgnored

  118. }

  119.  

  120.  

  121. public OrpheuHookReturn:On_MSG_ReadLong()

  122. {

  123.         server_print("On_MSG_ReadLong");

  124.         OrpheuSetReturn(QueryRequestID)

  125.         server_print("QueryRequestId=%i",QueryRequestID);

  126.         return OrpheuSupercede

  127. }

  128.  

  129. public OrpheuHookReturn:On_MSG_ReadString()

  130. {

  131.         server_print("On_MSG_ReadString");

  132.         if(MsgReadStringCount==0)

  133.         {

  134.                 OrpheuSetReturn("sv_version")

  135.                 MsgReadStringCount++

  136.                 return OrpheuSupercede

  137.         }

  138.         else

  139.         {

  140.                 if(!get_pcvar_num(pHltvCodec))

  141.                         OrpheuSetReturn("1.1.2.7/Stdio,48,5000")

  142.                 else

  143.                         OrpheuSetReturn("1.1.2.7/Stdio,48,6100")

  144.                 MsgReadStringCount=0

  145.                 return OrpheuSupercede

  146.         }

  147.        

  148.         return OrpheuSupercede

  149. }

  150.  

  151.  

  152.  

  153. public bool:Create_SV_ParseCvarValue2()

  154. {

  155.         new FilePath[255]

  156.         format(FilePath,charsmax(FilePath),"%s/SV_ParseCvarValue2",OrpheuConfigs)

  157.         if(file_exists(FilePath))

  158.                 return false;

  159.         new File=fopen(FilePath,"wt");

  160.         if(!File)

  161.         {

  162.                 log_error(AMX_ERR_GENERAL,"Can't create ^"%s^" file",FilePath)

  163.                 return false;

  164.         }

  165.         fprintf(File,"{^n    ^"name^" : ^"SV_ParseCvarValue2^",^n    ^"library^" : ^"engine^"");

  166.         fprintf(File,",^n^t    ^"arguments^"  :^n    [^n^t^t{^n            ^"type^" : ^"long^"^n ");

  167.         fprintf(File,"       }^n    ],^n^t^"identifiers^" :^n^t[^n^t^t{^n^t^t^t^"os^" : ^"windows^",^n");

  168.         fprintf(File,"^t^t^t^"value^" : [0x55,0x8B,0xEC,0x81,0xEC,^"*^",^"*^",^"*^",^"*^",0x53,0");

  169.         fprintf(File,"x56,0x57,0xE8,^"*^",^"*^",^"*^",^"*^",0x68,^"*^",^"*^",^"*^",^"*^",0x8B,0xF0,");

  170.         fprintf(File,"0xE8,^"*^",^"*^",^"*^",^"*^",0x50,0x8D,0x85,^"*^",^"*^",^"*^",^"*^",0x50,0xE8");

  171.         fprintf(File,",^"*^",^"*^",^"*^",^"*^",0x83,0xC4,0x0C,0xC6,0x45,0xFE,0x00,0xE8,^"*^",");

  172.         fprintf(File,"^"*^",^"*^",^"*^",0x8B,0x5D,0x08,0x8B,0xF8,0xA1,^"*^",^"*^",^"*^",^"*^",0x8");

  173.         fprintf(File,"5,0xC0,0x74,0x15,0x8B,0x93,^"*^",^"*^",^"*^",^"*^",0x8D,0x8D,^"*^",^"*^",");

  174.         fprintf(File,"^"*^",^"*^",0x57,0x51,0x56,0x52,0xFF,0xD0,0x83,0xC4,0x10,0x8D,0x8");

  175.         fprintf(File,"5,^"*^",^"*^",^"*^",^"*^",0x57,0x50,0x81,0xC3,^"*^",^"*^",^"*^",^"*^",0x56,0x");

  176.         fprintf(File,"53,0x68,^"*^",^"*^",^"*^",^"*^",0xE8,^"*^",^"*^",^"*^",^"*^",0x83,0xC4,0x14,0");

  177.         fprintf(File,"x5F,0x5E,0x5B,0x8B,0xE5,0x5D,0xC3]^n^t^t},^n^t^t{^n^t^t^t^"os^" : ^"linux^"");

  178.         fprintf(File,",^n^t^t^t^"value^" : ^"SV_ParseCvarValue2^"^n^t^t}^n^t]^n}");

  179.         fclose(File);

  180.         return true;

  181. }

  182. public bool:Create_QueryClientCvarValue2()

  183. {

  184.         new FilePath[255]

  185.         format(FilePath,charsmax(FilePath),"%s/QueryClientCvarValue2",OrpheuConfigs)

  186.         if(file_exists(FilePath))

  187.                 return false;

  188.         new File=fopen(FilePath,"wt");

  189.         if(!File)

  190.         {

  191.                 log_error(AMX_ERR_GENERAL,"Can't create ^"%s^" file",FilePath)

  192.                 return false;

  193.         }

  194.         fprintf(File,"{^n    ^"name^" : ^"QueryClientCvarValue2^",^n    ^"library^" : ^"engi");

  195.         fprintf(File,"ne^",^n^t    ^"arguments^"  :^n    [^n^t^t{^n            ^"type^" : ^"int^"");

  196.         fprintf(File,"^n        },^n        {^n            ^"type^" : ^"char *^"^n        }");

  197.         fprintf(File,",^n        {^n            ^"type^" : ^"int^"^n        }^n    ],^n^t^"ide");

  198.         fprintf(File,"ntifiers^" :^n^t[^n^t^t{^n^t^t^t^"os^" : ^"windows^",^n^t^t^t^"value^" : [0x55,0x");

  199.         fprintf(File,"8B,0xEC,0x56,0x8B,0x75,0x08,0x56,0xE8,^"*^",^"*^",^"*^",^"*^",0x83,0x");

  200.         fprintf(File,"C4,0x04,0x83,0xF8,0x01,0x7C,0x44,0x3B,0x05,^"*^",^"*^",^"*^",^"*^",0x");

  201.         fprintf(File,"7F,0x3C,0x8D,0x0C,0x80,0x6A,0x3A,0xC1,0xE1,0x08,0x03,0xC8,0x8");

  202.         fprintf(File,"D,0x14,0x48,0xA1,^"*^",^"*^",^"*^",^"*^",0x8D,0x84,0xD0,^"*^",^"*^",^"*^",^"");

  203.         fprintf(File,"*^",0x8D,0x70,0x7C,0x56,0xE8,^"*^",^"*^",^"*^",^"*^",0x8B,0x4D,0x10,0x");

  204.         fprintf(File,"51,0x56,0xE8,^"*^",^"*^",^"*^",^"*^",0x8B,0x55,0x0C,0x52,0x56,0xE8,^"*");

  205.         fprintf(File,"^",^"*^",^"*^",^"*^",0x83,0xC4,0x18,0x5E,0x5D,0xC3,0xA1,^"*^",^"*^",^"*^",");

  206.         fprintf(File,"^"*^",0x85,0xC0,0x74,0x13,0x8B,0x4D,0x0C,0x8B,0x55,0x10,0x68,^"*");

  207.         fprintf(File,"^",^"*^",^"*^",^"*^",0x51,0x52,0x56,0xFF,0xD0,0x83,0xC4,0x10,0x68,^"*");

  208.         fprintf(File,"^",^"*^",^"*^",^"*^",0xE8,^"*^",^"*^",^"*^",^"*^",0x83,0xC4,0x04,0x5E,0x5D,0");

  209.         fprintf(File,"xC3]^n^t^t},^n^t^t{^n^t^t^t^"os^" : ^"linux^",^n^t^t^t^"value^" : ^"QueryClientCva");

  210.         fprintf(File,"rValue2^"^n^t^t}^n^t]^n}");

  211.         fclose(File);

  212.         return true;

  213. }

  214. public bool:Create_NUM_FOR_EDICT()

  215. {

  216.         new FilePath[255]

  217.         format(FilePath,charsmax(FilePath),"%s/NUM_FOR_EDICT",OrpheuConfigs)

  218.         if(file_exists(FilePath))

  219.                 return false;

  220.         new File=fopen(FilePath,"wt");

  221.         if(!File)

  222.         {

  223.                 log_error(AMX_ERR_GENERAL,"Can't create ^"%s^" file",FilePath)

  224.                 return false;

  225.         }

  226.         fprintf(File,"{^n    ^"name^" : ^"NUM_FOR_EDICT^",^n    ^"library^" : ^"engine^",^n^t  ");

  227.         fprintf(File,"  ^"arguments^"  :^n    [^n^t^t{^n            ^"type^" : ^"int^"^n       ");

  228.         fprintf(File," }^n    ],^n    ^"return^" :^n    {^n            ^"type^" : ^"int^"^n   ");

  229.         fprintf(File," },^n^t^"identifiers^" :^n^t[^n^t^t{^n^t^t^t^"os^" : ^"windows^",^n^t^t^t^"value^" :");

  230.         fprintf(File," [0x55,0x8B,0xEC,0x8B,0x4D,0x08,0x8B,0x15,^"*^",^"*^",^"*^",^"*^",0x2");

  231.         fprintf(File,"B,0xCA,0xB8,^"*^",^"*^",^"*^",^"*^",0xF7,0xE1,0x56,0x8B,0xF2,0xC1,0xE");

  232.         fprintf(File,"E,0x03,0x78,0x08,0x3B,0x35,^"*^",^"*^",^"*^",^"*^",0x7C,0x0D,0x68,^"*^"");

  233.         fprintf(File,",^"*^",^"*^",^"*^",0xE8,^"*^",^"*^",^"*^",^"*^",0x83,0xC4,0x04,0x8B,0xC6,0x");

  234.         fprintf(File,"5E,0x5D,0xC3]^n^t^t},^n^t^t{^n^t^t^t^"os^" : ^"linux^",^n^t^t^t^"value^" : ^"NUM_F");

  235.         fprintf(File,"OR_EDICT^"^n^t^t}^n^t]^n}");

  236.         fclose(File);

  237.         return true;

  238. }

  239. public bool:Create_MSG_ReadLong()

  240. {

  241.         new FilePath[255]

  242.         format(FilePath,charsmax(FilePath),"%s/MSG_ReadLong",OrpheuConfigs)

  243.         if(file_exists(FilePath))

  244.                 return false;

  245.         new File=fopen(FilePath,"wt");

  246.         if(!File)

  247.         {

  248.                 log_error(AMX_ERR_GENERAL,"Can't create ^"%s^" file",FilePath)

  249.                 return false;

  250.         }

  251.         fprintf(File,"{^n    ^"name^" : ^"MSG_ReadLong^",^n    ^"library^" : ^"engine^",^n    ");

  252.         fprintf(File,"^"return^" :^n    {^n            ^"type^" : ^"long^"^n    },^n^t^"identif");

  253.         fprintf(File,"iers^" :^n^t[^n^t^t{^n^t^t^t^"os^" : ^"windows^",^n^t^t^t^"value^" : [0x8B,0x0D,^"");

  254.         fprintf(File,"*^",^"*^",^"*^",^"*^",0xA1,^"*^",^"*^",^"*^",^"*^",0x57,0x8D,0x79,0x04,0x3B,");

  255.         fprintf(File,"0xF8,0x7E,0x0F,0xC7,0x05,^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",0x83");

  256.         fprintf(File,",0xC8,0xFF,0x5F,0xC3,0x56,0x8B,0x35,^"*^",^"*^",^"*^",^"*^",0x33,0xC0");

  257.         fprintf(File,",0x33,0xD2,0x8A,0x44,0x0E,0x03,0x8A,0x54,0x0E,0x02,0xC1,0xE0,");

  258.         fprintf(File,"0x08,0x03,0xC2,0x33,0xD2,0x8A,0x54,0x0E,0x01,0x89,0x3D,^"*^",^"*");

  259.         fprintf(File,"^",^"*^",^"*^",0xC1,0xE0,0x08,0x03,0xC2,0x33,0xD2,0x8A,0x14,0x0E,0");

  260.         fprintf(File,"x5E,0xC1,0xE0,0x08,0x03,0xC2,0x5F,0xC3]^n^t^t},^n^t^t{^n^t^t^t^"os^" : ^"l");

  261.         fprintf(File,"inux^",^n^t^t^t^"value^" : ^"MSG_ReadLong^"^n^t^t}^n^t]^n}");

  262.         fclose(File);

  263.         return true;

  264. }

  265. public bool:Create_SV_ExecuteClientMessage()

  266. {

  267.         new FilePath[255]

  268.         format(FilePath,charsmax(FilePath),"%s/SV_ExecuteClientMessage",OrpheuConfigs)

  269.         if(file_exists(FilePath))

  270.                 return false;

  271.         new File=fopen(FilePath,"wt");

  272.         if(!File)

  273.         {

  274.                 log_error(AMX_ERR_GENERAL,"Can't create ^"%s^" file",FilePath)

  275.                 return false;

  276.         }

  277.         fprintf(File,"{^n    ^"name^" : ^"SV_ExecuteClientMessage^",^n    ^"library^" : ^"en");

  278.         fprintf(File,"gine^",^n^t    ^"arguments^"  :^n    [^n^t^t{^n            ^"type^" : ^"lo");

  279.         fprintf(File,"ng^"^n        }^n    ],^n^t^"identifiers^" :^n^t[^n^t^t{^n^t^t^t^"os^" : ^"windo");

  280.         fprintf(File,"ws^",^n^t^t^t^"value^" : [0x55,0x8B,0xEC,0x8B,0x0D,^"*^",^"*^",^"*^",^"*^",0");

  281.         fprintf(File,"x56,0x8B,0x75,0x08,0xC7,0x05,^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",");

  282.         fprintf(File,"0xDD,0x05,^"*^",^"*^",^"*^",^"*^",0x8B,0x46,0x5C,0x23,0xC1,0x8D,0x0C,");

  283.         fprintf(File,"0x40,0xC1,0xE1,0x07,0x03,0xC8,0x8B,0x86,^"*^",^"*^",^"*^",^"*^",0xC1,");

  284.         fprintf(File,"0xE1,0x04,0x03,0xC8,0xDC,0x21,0xDC,0xA6,^"*^",^"*^",^"*^",^"*^",0xD9,");

  285.         fprintf(File,"0x59,0x08,0xDD,0x01,0xDC,0x1D,^"*^",^"*^",^"*^",^"*^",0xDF,0xE0,0xF6,");

  286.         fprintf(File,"0xC4,0x44,0x7A,0x07,0xC7,0x41,^"*^",^"*^",^"*^",^"*^",^"*^",0xDD,0x05,^"");

  287.         fprintf(File,"*^",^"*^",^"*^",^"*^",0xDC,0xA6,^"*^",^"*^",^"*^",^"*^",0xDC,0x1D,^"*^",^"*^",^"*");

  288.         fprintf(File,"^",^"*^",0xDF,0xE0,0xF6,0xC4,0x05,0x7A,0x19,0xD9,0x41,0x08,0xDC,");

  289.         fprintf(File,"0x1D,^"*^",^"*^",^"*^",^"*^",0xDF,0xE0,0x25,^"*^",^"*^",^"*^",^"*^",0x75,0x07");

  290.         fprintf(File,",0xC7,0x41,^"*^",^"*^",^"*^",^"*^",^"*^",0x56,0xE8,^"*^",^"*^",^"*^",^"*^",0x8B");

  291.         fprintf(File,",0x86,^"*^",^"*^",^"*^",^"*^",0x89,0x35,^"*^",^"*^",^"*^",^"*^",0xA3,^"*^",^"*^",");

  292.         fprintf(File,"^"*^",^"*^",0xC7,0x86,^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",0xC7,0x05,^"");

  293.         fprintf(File,"*^",^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",^"*^",0x83,0xC4,0x04,0xA1,^"*^",^"*^",^"*");

  294.         fprintf(File,"^",^"*^",0x85,0xC0,0x75,0x26,0xE8,^"*^",^"*^",^"*^",^"*^",0x83,0xF8,0xFF");

  295.         fprintf(File,",0x74,0x47,0x85,0xC0,0x7C,0x28,0x83,0xF8,0x0B,0x7F,0x23,0x8D,");

  296.         fprintf(File,"0x0C,0x40,0x8B,0x04,0x8D,^"*^",^"*^",^"*^",^"*^",0x85,0xC0,0x74,0xD6,");

  297.         fprintf(File,"0x56,0xFF,0xD0,0xEB,0xCE,0x68,^"*^",^"*^",^"*^",^"*^",0xE8,^"*^",^"*^",^"*");

  298.         fprintf(File,"^",^"*^",0x83,0xC4,0x04,0x5E,0x5D,0xC3,0x50,0x68,^"*^",^"*^",^"*^",^"*^"");

  299.         fprintf(File,",0xE8,^"*^",^"*^",^"*^",^"*^",0x68,^"*^",^"*^",^"*^",^"*^",0x6A,0x00,0x56,0xE");

  300.         fprintf(File,"8,^"*^",^"*^",^"*^",^"*^",0x83,0xC4,0x14,0x5E,0x5D,0xC3]^n^t^t},^n^t^t{^n^t^t^t");

  301.         fprintf(File,"^"os^" : ^"linux^",^n^t^t^t^"value^" : ^"SV_ExecuteClientMessage^"^n^t^t}^n^t]");

  302.         fprintf(File,"^n}");

  303.         fclose(File);

  304.         return true;

  305. }

  306. public bool:Create_MSG_ReadString()

  307. {

  308.         new FilePath[255]

  309.         format(FilePath,charsmax(FilePath),"%s/MSG_ReadString",OrpheuConfigs)

  310.         if(file_exists(FilePath))

  311.                 return false;

  312.         new File=fopen(FilePath,"wt");

  313.         if(!File)

  314.         {

  315.                 log_error(AMX_ERR_GENERAL,"Can't create ^"%s^" file",FilePath)

  316.                 return false;

  317.         }

  318.         fprintf(File,"{^n    ^"name^" : ^"MSG_ReadString^",^n    ^"library^" : ^"engine^",^n  ");

  319.         fprintf(File,"  ^"return^" :^n    {^n            ^"type^" : ^"char *^"^n    },^n^t^"ide");

  320.         fprintf(File,"ntifiers^" :^n^t[^n^t^t{^n^t^t^t^"os^" : ^"windows^",^n^t^t^t^"value^" : [0x53,0x");

  321.         fprintf(File,"56,0x33,0xDB,0x33,0xF6,0xE8,^"*^",^"*^",^"*^",^"*^",0x83,0xF8,0xFF,0x");

  322.         fprintf(File,"74,0x13,0x3B,0xC3,0x74,0x0F,0x88,0x86,^"*^",^"*^",^"*^",^"*^",0x46,0x");

  323.         fprintf(File,"81,0xFE,^"*^",^"*^",^"*^",^"*^",0x72,0xE3,0x88,0x9E,^"*^",^"*^",^"*^",^"*^",0");

  324.         fprintf(File,"x5E,0xB8,^"*^",^"*^",^"*^",^"*^",0x5B,0xC3]^n^t^t},^n^t^t{^n^t^t^t^"os^" : ^"linux");

  325.         fprintf(File,"^",^n^t^t^t^"value^" : ^"MSG_ReadString^"^n^t^t}^n^t]^n}");

  326.         fclose(File);

  327.         return true;

  328. }
[/pawn][/spoiler]
Что как и почему- объясню, когда доберусь до дома. А то я что-то на работе засиделся.
[spoiler]PS: Да, я извращенец :) (Это по поводу вшитых описаний функций)[/spoiler]

"Незнание английского языка, это ваша проблема."

Плагинами на заказ не занимаюсь. Своих дел хватает.
Аватара пользователя
Chuvi
Модератор
 
Сообщения: 2175
Зарегистрирован: 24 ноя 2011, 08:03
Благодарил (а): 126 раз.
Поблагодарили: 543 раз.

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение Rejiser » 03 фев 2014, 21:59

Chuvi, да выкладывай, бета, не бета, будем тестить
Аватара пользователя
Rejiser
 
Сообщения: 2934
Зарегистрирован: 03 сен 2010, 16:23
Благодарил (а): 215 раз.
Поблагодарили: 674 раз.
Языки программирования: Counter-Strike 1.6

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение Chuvi » 04 фев 2014, 02:18

Rejiser, выложил, тестируйте.
Вы должны зарегистрироваться, чтобы видеть ссылки.
У меня почему-то на хостинге под линем на 6027-м билде не работает, на 5787-м вроде заработал.

На домашнем компе нормально заработал на 6153-м билде под виндой.

"Незнание английского языка, это ваша проблема."

Плагинами на заказ не занимаюсь. Своих дел хватает.
Аватара пользователя
Chuvi
Модератор
 
Сообщения: 2175
Зарегистрирован: 24 ноя 2011, 08:03
Благодарил (а): 126 раз.
Поблагодарили: 543 раз.

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение FlemQaaa » 07 июл 2014, 11:12

Хелп люди , не работает... :(
Разработка игрового мода Призраки [16%]
Аватара пользователя
FlemQaaa
 
Сообщения: 12
Зарегистрирован: 27 авг 2012, 06:23
Благодарил (а): 17 раз.
Поблагодарили: 7 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение Subb98 » 07 июл 2014, 11:18

ImpulsGame, збс информативно. :thumbs_up Ждите, вам обязательно помогут.
“Первый тост – за localhost!” ©
Аватара пользователя
Subb98
Модератор
 
Сообщения: 3840
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1136 раз.
Поблагодарили: 1888 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение PRoSToTeM@ » 07 июл 2014, 20:26

ImpulsGame,
1) meta list
2) liblist.gam
3) amxx plugins (или amx_plugins)
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2504
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 437 раз.
Поблагодарили: 1117 раз.

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение Leonidddd » 19 июл 2014, 15:44

Все отлично работает, спасибо за проделанную работу.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2152
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 176 раз.
Поблагодарили: 597 раз.
Языки программирования: Counter-Strike 1.6

Re: HLDS VoiceTranscoder (перекодирование Speex < = > SILK)

Сообщение Dmitry Beast » 24 июл 2014, 13:57

а почемему нет 106 версии?

Если ты споришь с идиотом, вероятно, тоже самое делает и он.
Обменяю Qiwi > WMR > ЯД = WMR > Qiwi > ЯД
Dj BeasT [Official Group]
Аватара пользователя
Dmitry Beast
 
Сообщения: 1438
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Челябинск
Благодарил (а): 388 раз.
Поблагодарили: 202 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

След.

Вернуться в Утвержденные плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1