Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Проблема с световой гранатой

, Выдаёт ошибку [РЕШЕНО]
Статус пользователя giorgi_miami
сообщение 1.6.2015, 8:29
Сообщение #1
Стаж: 14 лет

Сообщений: 83
Благодарностей: 12
Полезность: 115

Здравствуйте. Пробовал исправить ошибку с световой гранатой. В логах следующее:

Код
L 12/20/2011 - 10:07:02: Start of error session.
L 12/20/2011 - 10:07:02: Info (map "bb_dust2") (file "addons/amxmodx/logs/error_20111220.log")
L 12/20/2011 - 10:07:02: [HAMSANDWICH] Invalid player 4 (not in-game)
L 12/20/2011 - 10:07:02: [AMXX] Displaying debug trace (plugin "bb_flare.amxx")
L 12/20/2011 - 10:07:02: [AMXX] Run time error 10: native error (native "get_pdata_cbase")
L 12/20/2011 - 10:07:02: [AMXX]    [0] bb_flare.sma::fm_cs_get_current_weapon_ent (line 366)
L 12/20/2011 - 10:07:02: [AMXX]    [1] bb_flare.sma::fw_PlayerSpawn_Post (line 97)


Решил добавить в Код:
fw_PlayerSpawn_Post
эту проверку:

Код:
if (!is_user_valid_connected(id)) 
return;


Но безрезультатно. Вот код:

Код:
#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <basebuilder>

// Native from cstrike.inc
// Get weapon type. Corresponds to CSW_* in amxconst.inc: 1 is CSW_P228, 2 is CSW_SCOUT and so on...
native cs_get_weapon_id(index);

new const model_grenade_flare[] = "models/bb_by_karatel/v_grenade_flare.mdl"
new const sprite_grenade_trail[] = "sprites/laserbeam.spr"
new const grenade_flare[][] = { "items/nvg_on.wav" }

// CS Player CBase Offsets (win32)
const OFFSET_ACTIVE_ITEM = 373

// CS Weapon CBase Offsets (win32)
const OFFSET_WEAPONOWNER = 41

// Linux diff's
const OFFSET_LINUX = 5 // offsets 5 higher in Linux builds
const OFFSET_LINUX_WEAPONS = 4 // weapon offsets are only 4 steps higher on Linux

// Some constants
const USE_STOPPED = 0

// HACK: pev_ field used to store custom nade types and their values
const PEV_NADE_TYPE = pev_flTimeStepSound
const NADE_TYPE_FLARE = 4444
const PEV_FLARE_COLOR = pev_punchangle
const PEV_FLARE_DURATION = pev_flSwimTime

new cvar_flaregrenades, cvar_flareduration,
cvar_flarecolor, cvar_flaresize

// Cached stuff for players
new g_isconnected[33] // whether player is connected
new g_currentweapon[33] // player's current weapon id
#define is_user_valid_connected(%1) (1 <= %1 <= get_maxplayers() && g_isconnected[%1])

// Game vars
new g_trailSpr // grenade sprites

new g_flare

public plugin_init()
{
register_plugin("ZP Flares Nades", "4.3", "MeRcyLeZZ")

register_forward(FM_SetModel, "fw_SetModel")

RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Item_Deploy, "weapon_smokegrenade", "fw_Item_Deploy_Post", 1)

cvar_flaregrenades = register_cvar("bb_flare_grenades","1")
cvar_flareduration = register_cvar("bb_flare_duration", "60")
cvar_flaresize = register_cvar("bb_flare_size", "30")
cvar_flarecolor = register_cvar("bb_flare_color", "5")

g_flare = zp_register_extra_item("Gasanatebeli Yumbara", 5, BB_TEAM_BUILDER);
}

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, model_grenade_flare)

// Custom models/sprites for grenades
g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail)

for (new i = 0; i < sizeof grenade_flare; i++)
engfunc(EngFunc_PrecacheSound, grenade_flare[i])
}

public zp_extra_item_selected(id, itemid)
{
if(itemid == g_flare) give_flaregrenade(id)
}

public give_flaregrenade(id)
{
give_item(id,"weapon_smokegrenade")
}

// Ham Player Spawn Post Forward
public fw_PlayerSpawn_Post(id)
{
if (!is_user_valid_connected(id))
return;

static weapon_ent
weapon_ent = fm_cs_get_current_weapon_ent(id)
if (pev_valid(weapon_ent)) replace_weapon_models(id, cs_get_weapon_id(weapon_ent))
}

// Ham Use Stationary Gun Post Forward
public fw_UseStationary_Post(entity, caller, activator, use_type)
{
if (!pev_valid(caller) || !g_isconnected[caller]) return HAM_IGNORED

// Someone stopped using a stationary gun
if (use_type == USE_STOPPED && is_user_valid_connected(caller))
replace_weapon_models(caller, g_currentweapon[caller]) // replace weapon models (bugfix)

return HAM_IGNORED
}

// Ham Weapon Deploy Forward
public fw_Item_Deploy_Post(weapon_ent)
{
// Get weapon's owner
static owner

owner = fm_cs_get_weapon_ent_owner(weapon_ent)

if (!pev_valid(owner) || !g_isconnected[owner]) return HAM_IGNORED

// Get weapon's id
static weaponid
weaponid = cs_get_weapon_id(weapon_ent)

// Store current weapon's id for reference
g_currentweapon[owner] = weaponid

// Replace weapon models with custom ones
replace_weapon_models(owner, weaponid)

return HAM_IGNORED
}

// WeaponMod bugfix
//forward wpn_gi_reset_weapon(id);
public wpn_gi_reset_weapon(id)
{
// Replace knife model
if (g_isconnected[id])
replace_weapon_models(id, CSW_KNIFE)
}

// Client joins the game
public client_putinserver(id)
{
// Player joined
g_isconnected[id] = true
}

// Client leaving
public fw_ClientDisconnect(id)
{
g_isconnected[id] = false
}

// Forward Set Model
public fw_SetModel(entity, const model[])
{
// We don't care
if (strlen(model) < 8)
return;

// Narrow down our matches a bit
if (model[7] != 'w' || model[8] != '_')
return;

// Get damage time of grenade
static Float:dmgtime
pev(entity, pev_dmgtime, dmgtime)

// Grenade not yet thrown
if (dmgtime == 0.0)
return;

if (model[9] == 's' && model[10] == 'm' && get_pcvar_num(cvar_flaregrenades)) // Flare
{
// Build flare's color
static rgb[3]
switch (get_pcvar_num(cvar_flarecolor))
{
case 0: // white
{
rgb[0] = 255 // r
rgb[1] = 255 // g
rgb[2] = 255 // b
}
case 1: // red
{
rgb[0] = random_num(50,255) // r
rgb[1] = 0 // g
rgb[2] = 0 // b
}
case 2: // green
{
rgb[0] = 0 // r
rgb[1] = random_num(50,255) // g
rgb[2] = 0 // b
}
case 3: // blue
{
rgb[0] = 0 // r
rgb[1] = 0 // g
rgb[2] = random_num(50,255) // b
}
case 4: // random (all colors)
{
rgb[0] = random_num(50,200) // r
rgb[1] = random_num(50,200) // g
rgb[2] = random_num(50,200) // b
}
case 5: // random (r,g,b)
{
switch (random_num(1, 3))
{
case 1: // red
{
rgb[0] = random_num(50,255) // r
rgb[1] = 0 // g
rgb[2] = 0 // b
}
case 2: // green
{
rgb[0] = 0 // r
rgb[1] = random_num(50,255) // g
rgb[2] = 0 // b
}
case 3: // blue
{
rgb[0] = 0 // r
rgb[1] = 0 // g
rgb[2] = random_num(50,255) // b
}
}
}
}

// Give it a glow
fm_set_rendering(entity, kRenderFxGlowShell, rgb[0], rgb[1], rgb[2], kRenderNormal, 16);

// And a colored trail
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(entity) // entity
write_short(g_trailSpr) // sprite
write_byte(10) // life
write_byte(10) // width
write_byte(rgb[0]) // r
write_byte(rgb[1]) // g
write_byte(rgb[2]) // b
write_byte(200) // brightness
message_end()

// Set grenade type on the thrown grenade entity
set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_FLARE)

// Set flare color on the thrown grenade entity
set_pev(entity, PEV_FLARE_COLOR, rgb)
}
}

// Ham Grenade Think Forward
public fw_ThinkGrenade(entity)
{
// Invalid entity
if (!pev_valid(entity)) return HAM_IGNORED;

// Get damage time of grenade
static Float:dmgtime, Float:current_time
pev(entity, pev_dmgtime, dmgtime)
current_time = get_gametime()

// Check if it's time to go off
if (dmgtime > current_time)
return HAM_IGNORED;

// Check if it's one of our custom nades
if (pev(entity, PEV_NADE_TYPE) != NADE_TYPE_FLARE)
return HAM_IGNORED;

// Get its duration
static duration
duration = pev(entity, PEV_FLARE_DURATION)

// Already went off, do lighting loop for the duration of PEV_FLARE_DURATION
if (duration > 0)
{
// Check whether this is the last loop
if (duration == 1)
{
// Get rid of the flare entity
engfunc(EngFunc_RemoveEntity, entity)
return HAM_SUPERCEDE;
}

// Light it up!
flare_lighting(entity, duration)

// Set time for next loop
set_pev(entity, PEV_FLARE_DURATION, --duration)
set_pev(entity, pev_dmgtime, current_time + 5.0)
}
// Light up when it's stopped on ground
else if ((pev(entity, pev_flags) & FL_ONGROUND) && fm_get_speed(entity) < 10)
{
// Flare sound
engfunc(EngFunc_EmitSound, entity, CHAN_WEAPON, grenade_flare[random_num(0, sizeof grenade_flare - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)

// Set duration and start lightning loop on next think
set_pev(entity, PEV_FLARE_DURATION, 1 + get_pcvar_num(cvar_flareduration)/5)
set_pev(entity, pev_dmgtime, current_time + 0.1)
}
else
{
// Delay explosion until we hit ground
set_pev(entity, pev_dmgtime, current_time + 0.5)
}

return HAM_IGNORED;
}

// Set Custom Weapon Models
replace_weapon_models(id, weaponid)
{
if (weaponid != CSW_SMOKEGRENADE
|| !get_pcvar_num(cvar_flaregrenades))
return;

set_pev(id, pev_viewmodel2, model_grenade_flare)
}

// Flare Lighting Effects
flare_lighting(entity, duration)
{
// Get origin and color
static Float:originF[3], color[3]
pev(entity, pev_origin, originF)
pev(entity, PEV_FLARE_COLOR, color)

// Lighting
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_DLIGHT) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(get_pcvar_num(cvar_flaresize)) // radius
write_byte(color[0]) // r
write_byte(color[1]) // g
write_byte(color[2]) // b
write_byte(51) //life
write_byte((duration < 2) ? 3 : 0) //decay rate
message_end()

// Sparks
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_SPARKS) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
message_end()
}

// Get User Current Weapon Entity
stock fm_cs_get_current_weapon_ent(id)
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);

// Get Weapon Entity's Owner
stock fm_cs_get_weapon_ent_owner(ent)
return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);

// Set entity's rendering type (from fakemeta_util)
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float®
color[1] = float(g)
color[2] = float(b)

set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}

// Get entity's speed (from fakemeta_util)
stock fm_get_speed(entity)
{
static Float:velocity[3]
pev(entity, pev_velocity, velocity)

return floatround(vector_length(velocity));
}


Благодарен за любую помощь.

Отредактировал: giorgi_miami, - 1.6.2015, 8:30
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя csnet
сообщение 1.6.2015, 9:10
Сообщение #2
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

почему просто не использовать (!is_user_alive(id)), а потом уже макрос


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 1.6.2015, 9:46
Сообщение #3


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

На всякий пожарный, замени в коде
Код:
// Get User Current Weapon Entity
stock fm_cs_get_current_weapon_ent(id)
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);

// Get Weapon Entity's Owner
stock fm_cs_get_weapon_ent_owner(ent)
return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
---->
Код:

const PDATA_SAFE = 2

// Get User Current Weapon Entity
stock fm_cs_get_current_weapon_ent(id)
{
if(pev_valid(id) != PDATA_SAFE)
return -1;

return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);
}

// Get Weapon Entity's Owner
stock fm_cs_get_weapon_ent_owner(ent)
{
if(pev_valid(ent) != PDATA_SAFE)
return -1;

return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
}


Отредактировал: Fintok, - 1.6.2015, 9:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: