Написание плагинов

Felton

Участник
Сообщения
799
Реакции
59
@Lisoh,
C-подобный:
[SM] Native "GetEngineVersion" reported:
L 05/13/2018 - 17:59:12: [SM] Displaying call stack trace for plugin "c4_sprite_v34.smx":
L 05/13/2018 - 17:59:12: [SM]   [0]  Line 13, /home/groups/sourcemod/upload_tmp/phpMFj9vF.sp::AskPluginLoad2()
L 05/13/2018 - 17:59:12: [SM] Unable to load plugin "c4_sprite_v34.smx": Native "GetEngineVersion" was not found
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
@Lisoh,
C-подобный:
[SM] Native "GetEngineVersion" reported:
L 05/13/2018 - 17:59:12: [SM] Displaying call stack trace for plugin "c4_sprite_v34.smx":
L 05/13/2018 - 17:59:12: [SM]   [0]  Line 13, /home/groups/sourcemod/upload_tmp/phpMFj9vF.sp::AskPluginLoad2()
L 05/13/2018 - 17:59:12: [SM] Unable to load plugin "c4_sprite_v34.smx": Native "GetEngineVersion" was not found
PHP:
#include <sdktools>

#define SPRITEPATH "rank/rankup"       // Путь к спрайту (без папки materials/ и формата файла vtf/vmt)
#define SCALE "1.0"                       // Размер спрайта
#define HEIGHT 0.0                       // Высота спрайта от позиции бомбы / 0.0 - стандратная позиция
#define DELETEDEFUSE 1                   // Удалить спрайт после того как бомбу обезвредили? / любое другое значение - не удалять
#define DELETEEXPLODE 1                   // Удалить спрайт после того как бомба взорвалась? / любое другое значение - не удалять

int g_iEntity;

public void OnPluginStart()
{
   HookEvent("bomb_planted", BombPlanted);
   HookEvent("bomb_defused", BombEnd);
   HookEvent("bomb_exploded", BombEnd);
   HookEvent("round_start", RoundStart);
}

public void OnMapStart()
{
   char sBuffer[128];
   FormatEx(sBuffer, sizeof(sBuffer), "materials/%s.vmt", SPRITEPATH);
   AddFileToDownloadsTable(sBuffer);
   FormatEx(sBuffer, sizeof(sBuffer), "materials/%s.vtf", SPRITEPATH);
   AddFileToDownloadsTable(sBuffer);
   FormatEx(sBuffer, sizeof(sBuffer), "%s.vtf", SPRITEPATH);
   PrecacheDecal(sBuffer, true);
}

public void BombPlanted(Event hEvent, const char[] sName, bool bDbc)
{
   int iEntity = FindEntityByClassname(MaxClients +1, "planted_c4");
   if(iEntity != -1)
   {
       float fPos[3];
       GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fPos);
     
       iEntity = CreateEntityByName("env_sprite");
     
       if(iEntity != -1)
       {
           char sModel[150];
           FormatEx(sModel, sizeof(sModel), "materials/%s.vmt", SPRITEPATH);
           fPos[2] += HEIGHT;
         
           DispatchKeyValue(iEntity, "classname", "env_sprite");
           DispatchKeyValue(iEntity, "model", sModel);
           DispatchKeyValue(iEntity, "scale", SCALE);
           DispatchKeyValue(iEntity, "rendermode", "1");
           DispatchKeyValue(iEntity, "rendercolor", "255 255 255");
           DispatchKeyValueVector(iEntity, "origin", fPos);
           DispatchSpawn(iEntity);
         
           g_iEntity = EntIndexToEntRef(iEntity);
       }
   }
}

public void RoundStart(Event hEvent, const char[] sName, bool bDbc)
{
   DeleteSprite();
}

public void BombEnd(Event hEvent, const char[] sName, bool bDbc)
{
   int i; // warning 205: redundant code: constant expression is zero
   if(sName[5] == 'd') i = DELETEDEFUSE;
   else i = DELETEEXPLODE;
   if(i != 1) return;
   DeleteSprite();
}

void DeleteSprite()
{
   int iEntity = EntRefToEntIndex(g_iEntity);
   if(iEntity != INVALID_ENT_REFERENCE && iEntity > 0 && IsValidEntity(iEntity)) AcceptEntityInput(iEntity, "Kill");

   g_iEntity = -1;
}
 

munenmusin

Участник
Сообщения
5
Реакции
0
Нужен плагин возрождения после смерти на рандомных позициях между дефолтными точками на карте (не из конфига, а те что изначально поставлены в hammer). CSS v34, дефолтный дм плагин возраждает точки ПО ОЧЕРЕДНО, мне же нужен полный рандом. Есть у кого-нибудь идеи или варианты?
 

Felton

Участник
Сообщения
799
Реакции
59
C-подобный:
/ Указывай путь к файлу
// -
// Default: ""
sm_c4_sprite "materials/sprites/cherep.vmt"

// Высота спрайта с позиции
// -
// Default: "50.0"
sm_c4_sprite_height "100.0"

// Удалить спрайт при дефузе
// -
// Default: "1"
// Minimum: "0.000000"
// Maximum: "1.000000"
sm_c4_sprite_remove_on_defuse "1"

// Удалить спрайт при взрыве
// -
// Default: "1"
// Minimum: "0.000000"
// Maximum: "1.000000"
sm_c4_sprite_remove_on_explode "1"

// Масштаб спрайта
// -
// Default: "1.0"
sm_c4_sprite_scale "0.2"
Скомпелировал ошибок нет и нет c4_sprite.cfg как в оригинале
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
C-подобный:
// Указывай путь к файлу
// -
// Default: ""
sm_c4_sprite "materials/sprites/cherep.vmt"

// Высота спрайта с позиции
// -
// Default: "50.0"
sm_c4_sprite_height "100.0"

// Удалить спрайт при дефузе
// -
// Default: "1"
// Minimum: "0.000000"
// Maximum: "1.000000"
sm_c4_sprite_remove_on_defuse "1"

// Удалить спрайт при взрыве
// -
// Default: "1"
// Minimum: "0.000000"
// Maximum: "1.000000"
sm_c4_sprite_remove_on_explode "1"

// Масштаб спрайта
// -
// Default: "1.0"
sm_c4_sprite_scale "0.2"
@Lisoh,
Скомпелировал ошибок нет и нет c4_sprite.cfg как в оригинале
Я и не делал конфиг, все регулируется в исходнике в '#define'
 

Felton

Участник
Сообщения
799
Реакции
59
@Lisoh,
мне было бы удобней через конфиг .Ведь можно спрэи менять хоть 1000 раз без правки исходника.Просто прописал новый путь перезагрузил сервер и всё.
--- Добавлено позже ---
@munenmusin,
А чем тебя не устраивает Spawn Tools 7?
 
Последнее редактирование:

munenmusin

Участник
Сообщения
5
Реакции
0
@Lisoh,
@munenmusin,
А чем тебя не устраивает Spawn Tools 7?

Тем что точки он берет поочередно. Мне нужны дефолтные точки на карте, но чтоб респ шёл рандомно. С параметром preset dm плагин берет точки из конфига и возраждает рандомно, но там нет различия между кт и т респавнами, в этом то и проблема, он вычеркивает все точки что ближе к тому кто убил на 600 юнитов. Плюс придется на всех мапах что я сделал записывать координаты точек заново.
 
Последнее редактирование:

Disaster

Не ждите чуда. Чудите сами!
Сообщения
173
Реакции
81
Нужен плагин который включает прицел [Не зум] на Awp Noscope типо weapon_debug_spread_show через меню
 

alexmy

Участник
Сообщения
284
Реакции
13
Использование тега "Оффтоп" не по назначению
Почему таймер иногда бывает сразу вызывает по не сколько раз меню?
PHP:
public void EventRoundStart(Event hEvent, const char [] strName, bool DontBroadcast)
{
    //CreateTimer(10.0, TimerUpdate, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
    if(SM_TimerUpdate != null)
    {
        delete(SM_TimerUpdate);
        SM_TimerUpdate = null;
    }
    SM_TimerUpdate = CreateTimer(150.0, TimerVote, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action TimerVote(Handle timer){
    for (int i = 1; i <= MaxClients; ++i) if (IsClientInGame(i) && !IsFakeClient(i))
    PrintToChat(i, "\x04[***VOTE***INFECTED***RAIN***] \x05Запущенно автоматическое голосование.");
    Vote_Rain();
    SM_TimerUpdate = null;
    //return Plugin_Continue;
}

public Action sm_voterain(int client, int args){
    Vote_Rain();
}

stock int Vote_Rain(){
    if (!IsVoteInProgress())
    {
        Handle menu = CreateMenu(Handle_Vote);
        SetMenuTitle(menu, "***VOTE***INFECTED***RAIN***");
        AddMenuItem(menu, "Yes", "Да");
        AddMenuItem(menu, "No", "Нет");
        SetMenuExitButton(menu, false);
        VoteMenuToAll(menu, 20);
    }
}
 
Последнее редактирование модератором:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@alexmy, потому что Вы его не убиваете.
Он у Вас бесконечный, но в конце-концов при вызове таймера, Вы указатель на него стираете из памяти (но таймер продолжает жить).
 

alexmy

Участник
Сообщения
284
Реакции
13
@alexmy, потому что Вы его не убиваете.
Он у Вас бесконечный, но в конце-концов при вызове таймера, Вы указатель на него стираете из памяти (но таймер продолжает жить).
Типа такого надо?
PHP:
public Action TimerVote(Handle timer)
{
    for (int i = 1; i <= MaxClients; ++i) if (IsClientInGame(i) && !IsFakeClient(i))
    {
        PrintToChat(i, "\x04[***VOTE***INFECTED***RAIN***] \x05Запущенно автоматическое голосование.");
        Vote_Rain();
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@alexmy, чтобы таймер умер - надо Plugin_Stop, насколько помню.
--- Добавлено позже ---
Ну, да. Plugin_Stop.
upload_2018-5-15_10-20-35.png
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Disaster, невозможно. Чтобы именно игра рисовала эти четыре полоски в любом случае - нет.
Посмотреть, что именно делает т.н. weapon_debug_spread_show не могу, но предполагаю, что он именно это и делает.
 

Disaster

Не ждите чуда. Чудите сами!
Сообщения
173
Реакции
81
@Disaster, невозможно. Чтобы именно игра рисовала эти четыре полоски в любом случае - нет.
Посмотреть, что именно делает т.н. weapon_debug_spread_show не могу, но предполагаю, что он именно это и делает.
Там вроде обычный прицел добавляется, надо сделать просто что бы на awp был прицел в центре.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@alexmy, Вы в момент зануливания указателя на таймер его не убиваете. Он продолжает жить до конца карты.
Но в каждом новом раунде создается ещё один таймер с такой же историей, а потом и ещё один... И так в цикле. Запускается и работает по несколько таймеров.
 
Сверху Снизу