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

Граната заморозка и граната телепорт

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

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

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

Граната заморозка и граната телепорт

Сообщение dvahitov95 » 16 авг 2017, 21:35

Всем привет. Хочется на сервер установить гранату заморозку и гранату телепорт, но в обоих исходниках используется замена дымовой гранаты и поэтому работает только 1 из плагинов. Как сделать, чтобы оба работали?

Код: Выделить всё
/* AMX Mod X
*   Teleport Smoke Grenade
*
* (c) Copyright 2006 by VEN
*
* This file is provided as is (no warranties)
*
*     DESCRIPTION
*       Plugin changes the smoke grenade to teleport grenade with a bit of smoke.
*       Usage: drop the grenade, you will be teleported to the spot of explosion.
*       Try to crouch if the height of the spot are small for uncrouched player.
*
*     CREDITS
*       Dread Pirate - idea
*/

#include <amxmodx>
#include <fakemeta>
#include <cstrike>

#define PLUGIN_NAME "Smoke Grenade Modes"
#define PLUGIN_VERSION "0.2"
#define PLUGIN_AUTHOR "VEN"

#define SMOKE_SCALE 30
#define SMOKE_FRAMERATE 12
#define SMOKE_GROUND_OFFSET 6

#define IsPlayer(%1)  (1 <= %1 <= gMaxClients)

// do not edit
new const g_sound_explosion[] = "weapons/sg_explode.wav"
new const g_classname_grenade[] = "grenade"

new const Float:g_sign[4][2] = {{1.01.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.01.0}}

new 
g_spriteid_steam1;
//new g_eventid_createsmoke;
new gMaxClients;

enum GrenadeType{
    
GRENADE_NORMAL,
    
GRENADE_TELEPORT
}

new 
GrenadeType:mode[33] = { GRENADE_NORMAL, ... }
new 
modetext[][] = {"Smoke grenade""Teleport Grenade"}

public 
plugin_init(){
    
register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR)

    
register_forward(FM_EmitSound"forward_emitsound")
    
register_event("CurWeapon""armnade""b""1=1""2=9");
    
register_forward(FM_CmdStart"fw_cmdstart");
    
    
gMaxClients get_maxplayers();

    
// we do not precaching, but retrieving the indexes
    
g_spriteid_steam1 engfunc(EngFunc_PrecacheModel"sprites/steam1.spr")
    
//g_eventid_createsmoke = engfunc(EngFunc_PrecacheEvent, 1, "events/createsmoke.sc")
}

public 
armnade(id){
    if(
IsPlayer(id) && is_user_alive(id))
        
client_print(idprint_center"Mode: %s"modetext[_:mode[id]]);
    
//changemode(id);
    
    
return PLUGIN_CONTINUE;
}

public 
fw_cmdstart(iduc_handleseed){
    static 
bool:key[33] = { false, ... }
    
    if (!
IsPlayer(id) || !is_user_alive(id)) return FMRES_IGNORED
    
    
static buttons
    buttons 
get_uc(uc_handleUC_Buttons)
    
    if ((
buttons IN_ATTACK2))
    {
        if (!
key[id])
        {
            if (
get_user_weapon(id) == CSW_SMOKEGRENADE)
            {
                
changemode(id)
            }
        }
        
key[id] = true
    
}
    else
    {
        
key[id] = false
    
}
    return 
FMRES_IGNORED
}

public 
changemode(id){
    if (!
IsPlayer(id) || !is_user_alive(id)) return;
    if(
cs_get_user_shield(id))
        return;
    
    
/*if(false)// mode enabled
    {
        changemode(id)
        return
    }*/
    
++mode[id];
    
    switch (
mode[id])
    {
        case 
GRENADE_NORMAL:
        {
            
client_print(idprint_center"Smoke grenade")
        }
        
        case 
GRENADE_TELEPORT:
        {
            
client_print(idprint_center"Teleport Grenade")
        }
        
        default:
        {
            
mode[id] = GRENADE_NORMAL
            client_print
(idprint_center"Smoke grenade")
        }
    }
}

public 
forward_emitsound(entchannel, const sound[]) {
    if (!
pev_valid(ent) || !equal(soundg_sound_explosion) || !is_grenade(ent))
        return 
FMRES_IGNORED;

    static 
idFloat:origin[3]
    
id pev(entpev_owner);
    if (!
IsPlayer(id) || !is_user_alive(id)) return FMRES_IGNORED;
    
    if(
mode[id]!=GRENADE_TELEPORT)
        return 
FMRES_IGNORED;
    
    
pev(entpev_originorigin)
    
engfunc(EngFunc_EmitSoundentCHAN_WEAPONg_sound_explosionVOL_NORMATTN_NORM0PITCH_NORM)
    
engfunc(EngFunc_SetOriginentFloat:{8191.08191.08191.0})
    
origin[2] += SMOKE_GROUND_OFFSET
    create_smoke
(origin)

    static 
Float:mins[3], hull
    pev
(idpev_minsmins)
    
origin[2] -= mins[2] + SMOKE_GROUND_OFFSET
    hull 
pev(idpev_flags) & FL_DUCKING HULL_HEAD HULL_HUMAN
    
if (is_hull_vacant(originhull))
        
engfunc(EngFunc_SetOriginidorigin)
    else { 
// close to a solid object, trying to find a vacant spot
        
static Float:vec[3]
        
vec[2] = origin[2]
        for (new 
isizeof g_sign; ++i) {
            
vec[0] = origin[0] - mins[0] * g_sign[i][0]
            
vec[1] = origin[1] - mins[1] * g_sign[i][1]
            if (
is_hull_vacant(vechull)) {
                
engfunc(EngFunc_SetOriginidvec)
                break
            }
        }
    }

    return 
FMRES_SUPERCEDE
}

bool:is_grenade(ent) {
    if (!
pev_valid(ent))
        return 
false

    
static classname[sizeof g_classname_grenade 1]
    
pev(entpev_classnameclassnamesizeof g_classname_grenade)
    if (
equal(classnameg_classname_grenade))
        return 
true

    
return false
}

create_smoke(const Float:origin[3]) {
    
// engfunc because origin are float
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYorigin0)
    
write_byte(TE_SMOKE)
    
engfunc(EngFunc_WriteCoordorigin[0])
    
engfunc(EngFunc_WriteCoordorigin[1])
    
engfunc(EngFunc_WriteCoordorigin[2])
    
write_short(g_spriteid_steam1)
    
write_byte(SMOKE_SCALE)
    
write_byte(SMOKE_FRAMERATE)
    
message_end()
}

stock bool:is_hull_vacant(const Float:origin[3], hull) {
    new 
tr 0
    engfunc
(EngFunc_TraceHulloriginorigin0hull0tr)
    if (!
get_tr2(trTR_StartSolid) && !get_tr2(trTR_AllSolid) && get_tr2(trTR_InOpen))
        return 
true
    
    
return false
}
 
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Граната заморозка и граната телепорт

Сообщение артист666 » 16 авг 2017, 22:15

"Повесить" одну из нах на другую гранату.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Граната заморозка и граната телепорт

Сообщение dvahitov95 » 16 авг 2017, 22:31

артист666 писал(а):"Повесить" одну из нах на другую гранату.

А если мне другие гранаты нужны?
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Граната заморозка и граната телепорт

Сообщение Arsonist » 16 авг 2017, 22:43

dvahitov95, добавлять слоты, например, как на зм.
Аватара пользователя
Arsonist
 
Сообщения: 53
Зарегистрирован: 29 сен 2013, 19:15
Откуда: Россия, Уфа
Благодарил (а): 23 раз.
Поблагодарили: 15 раз.
Опыт программирования: Около года
Языки программирования: C#
Pawn

Re: Граната заморозка и граната телепорт

Сообщение dvahitov95 » 16 авг 2017, 22:49

Arsonist писал(а):dvahitov95, добавлять слоты, например, как на зм.

Как понять "слоты"?
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Граната заморозка и граната телепорт

Сообщение артист666 » 16 авг 2017, 23:22

Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Граната заморозка и граната телепорт

Сообщение dvahitov95 » 17 авг 2017, 12:49

артист666 писал(а):"Повесить" одну из нах на другую гранату.

А если на флэшку повесить, то как? Там по какому способу привязка к дымовой вообще? В интернете искал, там пишут, что через звук дымовой привязка
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Граната заморозка и граната телепорт

Сообщение RevCrew » 17 авг 2017, 16:05

Код: Выделить всё
// do not edit
new const g_sound_explosion[] = "weapons/sg_explode.wav"
new const g_classname_grenade[] = "grenade" 

Да, вы правы
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Граната заморозка и граната телепорт

Сообщение артист666 » 17 авг 2017, 18:11

dvahitov95 писал(а):А если на флэшку повесить, то как? Там по какому способу привязка к дымовой вообще? В интернете искал, там пишут, что через звук дымовой привязка


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

Создать гранату легко, не знаю на кой вообще на стандартной это делать.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Граната заморозка и граната телепорт

Сообщение Pafos » 17 авг 2017, 22:25

dvahitov95, сделай на бомбу :D
Аватара пользователя
Pafos
 
Сообщения: 574
Зарегистрирован: 07 апр 2014, 18:03
Откуда: pfnClientConnect
Забанен
Благодарил (а): 129 раз.
Поблагодарили: 97 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

След.

Вернуться в Вопросы по AMXX и его плагинам

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

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