Иконка ресурса

CSGO Tools 1.3

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #1
CSGO Tools V1.3

Данный плагин позволит лучше пощупать возможности сущностей SourceEngine, AcceptEntityInput а так-же просто пофаниться (Я себе повесил арбузы на ноги, руки и голову, проехался на машине влево, заспавнил раунд посреди раунда, выдал себе ночное зрение, отправил друга в космос(Я просто прыгнул) и кикнул бота командой "kill", ).

Поддерживаемые игры:
- Тестировал только на CSGO, про остальные игры не знаю

sm_getmenu - Открывает меню, позволяющее получать данные о сущностях.
sm_setentitymodel {entityid} {modelname} - SetEntityModel(entityid, modelname) + PrecacheModel
sm_setentitymovetype {entityid} {MoveVype:id} - SetEntityMoveType(entityid, MoveType:id)
sm_setentityrendermode {entityid} {RenderMode:id} - SetEntityRenderMode(entityid, RenderMode:id)
sm_setentityrendercolor {entityid} {RED} {GREEN} {BLUE} {ALPHA} | Если arg = -1, значение не меняется
sm_precachemodel {String:modelpath} - PrecacheModel(modelpath)
sm_precachesound {path_to_sound} - Прекеширует звук(например "*/ic/zr_commander/attack.mp3")
sm_ent_create {entity_name} - Создает сущность (например "prop_physics"), в чат выводится ID
sm_ent_accept_input {entityid} {String:command} {activator} {caller} {outputid} [String:arg], ...
sm_ent_key_value {entityid} {String:key} {String:value} - DispatchKeyValue(entityid, key, value)
sm_ent_key_float {entityid} {String:key} {Float:value} - DispatchKeyFloat(entityid, key, value)
sm_ent_key_vector {entityid} {String:key} {Float:pos1} {Float:pos2} {Float:pos3} - DispatchKeyValue(entityid, key, Float:{pos1, pos2, pos3})
sm_ent_spawn {entityid} - DispatchSpawn(entityid)
sm_ent_teleport_to_me {entityid} - Телепортирует entityid к вам
sm_ent_teleport_to_aim {entityid} - Телепортирует entityid в точку, на которую смотрите
sm_ent_setprop_int {entityid} {String:fieldname} {value} - SetEntProp
sm_ent_setprop_float {entityid} {String:fieldname} {Float:value} - SetEntPropFloat
sm_ent_setprop_vector {entityid} {String:fieldname} {Float:pos1} {Float:pos2} {Float:pos3}- SetEntPropVector
sm_ent_setprop_string {entityid} {String:fieldname} {String:value} - SetEntPropString

Эта команда вызывает функцию AcceptEntityInput таким образом:
AcceptEntityInput(entityid, command, activator, caller, outputid)

А теперь подробнее о [String:arg].
Их можно вводить сколько угодно, и значение это имеет несколько типов.
В общем это функция SetVariantString, SetVariantFloat и т.д.
Чтобы вводилось значение как String, надо перед текстом поставить ic_string: , чтобы получилось такая ересь: ic_string:command
Как нацепить на голову игроку проп?
sm_ent_accept_input propid "SetParent" client propid 0 "ic_string:!activator"
sm_ent_accept_input propid "SetParentAttachment" client propid 0 "ic_string:facemask"
C-подобный:
SetVariantString("!activator");
AcceptEntityInput(propid, "SetParent", client, propid, 0);
SetVariantString("facemask");
AcceptEntityInput(propid, "SetParentAttachment", client, propid, 0);
ic_string - текст
ic_int - Целое число
ic_float - Дробное число
ic_entity - Тоже целое число, но функция SetVarriantEntity и используется entityid

MOVETYPE_NONE = 0,
MOVETYPE_ISOMETRIC = 1,
MOVETYPE_WALK = 2,
MOVETYPE_STEP = 3,
MOVETYPE_FLY = 4,
MOVETYPE_FLYGRAVITY = 5,
MOVETYPE_VPHYSICS = 6,
MOVETYPE_PUSH = 7,
MOVETYPE_NOCLIP = 8,
MOVETYPE_LADDER = 9,
MOVETYPE_OBSERVER = 10,
MOVETYPE_CUSTOM = 11,
RENDER_NORMAL = 0
RENDER_TRANSCOLOR = 1
RENDER_TRANSTEXTURE = 2
RENDER_GLOW = 3
RENDER_TRANSALPHA = 4
RENDER_TRANSADD = 5
RENDER_ENVIRONMENTAL = 6
RENDER_TRANSADDFRAMEBLEND = 7
RENDER_TRANSALPHAADD = 8
RENDER_WORLDGLOW = 9
RENDER_NONE = 10

Примеры команд
sm_ent_create prop_physics | (Запоминаем число в чате как entityid)
sm_ent_key_value entityid "model" "models/props_junk/watermelon01.mdl"
sm_ent_spawn entityid
sm_ent_key_value entityid "solid" "0"
sm_ent_accept_input entityid "SetParent" @me entityid 0 "ic_string:!activator"
sm_ent_accept_input entityid "SetParentAttachment" @me entityid 0 "ic_string:facemask"
new entityid = CreateEntityByName("prop_physics")
DispatchKeyValue(entityid, "model", "models/props_junk/watermelon01.mdl")

DispatchSpawn(entityid)
DispatchKeyValue(entityid, "solid", "0")
SetVarriantString("!activator")
AcceptEntityInput(entityid, "SetParent", client, entityid, 0);

SetVariantString("facemask");
AcceptEntityInput(entityid, "SetParentAttachment", client, entityid, 0);
sm_ent_create light_dynamic | (Запоминаем число в чате как entityid)
sm_ent_key_value entityid "_light" "255 70 70 255"
sm_ent_key_float entityid "distance" "500.0"
sm_ent_spawn entityid
sm_ent_teleport_to_me entityid
sm_ent_accept_input entityid "SetParent" @me entityid "ic_string:!activator"
new entityid = CreateEntityByName("light_dynamic")
DispatchKeyValue(entityid, "_light", "255 70 70 255")

DispatchKeyFloat(entityid, "distance", 500.0)

DispatchSpawn(entityid)
new Float:pos[3]
GetClientAbsPosition(client, pos)
TeleportEntity(entityid, pos, NULL_VECTOR, NULL_VECTOR)

SetVarriantString("!activator")
AcceptEntityInput(entityid, "SetParent", client, entityid, 0);

Кваров, нативов и форвардов нету, но никто не мешает вам их добавить:)

Отдельная благодарность:
KrolZ - За толчок в мир SourcePawn
inklesspen (Да, мне ) - За идею

Идеи пишите в ЛС, если есть время и желание, сделаю.
И еще, прошу IP серверов с этим плагином мне писать в ЛС. Хочу знать сколько таких серверов :)
 
Последнее редактирование модератором:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
@inklesspen,
PHP:
decl String:arg[4][256]
    GetCmdArg(1, arg[0], 256)
    GetCmdArg(2, arg[1], 256)
    GetCmdArg(3, arg[2], 256)
    GetCmdArg(4, arg[3], 256)
    new entity = CheckString(client, arg[0])
    if(!YesEntityYes(entity))
    {
        CGOPrintToChat(client, "[{LIGHTGREEN}InkCore{DEFAULT}] Invalid entity", entity)
        return;
    }
    new Float:pos[3]
    pos[0] = StringToFloat(arg[1])
    pos[1] = StringToFloat(arg[2])
    pos[2] = StringToFloat(arg[3])
Зачем создать столько строк если можно обойтись одной?
Так же нет проверки на количество аргументов.
Ну те же ошибки во всех командах.

без ; писать не тру. Если будешь лепить в 1 строку - компилятор не поймет.

PHP:
public bool YesEntityYes(entity)
{
    if(!YesPlayer(entity)&&!YesEntityMe)
        return false
    return true
}
Проще же
PHP:
bool YesEntityYes(entity)
{
    return (YesPlayer(entity)&&YesEntityMe);
}
public не нужен во внутренних функциях плагина, только на тех, которые вызываются извне.
stock тоже не нужен. Он используется в inc файлах, для того чтобы функции помеченные stock но, которые не используются не включались компилятором в плагин.

PHP:
for(new i=6;i<=args;i++)
        {
            decl String:ink[256]
            GetCmdArg(i, ink, sizeof(ink))
            if(ReplaceString(ink, 256, "ic_string:", "")!=0)

Переменную создавай до цикла.

И вообще это
PHP:
    if(args>5)
    {
        // ...
    }
    if(args==2)
    {
        AcceptEntityInput(entity, arg)
    }
    else if(args==3)
    {
        GetCmdArg(3, arg, 256)
        new param1 = CheckString(client, arg)
        GetCmdArg(2, arg, 256)
        AcceptEntityInput(entity, arg, param1)
    }
    else if(args==4)
    {
       
// ...
    }
    else if(args>=5)
    {
       
// ...
    }
Лучше сделать так:
PHP:
switch(args)
{
    case 2:
    {
        AcceptEntityInput(entity, arg)
    }
    case 3:
    {
        GetCmdArg(3, arg, 256)
        new param1 = CheckString(client, arg)
        GetCmdArg(2, arg, 256)
        AcceptEntityInput(entity, arg, param1)
    }
    case 4:
    {
        GetCmdArg(3, arg, 256)
        new param1 = CheckString(client, arg)
        GetCmdArg(4, arg, 256)
        new param2 = CheckString(client, arg)
        GetCmdArg(2, arg, 256)
        AcceptEntityInput(entity, arg, param1, param2)
    }
    default:
    {
        if(args>5)
        {
            decl String:ink[256]
                for(new i=6;i<=args;i++)
            {
                GetCmdArg(i, ink, sizeof(ink))
                if(ReplaceString(ink, 256, "ic_string:", "")!=0)
                {
                    PrintToConsole(client, "Пойман: Строка")
                    SetVariantString(ink)
                }
                else if(ReplaceString(ink, 256, "ic_int:", "")!=0)
                {
                    SetVariantInt(StringToInt(ink))
                }
                else if(ReplaceString(ink, 256, "ic_bool:", "")!=0)
                {
                    SetVariantBool(bool:StringToInt(ink))
                }
                else if(ReplaceString(ink, 256, "ic_float:", "")!=0)
                {
                    SetVariantFloat(StringToFloat(ink))
                }
                else if(ReplaceString(ink, 256, "ic_entity:", "")!=0)
                {
                    SetVariantEntity(StringToInt(ink))
                }
            }
        }
        if(args>=5)
        {
            GetCmdArg(3, arg, 256)
            new param1 = CheckString(client, arg)
            GetCmdArg(4, arg, 256)
            new param2 = CheckString(client, arg)
            GetCmdArg(5, arg, 256)
            new param3 = CheckString(client, arg)
            GetCmdArg(2, arg, 256)
            AcceptEntityInput(entity, arg, param1, param2, param3)
        }
    }
}

PHP:
int GetClientOnAim(client, bool:originalaimtarget=false)
{
    if(originalaimtarget)
        return GetClientAimTarget(client, false)
    decl Float:origin[3], Float:angles[3];
    GetClientEyePosition(client, origin); GetClientEyeAngles(client, angles);
    TR_TraceRayFilter(origin, angles, MASK_SOLID, RayType_Infinite, Filter, client);
    if (!TR_DidHit())
        return -1;
    new ent = TR_GetEntityIndex();
    TR_GetEndPosition(origin);
    if (ent > 0 && ent <= MaxClients) return ent;
    else return -1;
}

Ты будешь удивлено но GetClientAimTarget это и есть
[/php]decl Float:origin[3], Float:angles[3];
GetClientEyePosition(client, origin); GetClientEyeAngles(client, angles);
TR_TraceRayFilter(origin, angles, MASK_SOLID, RayType_Infinite, Filter, client);
if (!TR_DidHit())
return -1;
new ent = TR_GetEntityIndex();
TR_GetEndPosition(origin);
if (ent > 0 && ent <= MaxClients) return ent;
else return -1;
[/php]

PHP:
if(StrEqual(arg, "getmenu_getpropid"))
        {
            CGOPrintToChat(client, "[{LIGHTGREEN}InkCore{DEFAULT}] Entity index: %i", lol[0])
        }
        else if(StrEqual(arg, "getmenu_getpropclassname"))
        {
            GetEntityClassname(lol[0], arg, sizeof(arg))
            CGOPrintToChat(client, "%s %s", PREFIX, arg)
        }
        else if(StrEqual(arg, "getmenu_getplayerhealth"))
        {
            CGOPrintToChat(client, "%s %i", PREFIX, GetClientHealth(lol[0]))
        }
        else if(StrEqual(arg, "getmenu_getplayeruserid"))
        {
            CGOPrintToChat(client, "%s %i", PREFIX, GetClientUserId(lol[0]))
        }
        else if(StrEqual(arg, "getmenu_getmyuserid"))
        {
            CGOPrintToChat(client, "%s %i", PREFIX, GetClientUserId(client))
        }
        else if(StrEqual(arg, "getmenu_getmyid"))
        {
            CGOPrintToChat(client, "%s %i", PREFIX, client, GetClientUserId(client))
        }
        else if(StrEqual(arg, "getmenu_select_player"))
        {
            GetPlayerMenu(client)
        }
        else if(StrEqual(arg, "getmenu_getproppos"))
        {
            new Float:pos[3]
            GetEntPropVector(lol[0], Prop_Send, "m_vecOrigin", pos)
            CGOPrintToChat(client, "%s Position: %f %f %f", PREFIX, pos[0], pos[1], pos[2])
        }
        else if(StrEqual(arg, "getmenu_select_prop"))
        {
            GetPropMenu(client)
        }

а почему бы сюда не передавать цифру, а по ней уже switch, так же проще чем со строками.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #3
Я лепил на скорую руку. Мне еще нужно было поработать над плагином ZR Commander от Franc1sco, у него руки не доходят.
switch это хорошо, но мне удобнее if, всегда можно взять код и исправить его.

Ты будешь удивлено но GetClientAimTarget это и есть
PHP:
decl Float:origin[3], Float:angles[3];
GetClientEyePosition(client, origin); GetClientEyeAngles(client, angles);
TR_TraceRayFilter(origin, angles, MASK_SOLID, RayType_Infinite, Filter, client);
if (!TR_DidHit())
return -1;
new ent = TR_GetEntityIndex();
TR_GetEndPosition(origin);
if (ent > 0 && ent <= MaxClients) return ent;
else return -1;

У меня эта функция не работала, вот я и решил использовать сразу GetClientAimTarget.

public не нужен во внутренних функциях плагина, только на тех, которые вызываются извне.
stock тоже не нужен. Он используется в inc файлах, для того чтобы функции помеченные stock но, которые не используются не включались компилятором в плагин.

Я не знал про это. Эти слова запомню + еще пошарю на wiki.

Зачем создать столько строк если можно обойтись одной?
Так же нет проверки на количество аргументов.
Ну те же ошибки во всех командах.

Совсем забыл про проверку... Спасибо
--- Добавлено позже ---
а почему бы сюда не передавать цифру, а по ней уже switch, так же проще чем со строками.
У меня с цифрами в таком плане проблемы. Опять-же, всегда можно взять код и исправить его.
За замечания и помощь спасибо. Обязательно займусь этим
--- Добавлено позже ---
PHP:
for(new i=6;i<=args;i++)
        {
            decl String:ink[256]
            GetCmdArg(i, ink, sizeof(ink))
            if(ReplaceString(ink, 256, "ic_string:", "")!=0)
Переменную создавай до цикла.
Дело в том, что переменная "ink" - строка. Так-что я пожалую такое делать не буду.
 
Последнее редактирование:

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #5

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Как спавнится машина? Цепляется моделька? или имитация вождения как в гонках.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #7
Как спавнится машина? Цепляется моделька? или имитация вождения как в гонках.
sm_ent_create prop_physics_multiplayer | (запоминаем ID как entityid)
sm_ent_key_value entityid "model" "models/props_vehicles/taxi_city.mdl"
sm_ent_spawn entityid
sm_ent_teleport_to_me entityid

Потом залелаем с noclip на 1 седенье, и пишет следующее:
sm_ent_accept_input entityid "SetParent" @me entityid "ic_string:!activator"

Вырубаем NoClip, и едем влево :)
В общем цепляется моделька, но при этом проп толкает игрока, а не на оборот
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@inklesspen, так в csgo есть такая функция prop_vehicle и prop_vehicle_driveable. Но пока у меня с ними ни чего, не вышло, лишь только сесть в машину и все..
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #9
@inklesspen, так в csgo есть такая функция prop_vehicle и prop_vehicle_driveable. Но пока у меня с ними ни чего, не вышло, лишь только сесть в машину и все..

Не знал. Вообще суть плагина не только в том, чтобы ездить на машинах...
А за инфу - спасибо.
--- Добавлено позже ---
@inklesspen, так в csgo есть такая функция prop_vehicle и prop_vehicle_driveable. Но пока у меня с ними ни чего, не вышло, лишь только сесть в машину и все..

Можно декомпилировать мапу на прохождение для CS:GO (какой-то coop_ карта). Там полюбому будет инфа о транспорте.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #11
Я понимаю что суть не в этом. Это мне для roleplay нужно, а так я подумал возможно он подобное может реализовать, ну видимо нет.

Я немного посидел в мапе... Знаете Garry's mod? Если да, то знаете ли вы, как действуют трусеры(Ну типо активируешь и они движуться в определенную сторону). Так с этими штуками можно создать полноценную машину
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@inklesspen, у меня впринципе есть код который создает машину, на ней можно по ездить туда-сюда, по управлять ей и выйти из нее. Мне просто было интересно посредством этого плагина реализовать, ибо мой код получился на 1к строк.
 

✨ Angel ✨

Участник
Сообщения
13
Реакции
0
Можно узнать куда кидать это фаел в какие папки ???
 
Сверху Снизу