Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

buy smoke teleport


MYGO.pl
 Udostępnij

Rekomendowane odpowiedzi

  • RSSy
hello, everyone ... I would like some help with this plugin ... I would like you to explore a way of buying it ... example "say /teleport"...for a certain amount .... since already thank you very much to all.


/* 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.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.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_NAME, PLUGIN_VERSION, PLUGIN_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(id, print_center, "Mode: %s", modetext[_:mode[id]]);
//changemode(id);

return PLUGIN_CONTINUE;
}

public fw_cmdstart(id, uc_handle, seed){
static bool:key[33] = { false, ... }

if (!IsPlayer(id) || !is_user_alive(id)) return FMRES_IGNORED

static buttons
buttons = get_uc(uc_handle, UC_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(id, print_center, "Smoke grenade")
}

case GRENADE_TELEPORT:
{
client_print(id, print_center, "Teleport Grenade")
}

default:
{
mode[id] = GRENADE_NORMAL
client_print(id, print_center, "Smoke grenade")
}
}
}

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

static id, Float:origin[3]
id = pev(ent, pev_owner);
if (!IsPlayer(id) || !is_user_alive(id)) return FMRES_IGNORED;

if(mode[id]!=GRENADE_TELEPORT)
return FMRES_IGNORED;

pev(ent, pev_origin, origin)
engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, g_sound_explosion, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_SetOrigin, ent, Float:{8191.0, 8191.0, 8191.0})
origin[2] += SMOKE_GROUND_OFFSET
create_smoke(origin)

static Float:mins[3], hull
pev(id, pev_mins, mins)
origin[2] -= mins[2] + SMOKE_GROUND_OFFSET
hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
if (is_hull_vacant(origin, hull))
engfunc(EngFunc_SetOrigin, id, origin)
else { // close to a solid object, trying to find a vacant spot
static Float:vec[3]
vec[2] = origin[2]
for (new i; i < sizeof g_sign; ++i) {
vec[0] = origin[0] - mins[0] * g_sign[0]
vec[1] = origin[1] - mins[1] * g_sign[1]
if (is_hull_vacant(vec, hull)) {
engfunc(EngFunc_SetOrigin, id, vec)
break
}
}
}

return FMRES_SUPERCEDE
}

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

static classname[sizeof g_classname_grenade + 1]
pev(ent, pev_classname, classname, sizeof g_classname_grenade)
if (equal(classname, g_classname_grenade))
return true

return false
}

create_smoke(const Float:origin[3]) {
// engfunc because origin are float
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
write_byte(TE_SMOKE)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[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_TraceHull, origin, origin, 0, hull, 0, tr)
if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true

return false
}

Przeczytaj cały wpis

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

×
×
  • Dodaj nową pozycję...