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

Deathrun Mod [Core + Modes]

Утвержденные плагины для AMX Mod X администратором/модератором форума.

Модератор: Leonidddd

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

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

Re: Deathrun Mod [Core + Modes]

Сообщение a1ex » 12 фев 2017, 20:12

Mistrick, вот эта версия стоит на сервере (бралась с гита), единственное чем она отличается от версии с гита, изменен путь к моделям снежков и установка террористу здоровья.

компилировалось ReAmxModX Build 7 (Может из-за него не работает, хз)

Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <deathrun_modes>

#define PLUGIN "Deathrun Mode: Snow"
#define VERSION "1.0.4"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define IsPlayer(%0) (%0 && %0 <= g_iMaxPlayers)

#define CAN_FLY_THROUGH_THE_WALLS
// #define STOP_BALL_AFTER_TOUCH

#define SNOWBALL_AMOUNT 200
#define SNOWBALL_DAMAGE 50.0
#define SNOWBALL_VELOCITY 2000.0
#define SNOWBALL_LIFETIME 5.0
#define TERRORIST_HEALTH 150

const XO_CBASEPLAYERWEAPON = 4;
const XO_CBASEPLAYER = 5;
const m_pPlayer = 41;

new const BALL_CLASSNAME[] = "snow_ball";
new const BALL_MODEL_W[] = "models/royal/snowball/w_snowball.mdl";
new const BALL_MODEL_V[] = "models/royal/snowball/v_asbowball.mdl";
new const BALL_MODEL_P[] = "models/royal/snowball/p_snowball.mdl";

new g_iModeSnow, g_iCurMode, g_iSprite, g_iMaxPlayers;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    RegisterHam
(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", true);
    RegisterHam(Ham_Item_Deploy, "weapon_smokegrenade", "Ham_SmokeGranade_Deploy_Post", true);
    
    register_forward
(FM_SetModel, "FM_SetModel_Post", true);
    
    
#if defined CAN_FLY_THROUGH_THE_WALLS
    register_forward(FM_ShouldCollide, "FM_ShouldCollide_Pre", false);
    #endif
    
    register_touch
(BALL_CLASSNAME, "*", "Engine_TouchSnowBall");
    register_think(BALL_CLASSNAME, "Engine_ThinkSnowBall");
    
    register_message
(get_user_msgid("TextMsg"), "Message_TextMsg");
    register_message(get_user_msgid("SendAudio"), "Message_SendAudio");
    
    g_iMaxPlayers 
= get_maxplayers();
    
    g_iModeSnow 
= dr_register_mode
    
(
        .Name = "DRM_MODE_SNOW",
        .Mark = "snow",
        .RoundDelay = 3,
        .CT_BlockWeapons = 1,
        .TT_BlockWeapons = 1,
        .CT_BlockButtons = 0,
        .TT_BlockButtons = 1,
        .Bhop = 1,
        .Usp = 0,
        .Hide = 0
    
);
}
public plugin_precache()
{
    precache_model(BALL_MODEL_V);
    precache_model(BALL_MODEL_P);
    precache_model(BALL_MODEL_W);
    g_iSprite = precache_model("sprites/zbeam3.spr");
}
//***** *****//
public dr_selected_mode(id, mode)
{
    g_iCurMode = mode;
    if(g_iModeSnow == mode)
    {
        set_user_health(id, TERRORIST_HEALTH);
        
        give_item
(id, "weapon_smokegrenade");
        cs_set_user_bpammo(id, CSW_SMOKEGRENADE, SNOWBALL_AMOUNT);
        
        set_dhudmessage
(random_num(0, 255), random_num(0, 255), random_num(0, 255), 0.01, 0.50, 0, 0.0, 3.0, 0.2, 3.0);
        show_dhudmessage(0, "Режим снежки: будь осторожен... не замерзни!"); 
    
}
}
//****************************//
public Message_TextMsg(msgid, dest, reciver)
{
    if(g_iCurMode != g_iModeSnow) return PLUGIN_CONTINUE;
    
    if
(get_msg_args() != 5 || get_msg_argtype(5) != ARG_STRING) return PLUGIN_CONTINUE;

    new arg5[20]; get_msg_arg_string(5, arg5, charsmax(arg5));
    
    if
(equal(arg5, "#Fire_in_the_hole")) return PLUGIN_HANDLED;

    return PLUGIN_CONTINUE;
}
public Message_SendAudio(msgid, dest, reciver)
{
    if(g_iCurMode != g_iModeSnow) return PLUGIN_CONTINUE;
    
    if
(get_msg_args() != 3 || get_msg_argtype(2) != ARG_STRING) return PLUGIN_CONTINUE;

    new arg2[20]; get_msg_arg_string(2, arg2, charsmax(arg2));
    
    if
(equal(arg2[1], "!MRAD_FIREINHOLE")) return PLUGIN_HANDLED;

    return PLUGIN_CONTINUE;
}
//****************************//
public Ham_PlayerSpawn_Post(id)
{
    if(g_iCurMode == g_iModeSnow)
    {
        if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T)
        {
            give_item(id, "weapon_smokegrenade");
            cs_set_user_bpammo(id, CSW_SMOKEGRENADE, SNOWBALL_AMOUNT);
        }
    }
}
public Ham_SmokeGranade_Deploy_Post(weapon)
{
    if(g_iCurMode != g_iModeSnow) return HAM_IGNORED;
    
    new id 
= get_pdata_cbase(weapon, m_pPlayer, XO_CBASEPLAYERWEAPON);
    
    if
(cs_get_user_team(id) == CS_TEAM_T)
    {
        set_pev(id, pev_viewmodel2, BALL_MODEL_V);
        set_pev(id, pev_weaponmodel2, BALL_MODEL_P);
    }
    
    return HAM_IGNORED
;
}
public FM_SetModel_Post(ent, const model[])
{
    if(g_iCurMode != g_iModeSnow) return FMRES_IGNORED;
    
    if
(!equali(model, "models/w_smokegrenade.mdl")) return FMRES_IGNORED;
    
    new owner 
= pev(ent, pev_owner);
    if(is_user_alive(owner) && cs_get_user_team(owner) == CS_TEAM_T)
    {
        CreateSnowBall(owner);
        if(is_valid_ent(ent)) set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
    }
    
    return FMRES_IGNORED
;
}
public CreateSnowBall(id)
{
    new Float:vec_start[3]; pev(id, pev_origin, vec_start);
    new Float:view_ofs[3]; pev(id, pev_view_ofs, view_ofs);
    xs_vec_add(vec_start, view_ofs, vec_start);
    
    new end_of_view
[3]; get_user_origin(id, end_of_view, 3);
    new Float:vec_end[3]; IVecFVec(end_of_view, vec_end);
    
    new Float
:velocity[3]; xs_vec_sub(vec_end, vec_start, velocity);
    new Float:normal[3]; xs_vec_normalize(velocity, normal);
    xs_vec_mul_scalar(normal, SNOWBALL_VELOCITY, velocity);
    
    new ent 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
    
    set_pev
(ent, pev_classname, BALL_CLASSNAME);
    set_pev(ent, pev_owner, id);
    set_pev(ent, pev_movetype, MOVETYPE_BOUNCE);
    set_pev(ent, pev_solid, SOLID_BBOX);
    set_pev(ent, pev_nextthink, get_gametime() + SNOWBALL_LIFETIME);
    
    engfunc
(EngFunc_SetModel, ent, BALL_MODEL_W);
    engfunc(EngFunc_SetOrigin, ent, vec_start);
    engfunc(EngFunc_SetSize, ent, Float:{-3.0, -3.0, -3.0}, Float:{3.0, 3.0, 3.0});

    set_pev(ent, pev_velocity, velocity);
    
    set_task
(0.1, "Task_SetTrail", ent);
    //trail_msg(ent, g_iSprite, 5, 8, 55, 55, 255, 150);
}
public Task_SetTrail(ent)
{
    if(is_valid_ent(ent))
    {
        trail_msg(ent, g_iSprite, 5, 8, 55, 55, 255, 150);
    }
}
public Engine_TouchSnowBall(ent, toucher)
{
    if(!is_valid_ent(ent))
    {
        return PLUGIN_CONTINUE;
    }
    if(IsPlayer(toucher) && SnowBallTakeDamage(ent, toucher))
    {
        return PLUGIN_CONTINUE;
    }
    #if defined STOP_BALL_AFTER_TOUCH
    set_pev(ent, pev_movetype, MOVETYPE_FLY);
    set_pev(ent, pev_velocity, Float:{0.0, 0.0, 0.0});
    #else
    new Float:velocity[3]; pev(ent, pev_velocity, velocity);
    xs_vec_mul_scalar(velocity, 0.7, velocity);
    set_pev(ent, pev_velocity, velocity);
    #endif // STOP_BALL_AFTER_TOUCH
    return PLUGIN_CONTINUE;
}
SnowBallTakeDamage(snowball, player)
{
    new owner = pev(snowball, pev_owner);
    if(is_user_connected(owner))
    {
        if(is_user_alive(player) && cs_get_user_team(player) != cs_get_user_team(owner))
        {
            ExecuteHamB(Ham_TakeDamage, player, snowball, owner, SNOWBALL_DAMAGE, 0);
            engfunc(EngFunc_RemoveEntity, snowball);
            return 1;
        }
    }
    return 0;
}
public Engine_ThinkSnowBall(ent)
{
    set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
}

#if defined CAN_FLY_THROUGH_THE_WALLS
public FM_ShouldCollide_Pre(ent, toucher)
{
    if(g_iCurMode != g_iModeSnow) return FMRES_IGNORED;
    
    if
(IsPlayer(toucher)) return FMRES_IGNORED;
    
    new toucher_classname
[32]; pev(toucher, pev_classname , toucher_classname, charsmax(toucher_classname));
    if(equal(toucher_classname, BALL_CLASSNAME))
    {
        new ent_classname[32]; pev(ent, pev_classname , ent_classname, charsmax(ent_classname));
        if(equal(ent_classname, "func_wall"))
        {
            new Float:FXAmount = Float:pev(ent, pev_renderamt);
            if(FXAmount < 200.0)
            {
                forward_return(FMV_CELL, 0); 
                return FMRES_SUPERCEDE
;
            }
        }
    }
    return FMRES_IGNORED;
}
#endif

trail_msg(ent, sprite, lifetime, size, r, g, b, alpha)
{
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
    write_byte(TE_BEAMFOLLOW);// TE_BEAMFOLLOW
    write_short(ent);
    write_short(sprite);//sprite
    write_byte(lifetime * 10);//lifetime
    write_byte(size);//size
    write_byte(r);//r
    write_byte(g);//g
    write_byte(b);//b
    write_byte(alpha);//alpha
    message_end();


Добавлено спустя 2 минуты 14 секунд:
Mistrick, у версии "1.0.2" хоть и есть ограничение на толщину стекла, но она хоть работает, а "1.0.4" вообще никак.
Аватара пользователя
a1ex
 
Сообщения: 98
Зарегистрирован: 21 авг 2012, 17:18
Откуда: Украина
Благодарил (а): 53 раз.
Поблагодарили: 21 раз.

Re: Deathrun Mod [Core + Modes]

Сообщение MARSHO » 12 фев 2017, 21:25

Подскажи, пожалуйста, как вот это лечить? (отрывок лога ошибок)
Код: Выделить всё
L 02/11/2017 - 20:09:18: [FAKEMETA] Invalid entity
L 02/11/2017 - 20:09:18: [AMXX] Displaying debug trace (plugin "deathrun_buttons_control.amxx")
L 02/11/2017 - 20:09:18: [AMXX] Run time error 10: native error (native "pev")
L 02/11/2017 - 20:09:18: [AMXX]    [0] deathrun_buttons_control.sma::RestoreButtons (line 86)
L 02/11/2017 - 20:09:18: [AMXX]    [1] deathrun_buttons_control.sma::Event_NewRound (line 78)
L 02/11/2017 - 21:00:23: Start of error session.
L 02/11/2017 - 21:00:23: Info (map "deathrun_arctic") (file "addons/amxmodx/logs/error_20170211.log")
L 02/11/2017 - 21:00:23: [FAKEMETA] Invalid entity
L 02/11/2017 - 21:00:23: [AMXX] Displaying debug trace (plugin "deathrun_buttons_control.amxx")
L 02/11/2017 - 21:00:23: [AMXX] Run time error 10: native error (native "pev")
L 02/11/2017 - 21:00:23: [AMXX]    [0] deathrun_buttons_control.sma::RestoreButtons (line 86)
L 02/11/2017 - 21:00:23: [AMXX]    [1] deathrun_buttons_control.sma::Event_NewRound (line 78)
L 02/11/2017 - 22:00:24: Start of error session.
L 02/11/2017 - 22:00:24: Info (map "deathrun_arctic") (file "addons/amxmodx/logs/error_20170211.log")
L 02/11/2017 - 22:00:24: [FAKEMETA] Invalid entity
L 02/11/2017 - 22:00:24: [AMXX] Displaying debug trace (plugin "deathrun_buttons_control.amxx")
L 02/11/2017 - 22:00:24: [AMXX] Run time error 10: native error (native "pev")
L 02/11/2017 - 22:00:24: [AMXX]    [0] deathrun_buttons_control.sma::RestoreButtons (line 86)
L 02/11/2017 - 22:00:24: [AMXX]    [1] deathrun_buttons_control.sma::Event_NewRound (line 78)
Аватара пользователя
MARSHO
 
Сообщения: 59
Зарегистрирован: 09 фев 2016, 15:39
Благодарил (а): 12 раз.
Поблагодарили: 1 раз.

Re: Deathrun Mod [Core + Modes]

Сообщение Mistrick » 12 фев 2017, 21:50

MARSHO,
Код: Выделить всё
if(pev(entpev_frame) > 0.0

->
Код: Выделить всё
if(pev_valid(ent) && pev(entpev_frame) > 0.0
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Deathrun Mod [Core + Modes]

Сообщение Ronna Riva » 13 фев 2017, 11:40

Mistrick, здравствуйте. Недавно поставил ваш мод, мне он очень понравился, спасибо вам. Но с новым режим "Мастер умений" что-то не так. В новом раунде функции режима остаются у контр-террориста, который в предыдущем раунде был террористом, включившим этот режим.
Аватара пользователя
Ronna Riva
 
Сообщения: 34
Зарегистрирован: 13 фев 2017, 11:36
Забанен
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
Опыт программирования: Больше трех лет
Языки программирования: Objective-C
C++

Re: Deathrun Mod [Core + Modes]

Сообщение MARSHO » 13 фев 2017, 21:06

Ronna Riva, как работает вообще этот режим, не подскажешь?
Аватара пользователя
MARSHO
 
Сообщения: 59
Зарегистрирован: 09 фев 2016, 15:39
Благодарил (а): 12 раз.
Поблагодарили: 1 раз.

Re: Deathrun Mod [Core + Modes]

Сообщение a1ex » 13 фев 2017, 21:19

MARSHO, террористу выдается 3 способности с помощью которых он должен помешать пройти кт карту.

Способности:
Кнопка R (Радиация) - затормаживает жертву, не важно в воздухе он или нет
Кнопка F (Огонь) - наносит всем урон
Кнопка G (Молния) - толкает всех в перед

Надеюсь все верно описал, возможно где то и ошибся, возможно что-то напутал
Аватара пользователя
a1ex
 
Сообщения: 98
Зарегистрирован: 21 авг 2012, 17:18
Откуда: Украина
Благодарил (а): 53 раз.
Поблагодарили: 21 раз.

Re: Deathrun Mod [Core + Modes]

Сообщение liFe iS GoOD » 15 фев 2017, 02:47

Mistrick, сделай какую - нибудь задержку при выдаче патрона в дуэли , ибо при зажатии ЛКМ становится очень весело :-)
Аватара пользователя
liFe iS GoOD
Модератор
 
Сообщения: 1416
Зарегистрирован: 24 май 2012, 19:48
Благодарил (а): 116 раз.
Поблагодарили: 472 раз.

Re: Deathrun Mod [Core + Modes]

Сообщение lop50956 » 15 фев 2017, 03:02

liFe iS GoOD, лучше всего в таком случае проверять на IN_ATTACK после выдачи где то в кмд старте или где то еще
Аватара пользователя
lop50956
 
Сообщения: 178
Зарегистрирован: 29 ноя 2016, 00:36
Забанен
Благодарил (а): 18 раз.
Поблагодарили: 16 раз.
Опыт программирования: Больше трех лет
Языки программирования: Php

Re: Deathrun Mod [Core + Modes]

Сообщение liFe iS GoOD » 15 фев 2017, 03:21

lop50956, можно попробовать в Ham_Weapon_PrimaryAttack Pre суперсидить , если игрок выстрели вне очереди
Код: Выделить всё
if(player != g_iDuelPlayers[g_iCurTurn])
        return HAM_SUPERCEDE
Аватара пользователя
liFe iS GoOD
Модератор
 
Сообщения: 1416
Зарегистрирован: 24 май 2012, 19:48
Благодарил (а): 116 раз.
Поблагодарили: 472 раз.

Re: Deathrun Mod [Core + Modes]

Сообщение MARSHO » 16 фев 2017, 22:49

Народ, а почему в новом раунде работают некоторые кнопки, несмотря на то что другой режим?
К примеру, на арктике в новом раунде, выбран вентиляторы не офаются никак, будь то режим рембо, мастер умений итд.
Из-за чего это и как решить?
Аватара пользователя
MARSHO
 
Сообщения: 59
Зарегистрирован: 09 фев 2016, 15:39
Благодарил (а): 12 раз.
Поблагодарили: 1 раз.

Пред.След.

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

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

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