PHP Code:
/* - - - - - - - - - - -
AMX Mod X script.
| Author : Arkshine
| Plugin : WPN Squeak Grenade
| Version : v1.0.6 - without WM.
(!) Support : http://forums.alliedmods.net/showthread.php?t=93659
(!) Version without WeaponMod required and for Zombie Plague.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at
your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Description :
- - - - - - -
Basically, it's almost the same weapon that you can see in Half-life 1.
Snarks are small, red, and bulbous, with a large (in relation to body porportion)
single green eye and a large pincer-like mandible. Snarks are normally calm creatures
that show little signs of intelligence, but if they see any living creature other
than another Snark, they immediately begin to attack it. They attack aggressively,
persistently, and erratically, leaping and biting at their target.
A full description can be found here : http://half-life.wikia.com/wiki/Snark .
Requirement :
- - - - - - -
* CS 1.6 / CZ.
* AMX Mod X 1.8.x or higher.
Changelog :
- - - - - -
v1.0.6 : [ 11 jul 2009 ]
(+) Initial release.
Credits :
- - - - -
* HLSDK
* DevconeS
* VEN
* Sproily ( Alternative models )
- - - - - - - - - - - */
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <engine>
#include <fun>
#include <zombieplague>
#define Plugin "[ZP] Extra: Squeak Grenade"
#define Version "1.0.6-wwm"
#define Author "Arkshine"
// --| Zombie Plaque: Extra item configuration.
#define ZP_EXTRA_ITEM_NAME "Snark INFECTOR"
#define ZP_EXTRA_ITEM_COST 14
// --| Comment if you want to use the default model from valve.
#define ALTERNATIVE_MODEL
// --| Snark trail.
#define TRAIL_LIFE 40 // Life
#define TRAIL_WIDTH 4 // Width
#define TRAIL_RED 10 // Red
#define TRAIL_GREEN 224 // Red
#define TRAIL_BLUE 10 // Green
#define TRAIL_BRIGTHNESS 200 // Blue
/* - - -
| WEAPON MODELS |
- - - */
#if !defined ALTERNATIVE_MODEL
new const gModel_P[] = "models/p_squeak.mdl";
new const gModel_V[] = "models/v_squeak.mdl";
#else
new const gModel_P[] = "models/p_alt_squeak.mdl";
new const gModel_V[] = "models/v_alt_squeak_gflip.mdl";
#endif
/* - - -
| SNARK SOUNDS |
- - - */
new const gSnarkHunt1Sound [] = "squeek/sqk_hunt1.wav";
new const gSnarkHunt2Sound [] = "squeek/sqk_hunt2.wav";
new const gSnarkHunt3Sound [] = "squeek/sqk_hunt3.wav";
new const gSnarkDieSound [] = "squeek/sqk_die1.wav";
new const gSnarkAttackSound [] = "squeek/sqk_deploy1.wav";
new const gSnarkBlastSound [] = "weapons/sqk_blast2.wav";
new const gSnarkBodySplatSound[] = "common/bodysplat.wav";
/* - - -
| SNARK MODEL |
- - - */
new
#if !defined ALTERNATIVE_MODEL
gSnarkModel[] = "models/w_squeak.mdl";
#else
gSnarkModel[] = "models/w_alt_squeak.mdl";
#endif
/* - - -
| SEQUENCE |
- - - */
enum
{
wsqueak_idle1,
wsqueak_fidget,
wsqueak_jump,
wsqueak_run
};
enum
{
squeak_idle1,
squeak_fidgetfit,
squeak_fidgetnip,
squeak_down,
squeak_up,
squeak_throw
};
/* - -
| CONSTANTS |
- - */
const BLOOD_COLOR_RED = 247;
const BLOOD_COLOR_YELLOW = 195;
const
MAX_CLIENTS = 32;
const MAX_KNIFE_MODEL_LENGTH = 128;
const NONE = -1;
const NULL_ENT = 0;
enum _:Coord_e
{
Float:x,
Float:y,
Float:z
};
enum _:Angle_e
{
Float:Pitch,
Float:Yaw,
Float:Roll
};
enum
{
HuntThink = 1,
SuperBounceTouch,
RemoveSnark
};
new const
Float:gHullMin [ Coord_e ] = { -16.0, -16.0, -36.0 };
new const Float:gDuckHullMin[ Coord_e ] = { -16.0, -16.0, -18.0 };
new const
gWeaponCommand [] = "weapon_hegrenade";
new const gWeaponIndex = CSW_HEGRENADE;
new const
gGenericEntity [] = "info_target";
new const gSnarkClassName[] = "wpn_snark";
/* - - - -
| PLAYER/WEAPON OFFSETS |
- - - - */
const m_flNextAttack = 83 // Player.
const m_pActiveWeapon = 373; // Player.
const m_pPlayer = 41; // Weapon.
const m_flNextPrimaryAttack = 46; // Weapon.
/* - - -
| CUSTOM FIELD |
- - - */
#define pev_NextHunt pev_fuser1
#define pev_NextBounceSoundTime pev_fuser2
#define pev_NextHit pev_fuser3
#define pev_NextAttack pev_fuser4
#define pev_DetonateDelay pev_ltime
#define pev_RealOwner pev_iuser1
#define pev_Remove pev_iuser2
#define pev_EnemyTarget pev_vuser1
#define pev_PosPrev pev_vuser2
/* - - -
| CVAR POINTER |
- - - */
new pCvarAmmo;
new pCvarRefireRate;
new pCvarHealth;
new pCvarVelocity;
new pCvarDamagePop;
new pCvarDamageRadius;
new pCvarGravity;
new pCvarFriction;
new pCvarDetonateDelay;
new pCvarFieldOfView;
new pCvarShowTrail;
/* - - - -
| SPRITES/MODELS INDEX |
- - - - */
new gBloodSpray;
new gBloodDrop;
new gSmokeTrail;
/* - - - -
| OTHERS STUFFS |
- - - */
new bool:gHasSnark [ MAX_CLIENTS + 1 char ];
new bool:gWeaponActive[ MAX_CLIENTS + 1 char ];
new bool:gJustThrown [ MAX_CLIENTS + 1 char ];
new
Float:gNextShot [ MAX_CLIENTS + 1 ];
new Float:gTimeWeaponIdle[ MAX_CLIENTS + 1 ];
new
gPlayerAmmo[ MAX_CLIENTS + 1 char ];
new const
gSnarkHealthReference = 10000;
new gSnarkClassNameReference;
new gMaxEntities;
new gMaxClients;
new gMsgidAmmoX;
new gSnarInfector;
new bool:armor[33],bool:is_alive[33],bool:is_connected[33],bool:is_bot[33],g_MaxPlayers;
/* - -
| MACROS |
- - */
#define VectorSubtract(%1,%2,%3) ( %3[ x ] = %1[ x ] - %2[ x ], %3[ y ] = %1[ y ] - %2[ y ], %3[ z ] = %1[ z ] - %2[ z ] )
#define VectorAdd(%1,%2,%3) ( %3[ x ] = %1[ x ] + %2[ x ], %3[ y ] = %1[ y ] + %2[ y ], %3[ z ] = %1[ z ] + %2[ z ] )
#define VectorCopy(%1,%2) ( %2[ x ] = %1[ x ], %2[ y ] = %1[ y ], %2[ z ] = %1[ z ] )
#define VectorScale(%1,%2,%3) ( %3[ x ] = %2 * %1[ x ], %3[ y ] = %2 * %1[ y ], %3[ z ] = %2 * %1[ z ] )
#define VectorMA(%1,%2,%3,%4) ( %4[ x ] = %1[ x ] + %2 * %3[ x ], %4[ y ] = %1[ y ] + %2 * %3[ y ], %4[ z ] = %1[ z ] + %2 * %3[ z ] )
#define VectorMS(%1,%2,%3,%4) ( %4[ x ] = %1[ x ] - %2 * %3[ x ], %4[ y ] = %1[ y ] - %2 * %3[ y ], %4[ z ] = %1[ z ] - %2 * %3[ z ] )
#define VectorLength(%1) ( floatsqroot ( %1[ x ] * %1[ x ] + %1[ y ] * %1[ y ] + %1[ z ] * %1[ z ] ) )
#define VectorEqual(%1,%2) ( %1[ x ] == %2[ x ] && %1[ y ] == %2[ y ] && %1[ z ] == %2[ z ] )
#define DotProduct(%1,%2) ( %1[ x ] * %2[ x ]+ %1[ y ] * %2[ y ] + %1[ z ] * %2[ z ] )
#define message_begin_f(%1,%2,%3) ( engfunc ( EngFunc_MessageBegin, %1, %2, %3 ) )
#define write_coord_f(%1) ( engfunc ( EngFunc_WriteCoord, %1 ) )
//connect valid?
#define is_user_valid_connected(%1) (1 <= %1 <= g_MaxPlayers && is_connected[%1])
public plugin_precache ()
{
// --| Weapon models.
precache_model( gModel_P );
precache_model( gModel_V );
// --| Snark model.
precache_model( gSnarkModel );
// --| Snark sounds.
precache_sound( gSnarkBlastSound );
precache_sound( gSnarkBodySplatSound );
precache_sound( gSnarkDieSound );
precache_sound( gSnarkHunt1Sound );
precache_sound( gSnarkHunt2Sound );
precache_sound( gSnarkHunt3Sound );
precache_sound( gSnarkAttackSound );
gBloodSpray = precache_model( "sprites/bloodspray.spr" ); // initial blood
gBloodDrop = precache_model( "sprites/blood.spr" ); // splattered blood
}
public
plugin_init ()
{
register_plugin( Plugin, Version, Author );
register_cvar( "zp_snark_version", Version, FCVAR_SERVER | FCVAR_SPONLY );
gSnarInfector = zp_register_extra_item( ZP_EXTRA_ITEM_NAME, ZP_EXTRA_ITEM_COST, ZP_TEAM_ZOMBIE );
g_MaxPlayers = get_maxplayers()
pCvarAmmo = register_cvar( "wpn_sg_ammo" , "5" );
pCvarRefireRate = register_cvar( "wpn_sg_refire_rate" , "0.3" );
pCvarHealth = register_cvar( "wpn_sg_health" , "10" );
pCvarVelocity = register_cvar( "wpn_sg_velocity" , "5" );
pCvarDamagePop = register_cvar( "wpn_sg_damage_pop" , "10" );
pCvarDamageRadius = register_cvar( "wpn_sg_damage_radius" , "15" );
pCvarGravity = register_cvar( "wpn_sg_gravity" , "0.5" );
pCvarFriction = register_cvar( "wpn_sg_friction" , "0.5" );
pCvarDetonateDelay = register_cvar( "wpn_sg_detonate_delay" , "15" );
pCvarFieldOfView = register_cvar( "wpn_sg_fov" , "0" );
pCvarShowTrail = register_cvar( "wpn_sg_show_trail" , "1" );
RegisterHam( Ham_Item_Deploy , gWeaponCommand, "CSqueak_Deploy", 1 );
RegisterHam( Ham_Item_Holster, gWeaponCommand, "CSqueak_Holster", 1 );
RegisterHam( Ham_TakeDamage, gGenericEntity, "CSqueak_TakeDamage", 1 );
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
register_forward(FM_ClientDisconnect, "fw_ClientDisconnect")
register_forward( FM_CmdStart, "CSqueak_HookButtons" );
register_forward( FM_PlayerPreThink, "CSqueak_WeaponIdle" );
register_think( gSnarkClassName, "CSqueak_HuntThink" );
register_touch( gSnarkClassName, "*", "CSqueak_SuperBounceTouch" );
// register_clcmd( "say test", "CSqueak_GiveWeapon" );
gMaxEntities = global_get( glb_maxEntities );
gMaxClients = global_get( glb_maxClients );
gSnarkClassNameReference = engfunc( EngFunc_AllocString, gSnarkClassName );
gMsgidAmmoX = get_user_msgid( "AmmoX" );
if (
get_pcvar_num( pCvarShowTrail ) )
{
gSmokeTrail = engfunc( EngFunc_PrecacheModel, "sprites/smoke.spr" );
}
}
// Client joins the game
public client_putinserver(id)
{
// Player joined
is_connected[id] = true
if (!is_user_bot(id)){
is_bot[id] = false
}else{
is_bot[id] = true
}
}
// Client leaving
public fw_ClientDisconnect(id)
{
is_connected[id] = false
is_alive[id] = false
}
public fw_PlayerSpawn_Post(id)
{
// Not alive or didn't join a team yet
if (!is_user_alive(id) || !cs_get_user_team(id))
return;
// Player spawned
is_alive[id] = true
}
public fw_PlayerKilled(victim, attacker, shouldgib)
{
//player die
is_alive[victim] = false
}
public
zp_extra_item_selected ( Player, ItemId )
{
if ( ItemId == gSnarInfector )
{
CSqueak_GiveWeapon ( Player );
}
}
public
zp_round_ended ( WinTeam )
{
new Snark = -1;
while ( (
Snark = find_ent_by_class( Snark, gSnarkClassName ) ) != NULL_ENT )
{
CSqueak_Killed ( Snark, 0, true );
}
for ( new
Player = 1; Player <= gMaxClients; Player++ )
{
CheckAndRemoveWeapon ( Player );
}
}
public
zp_round_started ( GameMod, Player )
{
if(is_bot[Player] || !is_alive[Player] || !cs_get_user_team(Player) ) return PLUGIN_CONTINUE
if ( !zp_get_user_zombie( Player ) )
{
CheckAndRemoveWeapon ( Player );
}
return PLUGIN_CONTINUE
}
public
zp_user_humanized_pre( Player, Survivor )
{
CheckAndRemoveWeapon ( Player );
}
stock CheckAndRemoveWeapon ( const Player )
{
if ( user_has_weapon( Player, gWeaponIndex ) )
{
RemoveWeapon ( Player, get_user_weapon( Player ) == gWeaponIndex ?
get_pdata_cbase( Player, m_pActiveWeapon ) :
find_ent_by_owner ( -1, gWeaponCommand, Player ) );
}
return PLUGIN_CONTINUE
}
public
client_connect ( Player )
{
gHasSnark { Player } = false;
gWeaponActive{ Player } = false;
gJustThrown { Player } = false;
gPlayerAmmo { Player } = get_pcvar_num( pCvarAmmo );
}
public
CSqueak_GiveWeapon( const Player )
{
gHasSnark{ Player } = true;
gPlayerAmmo{ Player } = get_pcvar_num( pCvarAmmo );
give_item( Player, gWeaponCommand );
engclient_cmd( Player, gWeaponCommand );
}
public
CSqueak_PrimaryAttack ( const Player )
{
static Float:VAngle [ Angle_e ];
static Float:Origin [ Coord_e ];
static Float:TraceOrigin[ Coord_e ];
static Float:Forward [ Coord_e ];
static Float:Start [ Coord_e ];
static Float:End [ Coord_e ];
static Float:EndPos [ Coord_e ];
static Float:Velocity [ Coord_e ];
static Float:Fraction;
if (
gPlayerAmmo{ Player } )
{
if ( pev( Player, pev_waterlevel ) >= 3 )
{
emit_sound( Player, CHAN_WEAPON, gSnarkDieSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM + 5 );
gNextShot[ Player ] = get_gametime() + get_pcvar_float( pCvarRefireRate );
return PLUGIN_HANDLED;
}
pev( Player, pev_origin, Origin );
pev( Player, pev_v_angle, VAngle );
pev( Player, pev_velocity, Velocity );
engfunc( EngFunc_MakeVectors, VAngle );
VectorCopy( Origin, TraceOrigin );
if (
pev( Player, pev_flags ) & FL_DUCKING )
{
TraceOrigin[ x ] = TraceOrigin[ x ] - ( gHullMin[ x ] - gDuckHullMin[ x ] );
TraceOrigin[ y ] = TraceOrigin[ y ] - ( gHullMin[ y ] - gDuckHullMin[ y ] );
TraceOrigin[ z ] = TraceOrigin[ z ] - ( gHullMin[ z ] - gDuckHullMin[ z ] );
}
global_get( glb_v_forward, Forward );
VectorMA ( TraceOrigin, 20.0, Forward, Start );
VectorMA ( TraceOrigin, 64.0, Forward, End );
engfunc( EngFunc_TraceLine, Start, End, DONT_IGNORE_MONSTERS, NULL_ENT, 0 );
get_tr2( 0, TR_Fraction, Fraction );
get_tr2( 0, TR_vecEndPos, EndPos );
if ( !
get_tr2( 0, TR_AllSolid ) && !get_tr2( 0, TR_StartSolid ) && Fraction > 0.25 )
{
// --| Play the throw animation.
UTIL_PlayWeaponAnimation ( Player, squeak_throw );
// --| player "shoot" animation
//
VectorMA ( Velocity, get_pcvar_float( pCvarVelocity ), Forward, Velocity );
if (
CSqueak_Create ( Player, EndPos, VAngle, Velocity ) )
{
new Float:CurrentTime = get_gametime();
switch (
random_num( 0, 2 ) )
{
case 0: emit_sound( Player, CHAN_WEAPON, gSnarkHunt1Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( Player, CHAN_WEAPON, gSnarkHunt2Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( Player, CHAN_WEAPON, gSnarkHunt3Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
}
gPlayerAmmo{ Player }--;
gJustThrown{ Player } = true;
UpdateHud ( Player );
gNextShot[ Player ] = CurrentTime + get_pcvar_float( pCvarRefireRate );
gTimeWeaponIdle[ Player ] = CurrentTime + 1.0;
return
PLUGIN_CONTINUE;
}
}
}
return
PLUGIN_HANDLED;
}
public
CSqueak_Deploy ( const Weapon )
{
// --| Get the knife's owner index.
new Player = get_pdata_cbase( Weapon, m_pPlayer, 4 );
if (
Player && gHasSnark{ Player } )
{
// --| Change knife to snark weapon.
ChangeWeaponToSnark ( Player );
// --| Play the deploy animation.
UTIL_PlayWeaponAnimation ( Player, squeak_up );
emit_sound ( Weapon, CHAN_VOICE , random_float ( 0.0, 1.0 ) <= 0.5 ? gSnarkHunt2Sound : gSnarkHunt3Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
// --| Block the primary attack.
set_pdata_float( Weapon, m_flNextPrimaryAttack, 9999.0, 4 );
set_pdata_float( Player, m_flNextAttack, 9999.0 );
// --| Update Ammo on HUD.
UpdateHud ( Player );
// --| We are holding the weapon.
gWeaponActive{ Player } = true;
}
}
public
CSqueak_Holster ( const Weapon )
{
// --| Get the knife's owner index.
new Player = get_pdata_cbase( Weapon, m_pPlayer, 4 );
if (
Player && gHasSnark{ Player } && gWeaponActive{ Player } )
{
// --| We are not holding the weapon anymore.
gWeaponActive{ Player } = false;
set_pdata_float( Player, m_flNextAttack, get_gametime() + 0.5 );
if ( !
gPlayerAmmo{ Player } && user_has_weapon( Player, gWeaponIndex ) )
{
RemoveWeapon ( Player, get_pdata_cbase( Player, m_pActiveWeapon ) );
}
else
{
// --| Play the holster animation.
UTIL_PlayWeaponAnimation ( Player, squeak_down );
emit_sound( Player, CHAN_WEAPON, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
}
}
}
public
CSqueak_Killed ( const Snark, const Killer, const bool:ShouldGib )
{
new Float:Direction[ Coord_e ];
new Float:Origin [ Coord_e ];
pev( Snark, pev_origin, Origin );
set_pev( Snark, pev_model, 0 );
set_pev( Snark, pev_Remove, RemoveSnark );
set_pev( Snark, pev_DetonateDelay, get_gametime() + 0.1 );
set_pev( Snark, pev_takedamage, DAMAGE_NO );
emit_sound( Snark, CHAN_ITEM, gSnarkBlastSound, VOL_NORM, ATTN_NORM / 2, 0, PITCH_NORM );
emit_sound( Snark, CHAN_VOICE, gSnarkBodySplatSound, 0.75, ATTN_NORM, 0, PITCH_NORM * 2 );
UTIL_RandomBloodVector( Direction );
FX_BloodDrips ( Origin, BLOOD_COLOR_YELLOW, .Amount = 60 );
FX_StreakSplash ( Origin, Direction, .Color = 5, .Count = 16, .Speed = 50, .VelocityRange = 200 );
UTIL_RadiusDamage ( Origin, Snark, pev( Snark, pev_RealOwner ), get_pcvar_float( pCvarDamagePop ), get_pcvar_float( pCvarDamageRadius ), DMG_BLAST );
}
/* public CZombie_Killed ( const Zombie, const Human, const bool:ShouldGid )
{
if ( zp_get_user_zombie( Zombie ) && gHasSnark{ Zombie } )
{
}
} */
public CSqueak_TakeDamage ( const Snark, const Inflictor, const Attacker, const Float:Damage, const DamageBits )
{
if ( is_valid_ent( Snark ) && pev( Snark, pev_groupinfo ) == gSnarkClassNameReference )
{
if ( pev( Snark, pev_health ) - gSnarkHealthReference <= 0 )
{
CSqueak_Killed ( Snark, Attacker, .ShouldGib = true );
}
}
}
public
CSqueak_HookButtons ( const Player, const UC_Handle, const Seed )
{
static Float:CurrentTime;
static Buttons;
if (
gHasSnark{ Player } && gWeaponActive{ Player } && ( Buttons = get_uc( UC_Handle, UC_Buttons ) ) & IN_ATTACK )
{
CurrentTime = get_gametime();
if (
gNextShot[ Player ] > CurrentTime )
{
return FMRES_HANDLED;
}
if (
CSqueak_PrimaryAttack ( Player ) == PLUGIN_HANDLED )
{
return FMRES_HANDLED;
}
set_uc( UC_Handle, UC_Buttons, Buttons & ~IN_ATTACK );
return FMRES_HANDLED;
}
return
FMRES_IGNORED;
}
const
g_armor_amount = 50
const g_armor_limit = 999
public CSqueak_HuntThink ( const Snark )
{
if ( !is_valid_ent( Snark ) )
{
return HAM_IGNORED;
}
static Float:Origin [ Coord_e ];
static Float:Velocity[ Coord_e ];
static Float:Angles [ Coord_e ];
static Float:Flat [ Coord_e ];
static Float:CurrentTime;
static Float:DieDelay;
static Float:NextHunt;
static Float:SPitch;
static Enemy;
pev( Snark, pev_velocity, Velocity );
pev( Snark, pev_origin, Origin );
if ( !
UTIL_IsInWorld ( Origin, Velocity ) )
{
set_pev( Snark, pev_flags, pev( Snark, pev_flags ) | FL_KILLME );
return HAM_IGNORED;
}
CurrentTime = get_gametime();
set_pev( Snark, pev_nextthink, CurrentTime + 0.1 );
pev( Snark, pev_NextHunt, NextHunt );
pev( Snark, pev_DetonateDelay, DieDelay );
pev( Snark, pev_angles, Angles );
if (
CurrentTime >= DieDelay )
{
if ( pev( Snark, pev_Remove ) )
{
set_pev( Snark, pev_flags, pev( Snark, pev_flags ) | FL_KILLME );
return HAM_IGNORED;
}
set_pev( Snark, pev_health, -1.0 );
CSqueak_Killed ( Snark, 0, true );
return HAM_IGNORED;
}
if (
pev( Snark, pev_waterlevel ) != 0 )
{
if ( pev( Snark, pev_movetype ) == MOVETYPE_BOUNCE )
{
set_pev( Snark, pev_movetype, MOVETYPE_FLY );
}
VectorScale ( Velocity, 0.9, Velocity );
Velocity[ z ] += 8.0;
set_pev( Snark, pev_velocity, Velocity );
}
else if ( pev( Snark, pev_movetype ) == MOVETYPE_FLY )
{
set_pev( Snark, pev_movetype, MOVETYPE_BOUNCE );
}
if (
NextHunt > CurrentTime )
{
return HAM_IGNORED;
}
set_pev( Snark, pev_NextHunt, CurrentTime + 2.0 );
VectorCopy ( Velocity, Flat );
Flat[ z ] = 0.0;
VectorNormalize ( Flat, Flat );
engfunc( EngFunc_MakeVectors, Angles );
if ( (
Enemy = pev( Snark, pev_enemy ) ) == NULL_ENT || !is_alive[ Enemy ] || zp_get_user_zombie( Enemy ) )
{
Enemy = UTIL_BestVisibleEnemy ( Snark, 512.0 );
}
if (
0.3 <= DieDelay - CurrentTime <= 0.5 )
{
set_pev( Snark, pev_scale, 2.0 );
emit_sound( Snark, CHAN_VOICE, gSnarkDieSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM + random_num( 0, 0x3F ) );
}
SPitch = 155.0 - 60.0 * ( ( DieDelay - CurrentTime ) / get_pcvar_float( pCvarDetonateDelay ) );
if (
SPitch < 80.0 ) { SPitch = 80.0; }
if (
Enemy != NULL_ENT && !zp_get_user_zombie( Enemy ) )
{
static Float:Target[ Coord_e ];
static Float:Vel;
static Float:Adj;
pev( Snark, pev_EnemyTarget, Target );
if (
UTIL_FVisible( Snark, Enemy ) )
{
static Float:EyePosition[ Coord_e ];
UTIL_EyePosition ( Enemy, EyePosition );
VectorSubtract ( EyePosition, Origin, Target );
VectorNormalize ( Target, Target );
set_pev( Snark, pev_EnemyTarget, Target );
}
Vel = VectorLength ( Velocity );
Adj = 50.0 / ( Vel + 10.0 );
if (
Adj > 1.2 ) { Adj = 1.2; }
Velocity[ x ] = Velocity[ x ] * Adj + Target[ x ] * 300.0;
Velocity[ y ] = Velocity[ y ] * Adj + Target[ y ] * 300.0;
Velocity[ z ] = Velocity[ z ] * Adj + Target[ z ] * 300.0;
set_pev( Snark, pev_velocity, Velocity );
}
if (
pev( Snark, pev_flags ) & FL_ONGROUND )
{
set_pev( Snark, pev_avelocity, Float:{ 0.0, 0.0, 0.0 } );
}
else
{
static Float:AVelocity[ Coord_e ];
pev( Snark, pev_avelocity, AVelocity );
if (
AVelocity[ x ] == 0.0 && AVelocity[ y ] == 0.0 && AVelocity[ z ] == 0.0 )
{
AVelocity[ x ] = random_float( -100.0, 100.0 );
AVelocity[ z ] = random_float( -100.0, 100.0 );
set_pev( Snark, pev_avelocity, AVelocity );
}
}
static
Float:PosPrev[ Coord_e ];
pev( Snark, pev_PosPrev, PosPrev );
VectorSubtract ( Origin, PosPrev, PosPrev );
if (
VectorLength ( PosPrev ) < 1.0 )
{
Velocity[ x ] = random_float( -100.0, 100.0 );
Velocity[ y ] = random_float( -100.0, 100.0 );
set_pev( Snark, pev_velocity, Velocity );
}
set_pev( Snark, pev_PosPrev, Origin );
vector_to_angle( Velocity, Angles );
Angles[ z ] = 0.0;
Angles[ x ] = 0.0;
set_pev( Snark, pev_angles, Angles );
return
HAM_IGNORED;
}
public
CSqueak_SuperBounceTouch ( const Snark, const Other )
{
if ( !is_valid_ent( Snark ) )
{
return;
}
static Float:Angles [ Angle_e ];
static Float:NextHit;
static Float:DieDelay;
static Float:NextAttack;
static Float:NextBounceSoundTime;
static Float:SPitch;
static Float:CurrentTime;
static Owner;
Owner = pev( Snark, pev_owner );
if (
Owner && Other == Owner )
{
return;
}
SPitch = PITCH_NORM * 1.0;
CurrentTime = get_gametime();
set_pev( Snark, pev_owner, NULL_ENT );
pev( Snark, pev_angles, Angles );
pev( Snark, pev_NextHit, NextHit );
pev( Snark, pev_DetonateDelay, DieDelay );
pev( Snark, pev_NextAttack, NextAttack );
pev( Snark, pev_NextBounceSoundTime, NextBounceSoundTime );
Angles[ x ] = 0.0;
Angles[ z ] = 0.0;
set_pev( Snark, pev_angles, Angles );
if (
NextHit > CurrentTime )
{
return;
}
SPitch = 155.0 - 60.0 * ( ( DieDelay - CurrentTime ) / get_pcvar_float( pCvarDetonateDelay ) );
if (
1 <= Other <= gMaxClients && pev( Other, pev_takedamage ) && NextAttack < CurrentTime )
{
static Hit;
Hit = global_get( glb_trace_ent );
if (
Hit == Other && pev( Hit, pev_modelindex ) != pev( Snark, pev_modelindex ) && 1 <= Other <= gMaxClients )
{
Owner = pev( Snark, pev_RealOwner );
if(Other!=Owner && is_alive[Other] && is_user_valid_connected(Owner) && !zp_get_user_zombie( Other ) ){
if(pev(Other, pev_armorvalue)>float(g_armor_amount)) armor[Other] = true
else armor[Other] = false
if ( zp_get_user_last_human( Other ) || zp_get_user_survivor( Other ) || armor[Other])
{
static Float:Forward [ Coord_e ];
static Float:EndPos [ Coord_e ];
static Float:OriginSnark[ Coord_e ];
static Float:OriginOther[ Coord_e ];
static Trace;
static Float:Damage;
Trace = create_tr2();
pev( Snark, pev_dmg, Damage );
pev( Snark, pev_origin, OriginSnark );
pev( Other, pev_origin, OriginOther );
engfunc( EngFunc_TraceLine, OriginSnark, OriginOther, DONT_IGNORE_MONSTERS, Snark, Trace );
get_tr2( Trace, TR_vecPlaneNormal, Forward );
get_tr2( Trace, TR_vecEndPos, EndPos );
ExecuteHam( Ham_TraceBleed, Other, Damage, Forward, Trace, DMG_SLASH );
free_tr2( Trace );
FX_BloodDrips ( EndPos, BLOOD_COLOR_RED, .Amount = floatround( Damage ) );
if(armor[Other])
set_pev(Other, pev_armorvalue, float(min(pev(Other, pev_armorvalue)-g_armor_amount, g_armor_limit)));
else
ExecuteHam( Ham_TakeDamage, Other, Snark, Owner, Damage, DMG_SLASH );
set_pev( Snark, pev_dmg, get_pcvar_float( pCvarDamagePop ) );
}
else
{
zp_infect_user( Other, Owner, .silent = 0, .rewards = 1 );
zp_set_user_ammo_packs( Owner, zp_get_user_ammo_packs( Owner ) + 1 );
set_user_frags( Owner, get_user_frags( Owner ) + 1 );
set_pev( Snark, pev_enemy, NULL_ENT );
}
}
emit_sound( Snark, CHAN_WEAPON, gSnarkAttackSound, VOL_NORM, ATTN_NORM, 0, floatround( SPitch ) );
set_pev( Snark, pev_NextAttack, CurrentTime + 0.5 );
}
}
set_pev( Snark, pev_NextHit, CurrentTime + 0.1 );
set_pev( Snark, pev_NextHunt, CurrentTime );
if (
CurrentTime < NextBounceSoundTime )
{
return;
}
if ( !(
pev( Snark, pev_flags ) & FL_ONGROUND ) )
{
switch ( random( 10 ) )
{
case 0 .. 3 : emit_sound( Snark, CHAN_VOICE, gSnarkHunt1Sound, VOL_NORM, ATTN_NORM, 0, floatround( SPitch ) );
case 4 .. 7 : emit_sound( Snark, CHAN_VOICE, gSnarkHunt2Sound, VOL_NORM, ATTN_NORM, 0, floatround( SPitch ) );
default : emit_sound( Snark, CHAN_VOICE, gSnarkHunt3Sound, VOL_NORM, ATTN_NORM, 0, floatround( SPitch ) );
}
}
set_pev( Snark, pev_NextBounceSoundTime, CurrentTime + 0.5 );
}
CSqueak_Create ( const Player, const Float:Origin[ Coord_e ], const Float:Angles[ Coord_e], const Float:Velocity[ Coord_e ] )
{
new Snark = create_entity( gGenericEntity );
if (
is_valid_ent( Snark ) )
{
set_pev( Snark, pev_classname, gSnarkClassName );
set_pev( Snark, pev_groupinfo, gSnarkClassNameReference );
set_pev( Snark, pev_owner, Player );
set_pev( Snark, pev_origin, Origin );
set_pev( Snark, pev_angles, Angles );
set_pev( Snark, pev_velocity, Velocity );
CSqueak_Spawn ( Player, Snark, Origin );
return
Snark;
}
return
NULL_ENT;
}
CSqueak_Spawn ( const Player, const Snark, const Float:Origin[ Coord_e ] )
{
new Float:CurrentTime = get_gametime();
set_pev( Snark, pev_movetype, MOVETYPE_BOUNCE );
set_pev( Snark, pev_solid, SOLID_BBOX );
entity_set_model ( Snark, gSnarkModel );
entity_set_size ( Snark, Float:{ -4.0, -4.0, 0.0 }, Float:{ 4.0, 4.0, 8.0 } );
entity_set_origin( Snark, Origin );
set_pev( Snark, pev_nextthink, CurrentTime + 0.1 );
set_pev( Snark, pev_NextHunt, CurrentTime + 1000000.0 ); // NextHunt
set_pev( Snark, pev_DetonateDelay, CurrentTime + get_pcvar_float( pCvarDetonateDelay ) ); // DetonateDelay
set_pev( Snark, pev_NextBounceSoundTime, CurrentTime ); // NextBounceSoundTime
set_pev( Snark, pev_RealOwner, Player ); // RealOwner
set_pev( Snark, pev_flags, pev( Snark, pev_flags ) | FL_MONSTER );
set_pev( Snark, pev_takedamage, DAMAGE_AIM );
set_pev( Snark, pev_health, get_pcvar_float( pCvarHealth ) + gSnarkHealthReference );
set_pev( Snark, pev_gravity, get_pcvar_float( pCvarGravity ) );
set_pev( Snark, pev_friction, get_pcvar_float( pCvarFriction ) );
set_pev( Snark, pev_fov, get_pcvar_num( pCvarFieldOfView ) );
set_pev( Snark, pev_dmg, get_pcvar_float( pCvarDamagePop ) );
// --| Force snark to run.
set_pev( Snark, pev_sequence, wsqueak_run );
set_pev( Snark, pev_framerate, 1.0 );
set_pev( Snark, pev_animtime, CurrentTime );
if (
get_pcvar_num( pCvarShowTrail ) )
{
message_begin ( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte ( TE_BEAMFOLLOW );
write_short ( Snark );
write_short ( gSmokeTrail );
write_byte ( TRAIL_LIFE ); // life
write_byte ( TRAIL_WIDTH ); // width
write_byte ( TRAIL_RED );
write_byte ( TRAIL_GREEN );
write_byte ( TRAIL_BLUE );
write_byte ( TRAIL_BRIGTHNESS );
message_end();
}
}
public
CSqueak_WeaponIdle ( const Player )
{
if ( gHasSnark{ Player } && gWeaponActive{ Player } )
{
static Float:CurrentTime;
CurrentTime = get_gametime();
if (
gTimeWeaponIdle[ Player ] > CurrentTime )
{
return;
}
if (
gJustThrown{ Player } )
{
gJustThrown{ Player } = false;
if ( !
gPlayerAmmo{ Player } )
{
RemoveWeapon ( Player, get_pdata_cbase( Player, m_pActiveWeapon ) );
return;
}
UTIL_PlayWeaponAnimation ( Player, squeak_up );
gTimeWeaponIdle[ Player ] = CurrentTime + random_float ( 10.0, 15.0 );
return;
}
new
Animation;
new Float:NewTime;
switch (
random_num( 0, 10 ) )
{
case 0 .. 6 :
{
Animation = squeak_idle1;
NewTime = 30.0 / 16.0 * ( 2.0 );
}
case 7 .. 8 :
{
Animation = squeak_fidgetfit;
NewTime = 70.0 / 16.0;
}
default :
{
Animation = squeak_fidgetnip;
NewTime = 80.0 / 16.0;
}
}
UTIL_PlayWeaponAnimation ( Player, Animation );
gTimeWeaponIdle[ Player ] = CurrentTime + NewTime;
}
}
ChangeWeaponToSnark ( const Player )
{
set_pev( Player, pev_viewmodel2 , gModel_V );
set_pev( Player, pev_weaponmodel2, gModel_P );
}
UpdateHud ( const Player )
{
message_begin( MSG_ONE_UNRELIABLE, gMsgidAmmoX, .player = Player );
write_byte( 12 );
write_byte( gPlayerAmmo{ Player } );
message_end();
}
RemoveWeapon ( const Player, const Weapon )
{
ExecuteHamB( Ham_Weapon_RetireWeapon, Weapon );
ExecuteHamB( Ham_RemovePlayerItem, Player, Weapon );
ExecuteHamB( Ham_Item_Kill, Weapon );
set_pev( Player, pev_weapons, pev( Player, pev_weapons ) & ~( 1 << gWeaponIndex ) );
cs_set_user_bpammo( Player, gWeaponIndex, 0 );
gHasSnark{ Player } = false;
gWeaponActive{ Player } = false;
}
stock bool:UTIL_IsBSPModel ( const Entity )
{
return ( pev( entity, pev_solid ) == SOLID_BSP || pev( Entity, pev_movetype ) == MOVETYPE_STEP );
}
UTIL_BestVisibleEnemy ( const Snark, const Float:DistanceToSearch /* , const Flags */ )
{
static List[ MAX_CLIENTS ];
static Float:Distance;
static Float:Nearest;
static ReturnEntity;
static Count;
static Entity;
static i;
Nearest = 8192.0;
ReturnEntity = NULL_ENT;
Count = find_sphere_class( Snark, "player", DistanceToSearch, List, sizeof List );
for (
i = 0; i < Count; i++ )
{
Entity = List[ i ];
if (
zp_get_user_zombie( Entity ) )
{
continue;
}
if (
UTIL_FInViewCone ( Snark, Entity ) && UTIL_FVisible( Snark, Entity ) )
{
if ( ( Distance = entity_range( Snark, Entity ) ) <= Nearest )
{
Nearest = Distance;
ReturnEntity = Entity;
}
}
}
set_pev( Snark, pev_enemy, ReturnEntity );
return ReturnEntity;
}
UTIL_PlayWeaponAnimation ( const Player, const Sequence )
{
set_pev( Player, pev_weaponanim, Sequence );
message_begin( MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player );
write_byte( Sequence );
write_byte( pev( Player, pev_body ) );
message_end();
}
bool:UTIL_IsInWorld ( const Float:Origin[ Coord_e ], const Float:Velocity[ Coord_e ] )
{
static i;
for (
i = x; i <= z; i++ )
{
if ( !( -4096.0 < Origin[ i ] < 4096.0 ) && !( -2000.0 < Velocity[ x ] < 2000.0 ) )
{
return false;
}
}
return
true;
}
UTIL_RandomBloodVector ( Float:Direction[ Coord_e ] )
{
Direction[ x ] = random_float( -1.0, 1.0 );
Direction[ y ] = random_float( -1.0, 1.0 );
Direction[ z ] = random_float( 0.0, 1.0 );
}
FX_BloodDrips ( const Float:Origin[ Coord_e ], const BloodColor, const Amount )
{
message_begin_f( MSG_PVS, SVC_TEMPENTITY, Origin, NULL_ENT );
write_byte( TE_BLOODSPRITE );
write_coord_f( Origin[ x ] );
write_coord_f( Origin[ y ] );
write_coord_f( Origin[ z ] );
write_short( gBloodSpray ); // initial sprite model
write_short( gBloodDrop ); // droplet sprite models
write_byte( BloodColor ); // color index into host_basepal
write_byte( min( max( 3, ( Amount > 255 ? 255 : Amount ) / 10 ), 16 ) ); // size
message_end();
}
FX_StreakSplash ( const Float:Origin[ Coord_e ], const Float:Direction[ Coord_e ], const Color, const Count, const Speed, const VelocityRange )
{
message_begin_f( MSG_PVS, SVC_TEMPENTITY, Origin, NULL_ENT );
write_byte( TE_STREAK_SPLASH );
write_coord_f( Origin[ x ] );
write_coord_f( Origin[ y ] );
write_coord_f( Origin[ z ] );
write_coord_f( Direction[ x ] );
write_coord_f( Direction[ y ] );
write_coord_f( Direction[ z ] );
write_byte( min( Color, 255 ) );
write_short( Count );
write_short( Speed );
write_short( VelocityRange );// random velocity modifier
message_end();
}
stock FX_TraceBleed( const Victim, const Float:Damage, const Float:Dir[ Coord_e ], const TraceResult:Trace )
{
new TraceResult:BloodTrace;
new Float:TraceDir[ Coord_e ];
new Float:EndPos [ Coord_e ];
new Float:Noise;
new Float:Fraction;
new Count;
if (
Damage < 10 )
{
Noise = 0.1;
Count = 1;
}
else if ( Damage < 25 )
{
Noise = 0.2;
Count = 2;
}
else
{
Noise = 0.3;
Count = 4;
}
for ( new
i = 0 ; i < Count ; i++ )
{
VectorScale ( Dir, -1.0, TraceDir );
TraceDir[ x ] += random_float( -Noise, Noise );
TraceDir[ y ] += random_float( -Noise, Noise );
TraceDir[ z ] += random_float( -Noise, Noise );
get_tr2( Trace, TR_vecEndPos, EndPos );
VectorMA ( EndPos, -172.0, TraceDir, TraceDir );
engfunc( EngFunc_TraceLine, EndPos, TraceDir, IGNORE_MONSTERS, Victim, BloodTrace );
get_tr2( BloodTrace, TR_flFraction, Fraction );
if (
Fraction != 1.0 )
{
FX_BloodDecalTrace( BloodTrace, EndPos, BLOOD_COLOR_RED );
}
}
}
stock FX_BloodDecalTrace ( const TraceResult:Trace, const Float:EndPos[ Coord_e ], const BloodColor )
{
new Hit;
new BaseIndex;
new DecalIndex;
new Float:Fraction;
switch (
BloodColor )
{
case BLOOD_COLOR_YELLOW : BaseIndex = get_decal_index( "{yblood1" );
case BLOOD_COLOR_RED : BaseIndex = get_decal_index( "{blood1" );
}
DecalIndex = BaseIndex + random_num( 0, 5 );
Hit = max( 0, get_tr2( Trace, TR_pHit ) );
get_tr2( Trace, TR_flFraction, Fraction );
if (
Fraction == 1.0 || ( Hit && !UTIL_IsBSPModel ( Hit ) ) )
{
return;
}
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( Hit ? TE_DECAL : TE_WORLDDECAL );
write_coord_f( EndPos[ x ] );
write_coord_f( EndPos[ y ] );
write_coord_f( EndPos[ z ] );
write_byte( DecalIndex );
if ( Hit )
{
write_short( Hit );
}
message_end();
}
stock UTIL_RadiusDamage ( const Float:Origin[ Coord_e ], const Inflictor, const Attacker, const Float:Damage, const Float:Radius, const DamageBits )
{
static Entity;
static Trace;
static Float:AdjustedDamage;
static bool:InWater;
Entity = NULL_ENT;
InWater = UTIL_LiquidContents( Origin );
while ( (
Entity = find_ent_in_sphere( Entity, Origin, Radius ) ) != NULL_ENT )
{
if ( Entity == Inflictor )
{
continue;
}
if(!is_user_valid_connected(Entity)) return PLUGIN_CONTINUE
if(is_bot[Entity] || !is_alive[Entity] || !cs_get_user_team(Entity) ) return PLUGIN_CONTINUE
if ( pev( Entity, pev_takedamage ) && !zp_get_user_zombie( Entity ) && !zp_get_user_last_human( Entity ) )
{
static Float:EntOrigin[ Coord_e ];
static Float:EndPos [ Coord_e ];
static Float:Fraction;
pev( Entity, pev_origin, EntOrigin );
engfunc( EngFunc_TraceLine, Origin, EntOrigin, IGNORE_MONSTERS, Inflictor, Trace );
get_tr2( Trace, TR_flFraction, Fraction );
get_tr2( Trace, TR_vecEndPos, EndPos );
if (
Fraction == 1.0 || get_tr2( Trace, TR_pHit ) == Entity )
{
static Float:Delta[ Coord_e ];
static Float:Len;
if (
get_tr2( Trace, TR_StartSolid ) )
{
EndPos = Origin;
Fraction = 0.0;
}
AdjustedDamage = Damage;
VectorSubtract ( EndPos, Origin, Delta );
if ( (
Len = VectorLength ( Delta ) ) != 0.0 )
{
VectorScale ( Delta, 1 / Len, Delta );
}
if (
Len > 2.0 )
{
Len -= 2.0;
}
if ( (
AdjustedDamage *= ( 1.0 - Len / Radius ) ) <= 0 )
{
continue;
}
if (
InWater || pev( Entity, pev_waterlevel ) > 2 )
{
AdjustedDamage *= 0.5;
}
if (
Fraction != 1.0 )
{
ExecuteHam( Ham_TraceAttack, Entity, Inflictor, AdjustedDamage, Delta, Trace, DamageBits );
ExecuteHam( Ham_TakeDamage, Entity, Inflictor, Attacker, AdjustedDamage, DamageBits );
}
else
{
ExecuteHam( Ham_TakeDamage, Entity, Inflictor, Attacker, AdjustedDamage, DamageBits );
}
}
}
}
return PLUGIN_CONTINUE
}
stock UTIL_EntitiesInBox ( List[], const ListMax, const Float:Mins[ Coord_e ], const Float:Maxs[ Coord_e ], const Flags )
{
/*
static Float:Origin [ Coord_e ];
static Float:Delta [ Coord_e ];
static Float:Mins [ Coord_e ];
static Float:Maxs [ Coord_e ];
pev( Snark, pev_origin, Origin );
Delta[ x ] = Delta[ y ] = Delta[ z ] = DistanceToSearch;
VectorSubtract ( Origin, Delta, Mins );
VectorAdd ( Origin, Delta, Maxs );
Count = UTIL_EntitiesInBox ( List, sizeof List, Mins, Maxs, Flags );
*/
static Float:AbsMins[ Coord_e ];
static Float:AbsMaxs[ Coord_e ];
static Count;
static Entity;
Count = 0;
for (
Entity = 1; Entity <= gMaxEntities; Entity++ ) if( is_valid_ent( Entity ) )
{
if ( !( pev( Entity, pev_flags ) & Flags ) )
{
continue;
}
pev( Entity, pev_absmin, AbsMins );
pev( Entity, pev_absmax, AbsMaxs );
if (
Mins[ x ] > AbsMaxs[ x ] || Mins[ y ] > AbsMaxs[ y ] || Mins[ z ] > AbsMaxs[ z ] ||
Maxs[ x ] < AbsMins[ x ] || Maxs[ y ] < AbsMins[ y ] || Maxs[ z ] < AbsMins[ z ] )
{
continue;
}
List[
Count ] = Entity;
if (
Count++ >= ListMax )
{
return Count;
}
}
return
Count;
}
bool:UTIL_FVisible ( const Entity, const Other )
{
static Float:LookerOrigin[ Coord_e ];
static Float:TargetOrigin[ Coord_e ];
static Float:Fraction;
static LookerWLevel;
static TargetWLevel;
if (
pev( Other, pev_flags ) & FL_NOTARGET )
{
return false;
}
LookerWLevel = pev ( Entity, pev_waterlevel );
TargetWLevel = pev ( Other, pev_waterlevel );
if ( (
LookerWLevel != 3 && TargetWLevel == 3 ) || ( LookerWLevel == 3 && TargetWLevel == 0 ) )
{
return false;
}
UTIL_EyePosition ( Entity, LookerOrigin );
UTIL_EyePosition ( Other, TargetOrigin );
engfunc( EngFunc_TraceLine, LookerOrigin, TargetOrigin, IGNORE_MONSTERS | IGNORE_GLASS, Entity, 0 );
get_tr2( 0, TR_flFraction, Fraction );
return
Fraction == 1.0 ? true : false;
}
bool:UTIL_FInViewCone ( const Entity, const Other )
{
static Float:Angles [ Coord_e ];
static Float:HOrigin[ Coord_e ];
static Float:Origin [ Coord_e ];
pev( Entity, pev_angles, Angles );
engfunc( EngFunc_MakeVectors, Angles );
global_get( glb_v_forward, Angles );
Angles[ z ] = 0.0;
pev( Entity, pev_origin, HOrigin );
pev( Other, pev_origin, Origin );
VectorSubtract ( Origin, HOrigin, Origin );
Origin[ z ] = 0.0;
VectorNormalize ( Origin, Origin );
if (
DotProduct ( Origin, Angles ) > pev( Entity, pev_fov ) )
{
return true;
}
return
false;
}
UTIL_EyePosition ( const Entity, Float:Origin[ Coord_e ] )
{
static Float:ViewOfs[ Coord_e ];
pev( Entity, pev_origin, Origin );
pev( Entity, pev_view_ofs, ViewOfs );
VectorAdd ( Origin, ViewOfs, Origin );
}
stock bool:UTIL_LiquidContents( const Float:Source[ Coord_e ] )
{
new Contents = point_contents( Source );
return ( Contents == CONTENTS_WATER || Contents == CONTENTS_SLIME || Contents == CONTENTS_LAVA );
}
VectorNormalize ( const Float:Source[ Coord_e ], Float:Output[ Coord_e ] )
{
static Float:InvLen;
InvLen = 1.0 / VectorLength ( Source );
Output[ x ] = Source[ x ] * InvLen;
Output[ y ] = Source[ y ] * InvLen;
Output[ z ] = Source[ z ] * InvLen;
}
HTML Code:
//AMXXPC compile.exe // by the AMX Mod X Dev Team //// zp_extra_squeakgrenade.sma // // cstrikeaddonsamxmodxscriptingzp_extra_squeakgrenade.sma(149) : error 020: invalid symbol name "" // cstrikeaddonsamxmodxscriptingzp_extra_squeakgrenade.sma(150) : error 020: invalid symbol name "" // cstrikeaddonsamxmodxscriptingzp_extra_squeakgrenade.sma(150) : warning 201: redefinition of constant/macro (symbol "") // // 2 Errors. // Could not locate output file cstrikeaddonsamxmodxscriptingcom piledzp_extra_squeakgrenade.amx (compile failed). // // Compilation Time: 0.78 sec // ---------------------------------------- Press enter to exit ...
In version v1.8.2 there is no compile problem
But in v1.9
I get this error
Last edited by amirwolf; 01-30-2021 at 14:41.
#1
Отправлено 10 февраля 2019 — 14:20
-
- С кем ты?
-
Скачал инклуд mxINI, подключил его к моду, при компилировании получаю следующую ошибку:
pawnoincludemxini.inc(145) : error 020: invalid symbol name ""
в этой строке:
cellbytes = cellbits / charbits;
0
#2
Отправлено 10 февраля 2019 — 16:59
-
- Новичок
-
1. Проверь, после a_samp подключил ли ты его
2. Скачай другую версию
3. Лучше использовать MySQL. По нему достаточно мануалов в интернете и форуме сампа.
Но я тебя не заставляю
0
#3
Отправлено 05 марта 2019 — 18:21
-
- С кем ты?
-
Stanislav_Vice (10 февраля 2019 — 16:59) писал:
1. Проверь, после a_samp подключил ли ты его
2. Скачай другую версию
3. Лучше использовать MySQL. По нему достаточно мануалов в интернете и форуме сампа.
Но я тебя не заставляю
Спасибо за супер пустые советы, которые никак не помогают в решении проблемы, их как раз и не хватало.
Я и сейчас использую mysql, мне mxini для других целей нужен, с другими версиями то же самое происходит
0
#4
Отправлено 07 марта 2019 — 21:32
-
- С кем ты?
-
0
#5
Отправлено 10 марта 2019 — 16:45
-
- С кем ты?
-
bump.
Забыл упомянуть, что использую компилятор от Zeex.
0
#6
Отправлено 10 марта 2019 — 17:25
-
- Пользователь
-
Посмотри в моде, может у тебя есть что-то вроде этого:
#define cellbytes
Если не найдешь, попробуй во всем инклуде заменить название cellbytes, на например cellbytes2
1
#7
Отправлено 10 марта 2019 — 20:39
-
- С кем ты?
-
Barty Knox (10 марта 2019 — 17:25) писал:
Посмотри в моде, может у тебя есть что-то вроде этого:
#define cellbytes
Если не найдешь, попробуй во всем инклуде заменить название cellbytes, на например cellbytes2
Спасибо, помогла замена названия.
0
- ← Предыдущая тема
- Проблемы с компилированием
- Следующая тема →
- Вы не можете создать новую тему
-
Тема закрыта
1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей
error 020: invalid symbol name
Модераторы: Subb98, liFe iS GoOD
- Список форумов ‹ AMX Mod X ‹ Скриптинг
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела «Болтовня».
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
error 020: invalid symbol name
Здравствуйте, сегодня решил переписать плагин со спавном коробок с оружием. Туда включил HE и дигл. При компиляции возникла ошибка:
- Код: Выделить всё
vish.sma(28) : error 020: invalid symbol name ""
Долго ломал голову, что с ней сделать. Короче прошу помощи!
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <engine>
#include <fun>
#define ADMIN_PRESENT_SPAWN ADMIN_RCON
#define ADMIN_PRESENT_REMOVE ADMIN_RCON
#define ADMIN_PRESENT_STOP ADMIN_RCON
#define ADMIN_PRESENT_START ADMIN_RCON
#define PRESENT_LIMIT 40
enum Color {
NORMAL = 1,
GREEN,
TEAM_COLOR,
GREY,
RED,
BLUE,
}
new file[78],total_presents, Float:present_data[PRESENT_LIMIT + 1][3],
present_glow,present_light,present_light_radius,present_rot,
spawn_time,min_presents,max_presents,
public plugin_precache() {
precache_model("models/vishnevskiy/presents.mdl")
}
public plugin_init() {
register_plugin("VishSpawn", "1.1", "Vishnevskiy")
register_cvar("vsp_spawner_version","1.1",FCVAR_SERVER | FCVAR_SPONLY)
register_logevent("round_end",2,"1=Round_End")
register_logevent("round_start",2,"1=Round_Start")
present_glow = register_cvar("vsp_present_glow","1")
present_light = register_cvar("vsp_present_light","1")
present_light_radius = register_cvar("vsp_present_light_radius","8")
present_rot = register_cvar("vsp_present_rotate","1")
spawn_time = register_cvar("vsp_spawn_presents_time","30.0")
min_presents = register_cvar("vsp_min_spawn_presents","5")
max_presents = register_cvar("vsp_max_spawn_presents","5")
register_concmd("vsp_spawn","admin_present_spawn",ADMIN_PRESENT_SPAWN)
register_concmd("vsp_remove","admin_present_remove",ADMIN_PRESENT_REMOVE)
register_concmd("vsp_stop","admin_present_stop",ADMIN_PRESENT_STOP)
register_concmd("vsp_start","admin_present_start",ADMIN_PRESENT_START)
register_touch("info_present","player","present_touch")
register_think("info_present","present_think")
new mapname[32]
get_mapname(mapname,31)
format(file,77,"addons/amxmodx/configs/presents/%s.ini",mapname)
load_presents()
}
public admin_present_spawn(id,level,cid)
{
if(!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED if(total_presents == PRESENT_LIMIT)
{
console_print(id,"Превышен лимит боксов!",PRESENT_LIMIT)
return PLUGIN_HANDLED
}
new Float:origin[3]
entity_get_vector(id,EV_VEC_origin,origin)
origin[2] -= 30.0save_present
(id,origin)
return PLUGIN_HANDLED
}
public admin_present_remove(id,level,cid)
{
if(!cmd_access(id,level,cid,1)) return PLUGIN_HANDLEDremove_all_presents
()
console_print(id,"Все боксы удалены на этот раунд!")
return PLUGIN_HANDLED
}
public admin_present_stop(id,level,cid)
{
if(!cmd_access(id,level,cid,1)) return PLUGIN_HANDLEDremove_all_presents
()
total_presents = 0
console_print(id,"Все боксы удалены на этой карте!")
return PLUGIN_HANDLED
}
public admin_present_start(id,level,cid)
{
if(!cmd_access(id,level,cid,1) || total_presents > 0) return PLUGIN_HANDLEDremove_all_presents
()
load_presents()
console_print(id,"Все боксы востановлены на этой карте!")
return PLUGIN_HANDLED
}
public round_end()
{
if(!total_presents) return
remove_all_presents()
}
public round_start()
{
if(!total_presents) return
remove_task(1337)
set_task(get_pcvar_float(spawn_time),"spawn_random_presents",1337)
}
public spawn_random_presents()
{
new num = random_num(get_pcvar_num(min_presents),get_pcvar_num(max_presents))
if(num != 0) for(new ii=0;ii<num;ii++) spawn_present(present_data[random(total_presents)])
}
public give_random_present(ent,id)
{
new num = random_num(1,19)
switch(num)
{
case 1:
{
cs_set_weapon_ammo(give_item(id, "weapon_deagle"), 1)
cs_set_user_bpammo( id, CSW_DEAGLE, 0 );
}
case 2:
{
give_item(id,"weapon_hegrenade")
}
}
remove_entity(ent)
}
public present_think(ent)
{
if(get_pcvar_num(present_light))
{
static Float:origin[3]
entity_get_vector(ent,EV_VEC_origin,origin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
write_byte(TE_DLIGHT)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_byte(get_pcvar_num(present_light_radius))
write_byte(entity_get_int(ent,EV_INT_iuser1))
write_byte(entity_get_int(ent,EV_INT_iuser2))
write_byte(entity_get_int(ent,EV_INT_iuser3))
write_byte(2)
write_byte(0)
message_end()
}
if(get_pcvar_num(present_rot))
{
static Float:angles[3]
entity_get_vector(ent,EV_VEC_angles,angles)
angles[1]--
entity_set_vector(ent,EV_VEC_angles,angles)
}
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
}
public remove_all_presents() remove_entity_name("info_present")
public load_presents()
{
total_presents = 0 new buffer[128], x[12],y[12],z[12]
if(file_exists(file))
{
new save = fopen(file,"rt")
if(!save) return
while(!feof(save))
{
fgets(save,buffer,127)
if(buffer[0] == ';' || !buffer[0]) continue
parse(buffer, x,11, y,11, z,11)
present_data[total_presents][0] = str_to_float(x)
present_data[total_presents][1] = str_to_float(y)
present_data[total_presents][2] = str_to_float(z)
total_presents++
}
fclose(save)
}
}
public spawn_present(Float:origin[3])
{
new ent = create_entity("info_target")
if(ent)
{
entity_set_string(ent,EV_SZ_classname,"info_present")
entity_set_model(ent,"models/vishnevskiy/presents.mdl")
entity_set_int(ent,EV_INT_solid,SOLID_TRIGGER)
entity_set_int(ent,EV_INT_movetype,MOVETYPE_TOSS)
if(get_pcvar_num(present_glow))
{
entity_set_int(ent,EV_INT_iuser1,random(255))
entity_set_int(ent,EV_INT_iuser2,random(255))
entity_set_int(ent,EV_INT_iuser3,random(255))
set_rendering(ent,kRenderFxGlowShell,entity_get_int(ent,EV_INT_iuser1),entity_get_int(ent,EV_INT_iuser2),entity_get_int(ent,EV_INT_iuser3),kRenderNormal,60)
}
entity_set_origin(ent,origin)
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
}
}
public save_present(id,Float:origin[3])
{
new save = fopen(file,"at")
if(save)
{
fprintf(save,"%.2f %.2f %.2f^n",origin[0],origin[1],origin[2])
fclose(save)
console_print(id,"Бокс был добавлен по координатам x:y:z(%.2f : %.2f : %.2f).",origin[0],origin[1],origin[2])
load_presents()
}
}
-
vishnevskiy
- Сообщения: 47
- Зарегистрирован: 02 дек 2014, 19:06
- Благодарил (а): 11 раз.
- Поблагодарили: 1 раз.
- Опыт программирования: Около года
- Языки программирования: Counter-Strike 1.6
Re: error 020: invalid symbol name
kentyxa » 02 дек 2014, 19:34
Удали последнюю запятую на 26-ой строчке
На форуме больше не обитаю.
04.01.2015
-
kentyxa
- Сообщения: 777
- Зарегистрирован: 30 июл 2013, 16:47
- Благодарил (а): 99 раз.
- Поблагодарили: 170 раз.
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и гости: 2
Из названия все ясно. ИД’ы всех ошибок, фатальных ошибок, а также предупреждений в PAWNO.
error 001: expected token: «%s», but found «%s» — пропущен символ «%s», но найден «%s»;
error 002: only a single statement (or expression) can follow each «case» — Только один оператор и и выражение может следовать после «case»;
error 003: declaration of a local variable must appear in a compound block — Локальные переменные должны быть в блоке;
error 004: function «%s» is not implemented — функция «%s» не определена;
error 005: function may not have arguments — Функция может не иметь аргументов;
error 006: must be assigned to an array — Это должно быть в массиве;
error 007: operator cannot be redefined — Оператор не может использоваться;
error 008: must be a constant expression; assumed zero — Это должно быть константой равной нулю;
error 009: invalid array size (negative or zero) — Неправильный размер массива. Отрицательное значение или ноль;
error 010: invalid function or declaration — Неправильная функция;
error 011: invalid outside functions — Неправильный вывод функции;
error 012: invalid function call, not a valid address — Неправильный вызов функции;
error 013: no entry point (no public functions) — Не точка входа;
error 014: invalid statement; not in switch — Неверная команда;
error 015: «default» case must be the last case in switch statement — Оператор «default» должен быть последним;
error 016: multiple defaults in «switch» — Несколько операторов «default» в «switch»;
error 017: undefined symbol «%s» — неизвестный символ (неопределённая переменная) «%s»;
error 018: initialization data exceeds declared size — несовпадение данных в массиве с указанными рамками (увеличить размер массива);
error 019: not a label: %s» — %s — не строка;
error 020: invalid symbol name «%s» — ошибочное название символа (начинается с цифры, например);
error 021: symbol already defined: %s» — символ уже определён (дважды встречается new одного и того-же символа);
error 022: must be lvalue (non-constant) — Должна быть левой частью;
error 023: array assignment must be simple assignment — начения массива должны быть простыми;
error 024: «break» or «continue» is out of context — Операторы «break» или «continue» вне границ блока;
error 025: function heading differs from prototype — Функция заголовка отличается от прототипа;
error 026: no matching «#if…» — «#if…» — не найдено;
error 027: invalid character constant — Неправильные символы константы;
error 028: invalid subscript (not an array or too many subscripts): %s» — неверное выражение, нет результата %s является недействительным массивом;
error 029: invalid expression, assumed zero — неверное выражение, нет результата;
error 030: compound statement not closed at the end of file — составной оператор не закрыт в конце файла, поставить return 1;} в конец мода;
error 031: unknown directive — неверная директива (подключение плагина в дефайнах, неверное установка пути инклуда и тому подобное);
error 032: array index out of bounds (variable «%s») — Индекс массива превышен;
error 033: array must be indexed (variable «%s») — Массив неизвестен;
error 034: argument does not have a default value (argument %d) — Аргумент не имеет начального значения;
error 035: argument type mismatch (argument %d) — Несоответствие типов аргумента;
error 036: empty statement — Пустой оператор;
error 037: invalid string (possibly non-terminated string) — незавершённая строка (обычно бывает, если забывам ставить закрывающие ковычки);
error 038: extra characters on line — Лишние символы в строке;
error 039: constant symbol has no size — Символьная константа не имеет размера;
error 040: duplicate «case» label (value %d) — несколько раз объявлен «case» с одним и тем же параметром;
error 041: invalid ellipsis, array size is not known — Размер массива неизвестно;
error 042: invalid combination of class specifiers — Недопустимое сочетание класса;
error 043: character constant exceeds range for packed string — Символьная константа превышает размер строки;
error 044: positional parameters must precede all named parameters — ;
error 045: too many function arguments — Слишком много аргументов для функции;
error 046: unknown array size (variable «%s») — Неизвестный размер массива %s;
error 047: array sizes do not match, or destination array is too small — размеры массивов конфликтуют, либо целевой массив слишком маленький (нужно увеличить число в квадратных скобках);
error 048: array dimensions do not match — Размеры массива не совпадают;
error 049: invalid line continuation — Неправильное продолжении линии;
error 050: invalid range — Неправильный диапазон;
error 051: invalid subscript, use «[ ]» operators on major dimensions — Неправильный индекс. Используйте «[ ]»;
error 052: multi-dimensional arrays must be fully initialized — Много размерные массивы должны быть
полностью установлены;
error 053: exceeding maximum number of dimensions — Превышение максимального числа измерений;
error 054: unmatched closing brace — Непревзойденная закрывающаяся скобка;
error 055: start of function body without function header — описание функции без заголовка (пропущен public(…));
error 056: arrays, local variables and function arguments cannot be public (variable «%s») — ;
error 057: unfinished expression before compiler directive — Незавершенное выражение для компилятора;
error 058: duplicate argument; same argument is passed twice — Дублирование аргумента. Аргумент передается несколько раз;
error 059: function argument may not have a default value (variable «%s») — Аргумент не может иметь значение по-умолчанию;
error 060: multiple «#else» directives between «#if … #endif» — Несколько «#else» между «#if … #endif»;
error 061: «#elseif» directive follows an «#else» directive — «#elseif» перед «#else»;
error 062: number of operands does not fit the operator — Количество операторов не соответствует оператору;
error 063: function result tag of operator «%s» must be «%s» — Результат функции %s должен быть %s;
error 064: cannot change predefined operators — Невозможно изменить уже определенные операторы;
error 065: function argument may only have a single tag (argument %d) — В этой функции может быть только один аргумент %d;
error 066: function argument may not be a reference argument or an array (argument «%s») — Аргумент функции не может быть ссылкой или массивом;
error 067: variable cannot be both a reference and an array (variable «%s») — Переменная %s не может быть как массив или ссылка;
error 068: invalid rational number precision in #pragma — Неправильное число в #pragma;
error 069: rational number format already defined — Формат рационального числа уже определен;
error 070: rational number support was not enabled — Рациональное число не поддерживается;
error 071: user-defined operator must be declared before use (function «%s») — Объявленный оператор должен быть перед использованием;
error 072: «sizeof» operator is invalid on «function» symbols — Оператор «sizeof» не может быть использован для символов;
error 073: function argument must be an array (argument «%s») — Аргумент %s должен быть массивом;
error 074: #define %s must start with an alphabetic character — макрос %s должен начинаться с букв;
error 075: input line too long (after substitutions) — слишком длинная строка после интеграции параметров (возможно, много лишних пробелов, или результативные данные слишком велики для строки (по длине));
error 076: syntax error in the expression, or invalid function call — Неправильный синтаксис или неправильный вызов функции;
error 077: malformed UTF-8 encoding, or corrupted file: %s — Плохая кодировка UTF-8 или плохой файл %s;
error 078: function uses both «return» and «return <value>» — Функция использует два «return»;
error 079: inconsistent return types (array & non-array) — несовместимость типов возвращённых результатов (массив и немассив) (сопоставить данные в функции и изменить типы переменных);
error 080: unknown symbol, or not a constant symbol (symbol «%s») — Неизвестный или непостоянный символ %s;
error 081: cannot take a tag as a default value for an indexed array parameter (symbol «%s») — Нельзя взять значение в массив %s;
error 082: user-defined operators and native functions may not have states — нативы и пользовательские операторы не могут иметь переключателей;
error 083: a function may only belong to a single automaton (symbol «%s») — Функция может принадлежать только к одной автоматизации;
error 084: state conflict: one of the states is already assigned to another implementation (symbol «%s») — для функции %s уже определенна данная state;
error 085: no states are defined for function «%s» — не определенна ни одна state для функции %s;
error 086: unknown automaton «%s» — Неизвестная автоматизация %s;
error 087: unknown state «%s» for automaton «%s» — не определен state %s, для переключения %s;
error 088: number of arguments does not match definition — количество аргументов не совпадает с объявленными в функции;
fatal error 100: cannot read from file: «%s» — невозможно прочитать/найти файл %s в стандартной директории;
fatal error 107: too many error messages on one line — слишком много ошибок на одной строке (обычно из-за одного неправильного параметра);
warning 200: symbol «%s» is truncated to 31 characters — название переменной %s обрезается до 31 символа (укоротите название переменной %s);
warning 201: redefinition of constant/macro (symbol «%s») — двойное определение одинаковой константы (смотреть #define);
warning 202: number of arguments does not match definition — несовпадение количества аргументов;
warning 203: symbol is never used: «%» — символ «%» нигде не используется;
warning 204: symbol is assigned a value that is never used: «%s» — символ создан, ему присваивается значение, но далее он не используется.
warning 208: function with tag result used before definition, forcing reparse — функция с типовым результатом используется перед объявлением
warning 209: function «%s» should return a value — функция %s должна возвращать какое-либо значение (return 1; к примеру);
warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
warning 213: tag mismatch — несовпадение тэгов;
warning 215: expression has no effect — выражение не имеет эффекта;
warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
warning 217: loose indentation — невыровненная строка (return должен быть строго под телом функции по левому краю, либо можно добавить в начало мода строку #pragma tabsize 0, но это не рекомендуется, так как иногда может не понимать и не прочитывать скобки «{» и «}»);
warning 219: local variable «%s» shadows a variable at a preceding level — переменная дважды объявлена;
warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — должен быть определён размер массива %s (если определён статиком, заменить дефайном);
warning 225: unreachable code — невалидный код;
warning 235: public function lacks forward declaration (symbol «%s») — необходим форвард функции %s (перед функцией пишем forward %s;
Пояснение: «%s — имя переменной/макроса/аргумента функции».
Авторы: OKStyle, webserfer, Kaza40k, [Nos]B[R]aiN[L], Ym[0]n, _volk_, ДениСыч, Roman1us.
При копировании на другие ресурсы, обязательно указывайте авторов, не зря ведь люди старались
error 001: expected token: "%s", but found "%s" - ожидался символ: "%s", но был найден "%s";
error 002: only a single statement (or expression) can follow each "case" - только одно заявление (или выражение) могут следовать за "case";
error 003: declaration of a local variable must appear in a compound block - объявленная локальная переменная должна использоваться в этом же блоке;
error 004: function "%s" is not implemented - функция %s не реализована;
error 005: function may not have arguments - функция не имеет аргументов;
error 006: must be assigned to an array - должен быть присвоен массив;
error 007: operator cannot be redefined - оператор не может быть установлен еще раз;
error 008: must be a constant expression; assumed zero - должно быть постоянным выражением; равным нулю;
error 009: invalid array size (negative or zero) - неверный размер массива (отрицательный или 0);
error 010: invalid function or declaration - неизвестная функция или декларация;
error 011: invalid outside functions - неверно вне функции;
error 012: invalid function call, not a valid address - неверный вызов функции, неверный адрес;
error 013: no entry point (no public functions) - нет точки входа (не public функция);
error 014: invalid statement; not in switch - неверный оператор; не в switch;
error 015: "default" case must be the last case in switch statement - "default" должен быть последним условием в switch;
error 016: multiple defaults in "switch" - несколько "default" в switch;
error 017: undefined symbol "%s" - неизвестный символ "%s";
error 018: initialization data exceeds declared size - данные массива превышают его размер;
error 019: not a label: %s" - не метка "%s";
error 020: invalid symbol name "%s" - неверное имя символа "%s";
error 021: symbol already defined: %s" - символ уже объявлен: "%s";
error 022: must be lvalue (non-constant) - должно быть левосторонним (нет постоянной);
error 023: array assignment must be simple assignment - назначение массива должно быть простым;
error 024: "break" or "continue" is out of context - "break" или "continue" вне контекста;
error 025: function heading differs from prototype - функция заголовка отличается от прототипа;
error 026: no matching "#if..." - не найдено "#if...";
error 027: invalid character constant - недопустимый символ в постоянной;
error 028: invalid subscript (not an array or too many subscripts): "%s" - неверный индекс (это не массив или слишком много индексов): "%s";
error 029: invalid expression, assumed zero - неверное выражение, нет результата;
error 030: compound statement not closed at the end of file - составной оператор не закрыт в конце файла;
error 031: unknown directive - неизвестная директива;
error 032: array index out of bounds (variable "%s") - индекс массива превышен;
error 033: array must be indexed (variable "%s") - массив должен быть проиндексирован;
error 034: argument does not have a default value (argument %d) - аргумент не имеет начального значения (аргумент %d);
error 035: argument type mismatch (argument %d) - несоответствие типа аргумента (аргумент %d);
error 036: empty statement - пустой оператор;
error 037: invalid string (possibly non-terminated string) - неправильная строка;
error 038: extra characters on line - лишние символы в строке;
error 039: constant symbol has no size - символьная константа не имеет размера;
error 040: duplicate "case" label (value %d) - несколько раз объявлен "case" с одним тем же параметром;
error 041: invalid ellipsis, array size is not known - размер массива неизвестен;
error 042: invalid combination of class specifiers - недопустимое сочетание класса;
error 043: character constant exceeds range for packed string - символьная константа превышает размер строки;
error 044: positional parameters must precede all named parameters - позиционные параметры должны предшествовать всем именованным параметрам;
error 045: too many function arguments - слишком много аргументов у функции;
error 046: unknown array size (variable "%s") - неизвестный размер массива;
error 047: array sizes do not match, or destination array is too small - размеры массива конфликтуют, либо целевой массив слишком маленький;
error 048: array dimensions do not match - размеры массива не совпадают;
error 049: invalid line continuation - неправильное продолжение строки;
error 050: invalid range - неверный диапазон;
error 051: invalid subscript, use "[ ]" operators on major dimensions - неправильный индекс, используйте "[]";
error 052: multi-dimensional arrays must be fully initialized - много-размерные массивы должны быть полностью определены;
error 053: exceeding maximum number of dimensions - превышение максимального числа измерений;
error 054: unmatched closing brace - не найдена закрывающаяся скобка;
error 055: start of function body without function header - начало функции без заголовка;
error 056: arrays, local variables and function arguments cannot be public (variable "%s") - массивы, локальные переменные и аргументы функции не могут быть общедоступными;
error 057: unfinished expression before compiler directive - незавершенное выражение для компилятора;
error 058: duplicate argument; same argument is passed twice - дублирование аргумента; Аргумент передается несколько раз;
error 059: function argument may not have a default value (variable "%s") - аргумент не может иметь значение по-умолчанию;
error 060: multiple "#else" directives between "#if ... #endif" - Несколько "#else" между "#if ... #endif" - несколько "#else" между "#if и #endif";
error 061: "#elseif" directive follows an "#else" directive - "#else" перед "#elseif";
error 062: number of operands does not fit the operator - количество операндов не соответствует оператору;
error 063: function result tag of operator "%s" must be "%s" - Результат функции %s должен быть %s;
error 064: cannot change predefined operators - невозможно изменить уже определенные операторы;
error 065: function argument may only have a single tag (argument %d) - в этой функции может быть только один аргумент;
error 066: function argument may not be a reference argument or an array (argument "%s") - аргумент функции не может быть ссылкой или массивом;
error 067: variable cannot be both a reference and an array (variable "%s") - Переменная не может быть как массив или ссылка;
error 068: invalid rational number precision in #pragma - неверное число в #pragma;
error 069: rational number format already defined - формат рационального числа уже определен;
error 070: rational number support was not enabled - рациональное число не поддерживается;
error 071: user-defined operator must be declared before use (function "%s") - объявленный оператор должен быть перед использованием;
error 072: "sizeof" operator is invalid on "function" symbols - оператор "sizeof" не может быть использован для символов функции;
error 073: function argument must be an array (argument "%s") - аргумент %s должен быть массивом;
error 074: #define %s must start with an alphabetic character - #define должен начинаться с буквы;
error 075: input line too long (after substitutions - введенная строка слишком длинная;
error 076: syntax *error in the expression, or invalid function call - неправильный синтаксис или неправильный вызов функции;
error 077: malformed UTF-8 encoding, or corrupted file: %s - плохая кодировка UTF-8 или плохой файл: %s;
error 078: function uses both "return" and "return <value>" - функция использует "return" и "return <значение>";
error 079: inconsistent return types (array & non-array) - несовместимость типов возвращенных результатов;
error 080: unknown symbol, or not a constant symbol (symbol "%s") - неизвестный или непостоянный символ: %s;
error 081: cannot take a tag as a default value for an indexed array parameter (symbol "%s") - не может принимать тег в качестве значения по умолчанию для параметра индексированного массива;
error 082: user-defined operators and native functions may not have states - созданные функции или операторы не имеют состояния;
error 083: a function may only belong to a single automaton (symbol "%s") - функция может принадлежать только к одной автоматизации;
error 084: state conflict: one of the states is already assigned to another implementation (symbol "%s") - конфликт состояния: одно из состояний уже назначено на другую реализацию;
error 085: no states are defined for function "%s" - нет состояний, определенных для функции "%s";
error 086: unknown automaton "%s" - неизвестная автоматизация "%s";
error 087: unknown state "%s" for automaton "%s" - неизвестное состояние "%s" в автоматизации "%s";
error 088: number of arguments does not match definition - количество аргументов не совпадает с объявленными в функции;
Posts: 418
Threads: 56
Joined: Aug 2009
Reputation:
0
25.05.2012, 09:30
(
Последний раз редактировалось AMEENAMEEN; 25.05.2012 в 12:10.
)
This is Fixed
Код:
C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(620) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(621) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(622) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(623) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(624) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(625) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(626) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(627) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(628) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(629) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(630) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(631) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(632) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(633) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(634) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(635) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(636) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(637) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(638) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(639) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(640) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(641) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(642) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(643) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(644) : error 020: invalid symbol name "" C:UsersgamesDesktopNew folder (46)cc rpgamemodesCiscoRP1.pwn(645) : error 020: invalid symbol name "" Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase 26 Errors.
Lines 621 — 645 , i dont see anything wrong with them , any ideas why
pawn Код:
new 7457o;
new 7456o;
new 7889o;
new 7882o;
new 7448o;
new 7557o;
new 16181o;
new 16157o;
new 7458o;
new 16186o;
new 16180o;
new 16179o;
new 16185o;
new 7470o;
new 16188o;
new 7471o;
new 16190o;
new 16103o;
new 16187o;
new 16189o;
new 16257o;
new 16174o;
new 16255o;
new 16173o;
new 16178o;
new 16184o;
Posts: 10,066
Threads: 38
Joined: Sep 2007
Reputation:
0
Variable names may not start with a number. They must start with a letter or an underscore. And this looks like something that’s been decompiled ..
Posts: 3,488
Threads: 16
Joined: Jun 2007
Reputation:
0
Posts: 418
Threads: 56
Joined: Aug 2009
Reputation:
0
Nope i am just creating new variables and wondering why they dont work , thanks ill start them with a letter
Содержание
- Error 020 invalid symbol name
- error 020: invalid symbol name
- error 020: invalid symbol name
- Error 020 invalid symbol name
- error 020: invalid symbol name
- error 020: invalid symbol name
- Форум Pawn.Wiki — Воплоти мечту в реальность!: Error 020 + Error 028 + Error 001 + Warning 215 — Форум Pawn.Wiki — Воплоти мечту в реальность!
Error 020 invalid symbol name
shel писал(а): Yopta, za bazar otvechau, skazal v sosedneu teme tupo vukladuvayte odobru a teper zadnuu podrybul? Tak delo ne poydet, bablo na stol yoba
error 020: invalid symbol name
- Список форумов‹AMX Mod X‹Скриптинг
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела «Болтовня».
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
error 020: invalid symbol name
vishnevskiy » 02 дек 2014, 19:26
Здравствуйте, сегодня решил переписать плагин со спавном коробок с оружием. Туда включил HE и дигл. При компиляции возникла ошибка:
Код: Выделить всё vish.sma(28) : error 020: invalid symbol name «»
Долго ломал голову, что с ней сделать. Короче прошу помощи!
if( total_presents == PRESENT_LIMIT )
<
console_print ( id , «Превышен лимит боксов!» , PRESENT_LIMIT )
return PLUGIN_HANDLED
>
new Float : origin [ 3 ]
entity_get_vector ( id , EV_VEC_origin , origin )
origin [ 2 ] -= 30.0
save_present ( id , origin )
return PLUGIN_HANDLED
>
public admin_present_remove ( id , level , cid )
<
if(! cmd_access ( id , level , cid , 1 )) return PLUGIN_HANDLED
remove_all_presents ()
console_print ( id , «Все боксы удалены на этот раунд!» )
return PLUGIN_HANDLED
>
public admin_present_stop ( id , level , cid )
<
if(! cmd_access ( id , level , cid , 1 )) return PLUGIN_HANDLED
remove_all_presents ()
total_presents = 0
console_print ( id , «Все боксы удалены на этой карте!» )
return PLUGIN_HANDLED
>
public admin_present_start ( id , level , cid )
<
if(! cmd_access ( id , level , cid , 1 ) || total_presents > 0 ) return PLUGIN_HANDLED
remove_all_presents ()
load_presents ()
console_print ( id , «Все боксы востановлены на этой карте!» )
return PLUGIN_HANDLED
>
public round_end ()
<
if(! total_presents ) return
remove_all_presents ()
>
public round_start ()
<
if(! total_presents ) return
remove_task ( 1337 )
set_task ( get_pcvar_float ( spawn_time ), «spawn_random_presents» , 1337 )
>
public spawn_random_presents ()
<
new num = random_num ( get_pcvar_num ( min_presents ), get_pcvar_num ( max_presents ))
if( num != 0 ) for(new ii = 0 ; ii num ; ii ++) spawn_present ( present_data [ random ( total_presents )])
>
public give_random_present ( ent , id )
<
new num = random_num ( 1 , 19 )
switch( num )
<
case 1 :
<
cs_set_weapon_ammo ( give_item ( id , «weapon_deagle» ), 1 )
cs_set_user_bpammo ( id , CSW_DEAGLE , 0 );
>
case 2 :
<
give_item ( id , «weapon_hegrenade» )
>
>
remove_entity ( ent )
>
public present_think ( ent )
<
if( get_pcvar_num ( present_light ))
<
static Float : origin [ 3 ]
entity_get_vector ( ent , EV_VEC_origin , origin )
engfunc ( EngFunc_MessageBegin , MSG_PVS , SVC_TEMPENTITY , origin , 0 )
write_byte ( TE_DLIGHT )
engfunc ( EngFunc_WriteCoord , origin [ 0 ])
engfunc ( EngFunc_WriteCoord , origin [ 1 ])
engfunc ( EngFunc_WriteCoord , origin [ 2 ])
write_byte ( get_pcvar_num ( present_light_radius ))
write_byte ( entity_get_int ( ent , EV_INT_iuser1 ))
write_byte ( entity_get_int ( ent , EV_INT_iuser2 ))
write_byte ( entity_get_int ( ent , EV_INT_iuser3 ))
write_byte ( 2 )
write_byte ( 0 )
message_end ()
>
if( get_pcvar_num ( present_rot ))
<
static Float : angles [ 3 ]
entity_get_vector ( ent , EV_VEC_angles , angles )
angles [ 1 ]—
entity_set_vector ( ent , EV_VEC_angles , angles )
>
entity_set_float ( ent , EV_FL_nextthink , halflife_time () + 0.01 )
>
public remove_all_presents () remove_entity_name ( «info_present» )
public load_presents ()
<
total_presents = 0
Источник
Error 020 invalid symbol name
evgeniy777 писал(а): Здравствуйте,вы можете написать плагин для ксс что бы можно было игроку не хорошему который играет и говорит не хорошие вещи про родных сломать хоят бы кс ?
error 020: invalid symbol name
- Список форумов‹AMX Mod X‹Скриптинг
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела «Болтовня».
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
error 020: invalid symbol name
vishnevskiy » 02 дек 2014, 19:26
Здравствуйте, сегодня решил переписать плагин со спавном коробок с оружием. Туда включил HE и дигл. При компиляции возникла ошибка:
Код: Выделить всё vish.sma(28) : error 020: invalid symbol name «»
Долго ломал голову, что с ней сделать. Короче прошу помощи!
if( total_presents == PRESENT_LIMIT )
<
console_print ( id , «Превышен лимит боксов!» , PRESENT_LIMIT )
return PLUGIN_HANDLED
>
new Float : origin [ 3 ]
entity_get_vector ( id , EV_VEC_origin , origin )
origin [ 2 ] -= 30.0
save_present ( id , origin )
return PLUGIN_HANDLED
>
public admin_present_remove ( id , level , cid )
<
if(! cmd_access ( id , level , cid , 1 )) return PLUGIN_HANDLED
remove_all_presents ()
console_print ( id , «Все боксы удалены на этот раунд!» )
return PLUGIN_HANDLED
>
public admin_present_stop ( id , level , cid )
<
if(! cmd_access ( id , level , cid , 1 )) return PLUGIN_HANDLED
remove_all_presents ()
total_presents = 0
console_print ( id , «Все боксы удалены на этой карте!» )
return PLUGIN_HANDLED
>
public admin_present_start ( id , level , cid )
<
if(! cmd_access ( id , level , cid , 1 ) || total_presents > 0 ) return PLUGIN_HANDLED
remove_all_presents ()
load_presents ()
console_print ( id , «Все боксы востановлены на этой карте!» )
return PLUGIN_HANDLED
>
public round_end ()
<
if(! total_presents ) return
remove_all_presents ()
>
public round_start ()
<
if(! total_presents ) return
remove_task ( 1337 )
set_task ( get_pcvar_float ( spawn_time ), «spawn_random_presents» , 1337 )
>
public spawn_random_presents ()
<
new num = random_num ( get_pcvar_num ( min_presents ), get_pcvar_num ( max_presents ))
if( num != 0 ) for(new ii = 0 ; ii num ; ii ++) spawn_present ( present_data [ random ( total_presents )])
>
public give_random_present ( ent , id )
<
new num = random_num ( 1 , 19 )
switch( num )
<
case 1 :
<
cs_set_weapon_ammo ( give_item ( id , «weapon_deagle» ), 1 )
cs_set_user_bpammo ( id , CSW_DEAGLE , 0 );
>
case 2 :
<
give_item ( id , «weapon_hegrenade» )
>
>
remove_entity ( ent )
>
public present_think ( ent )
<
if( get_pcvar_num ( present_light ))
<
static Float : origin [ 3 ]
entity_get_vector ( ent , EV_VEC_origin , origin )
engfunc ( EngFunc_MessageBegin , MSG_PVS , SVC_TEMPENTITY , origin , 0 )
write_byte ( TE_DLIGHT )
engfunc ( EngFunc_WriteCoord , origin [ 0 ])
engfunc ( EngFunc_WriteCoord , origin [ 1 ])
engfunc ( EngFunc_WriteCoord , origin [ 2 ])
write_byte ( get_pcvar_num ( present_light_radius ))
write_byte ( entity_get_int ( ent , EV_INT_iuser1 ))
write_byte ( entity_get_int ( ent , EV_INT_iuser2 ))
write_byte ( entity_get_int ( ent , EV_INT_iuser3 ))
write_byte ( 2 )
write_byte ( 0 )
message_end ()
>
if( get_pcvar_num ( present_rot ))
<
static Float : angles [ 3 ]
entity_get_vector ( ent , EV_VEC_angles , angles )
angles [ 1 ]—
entity_set_vector ( ent , EV_VEC_angles , angles )
>
entity_set_float ( ent , EV_FL_nextthink , halflife_time () + 0.01 )
>
public remove_all_presents () remove_entity_name ( «info_present» )
public load_presents ()
<
total_presents = 0
Источник
Форум Pawn.Wiki — Воплоти мечту в реальность!: Error 020 + Error 028 + Error 001 + Warning 215 — Форум Pawn.Wiki — Воплоти мечту в реальность!
- Pawn скриптинг
- Первая помощь
- Проблемы с компилированием
- Правила форума
- Просмотр новых публикаций
- Группа: Пользователи
- Сообщений: 7
- Регистрация: 06 апреля 20
Ошибка (4820) : error 020: invalid symbol name «»
Строка 4820:
Ошибки (8076):
(8076) : error 028: invalid subscript (not an array or too many subscripts): «speed_global_td»
(8076) : warning 215: expression has no effect
(8076) : error 001: expected token: «;», but found «]»
(8076) : error 029: invalid expression, assumed zero
(8076) : fatal error 107:
Строка 8076:
- Группа: Активные пользователи
- Сообщений: 827
- Регистрация: 25 июля 16
- Группа: Пользователи
- Сообщений: 7
- Регистрация: 06 апреля 20
Это где ошибка 20
- Группа: Пользователи
- Сообщений: 7
- Регистрация: 06 апреля 20
Это где ошибка 20
- Группа: Активные пользователи
- Сообщений: 827
- Регистрация: 25 июля 16
Сообщение отредактировал 20th century: 07 апреля 2020 — 22:46
- Группа: Пользователи
- Сообщений: 7
- Регистрация: 06 апреля 20
Появились такие ошибки
- Группа: Активные пользователи
- Сообщений: 827
- Регистрация: 25 июля 16
- Группа: Пользователи
- Сообщений: 7
- Регистрация: 06 апреля 20
- Группа: Активные пользователи
- Сообщений: 827
- Регистрация: 25 июля 16
Что бы каждый раз не писать сюда по мелочи, объясню. Ты создал глобальный текстдрав, но везде пытаешься работать с ним как с текстдравом для игрока.
По данному участку кода понял, что так и нужно, поэтому верни все обратно и создай текстдрав правильно.
Пример привёл с первым текстдравом, тебе нужно исправить все 25, если они тоже созданы как глобальные.
Сообщение отредактировал 20th century: 07 апреля 2020 — 23:16
Источник
- Команда форума
-
#1
[SourcePawn] Урок 2 — Установка и компиляция плагинов
<- К содержанию
- Установка плагинов:
Типы файлов:
- .smx— Сам плагин после компилирования (нужен для работы).
Расположение: addons/sourcemod/plugins/ - .sp — Файл с исходным кодом (исходник нужен для компиляции, не нужен для работы).
Расположение: addons/sourcemod/scripting/ - .phrases.txt — Файл перевода (нужен для работы).
Расположение: addons/sourcemod/translations/ - .inc — Файл, в котором хранятся функции плагина (нужен для компиляции, не нужен для работы).
Расположение: addons/sourcemod/scripting/include/ - .cfg — Файл конфигурации плагина (нужен для работы).
Расположение зависит от плагина. Часто генерируется по пути cfg/sourcemod/ - .txt — Может быть использован как конфиг или как языковой файл (нужен для работы).
Расположение зависит от плагина. - .ini — Конфигурационный файл (нужен для работы).
Расположение зависит от плагина.
Для установки плагина нужно разложить все файлы плагина по папкам указанным выше.
Чтобы проверить работу плагина:
Запускаем сервер, заходим в его консоль и пишем sm plugins list . В консоли появиться список работающих плагинов:
Проверяем есть ли в списке установленный Вами плагин, если он там есть, значит Вы сделали все правильно.
- Команды SourceMod для работы с плагинами:
sm plugins команда
Команды:- info — Information about a plugin/Показывает информацию о плагине
- list — Show loaded plugins/Выводит список установленных плагинов
- load — Load a plugin/Загружает указанный плагин
- load_lock — Prevents any more plugins from being loaded/Блокирует загрузку плагинов
- load_unlock — Re-enables plugin loading/Снимает блокировку загрузки плагинов
- refresh — Reloads/refreshes all plugins in the plugins folder/Обновляет/перезагружает загруженные плагины
- reload — Reloads a plugin/Перезагружает указанный плагин
- unload — Unload a plugin/Выгружает указанный плагин
- unload_all — Unloads all plugins/Выгружает все плагины
- .smx— Сам плагин после компилирования (нужен для работы).
- Компиляция плагинов:
Для редактирования исходников плагинов рекомендую использовать редактор Notepad++ (кликабельно)
- Если у вас код не в файле .sp, а например, с форума то:
- Создайте новый файл с расширением .sp
- Откройте его с помощь notepad++ (см. выше)
- Установите для него кодировку UTF-8 без BOM
- Скопируйте в него нужный код
- Сохраните изменения
- Произведите компиляцию (см. ниже)
- Компиляция на Windows
Скачайте SourceMod и распакуйте файлы из архива (в частности папку addons/sourcemod/scripting/ со всем её содержимым) в любое место, например, на рабочий стол. Будем называть её «папкой компилятора«. Из всего её содержимого необходимы только 2 файла: compile.exe, spcomp.exe и папка include.
Затем положите в папку компилятора исходники вашего плагина (файлы с расширением *.sp и если есть файлы *.inc в папку include/).
Отредактируйте исходник как вам нужно и затемперетащите главный файл .sp на сompile.exe — вы увидите черное окно с отчетом о компиляции.
Если все в порядке и ошибок нет закройте это окно и можете забирать *.smx файл из папки compiled/.Если у вас возникли ошибки при компиляции — необходимо их исправить.
- Компиляция на Linux
Чтобы скомпилировать плагин в unix системах:
- Откройте терминал (консоль)
- Перейдите в директорию /addons/sourcemod/scripting/ с помощью команды cd
- Скопируйте файл содержащий исходный код плагина (имеет расширение *.sp) в эту директорию командой cp
- Для компиляции некоторых плагинов нужны *.inc файлы которые нужно копировать в папку addons/sourcemod/scripting/include и затем компилировать плагин
- Выполните команду:
./compile.sh имя_плагина.sp
Плагин должен скомпилироваться.
Внимание! Нет разницы на какой OC компилировать плагины. Если ваш сервер работает на Linux, то плагины скомпилированные на Windows там так же будут работать.
Если при компиляции возникли ошибки вам сюда -> Ошибки и предупреждения при компиляции
Часть информации взята здесь.
- Если у вас код не в файле .sp, а например, с форума то:
Последнее редактирование: 21 Июл 2017
- Команда форума
-
#2
Возможные ошибки при компиляции
Для начала разберём разницу между ошибкой (error) и предупреждением (warning).
- Предупреждение — то, что может выдать Вам компилятор в случае «некритичной ошибки» (По мнению компилятора) допущенной в исходном коде плагина. Такая ошибка не будет влиять на работу плагина (Под сомнением), но лучше писать так, чтобы компилятор не ругался.
- Ошибка — ситуация, в которой компилятор «откажет» Вам в компилировании плагина, т.е. он не будет компилировать Ваш плагин, пока Вы не устраните ошибку в исходном коде.
Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «
сомневается
«)
Коды ошибок
- error 001: expected token: «%s», but found «%s» — ожидался символ: «%s», но был найден «%s»;
- error 002: only a single statement (or expression) can follow each «case» — только одно заявление (или выражение) могут следовать за «case»;
- error 003: declaration of a local variable must appear in a compound block — объявленная локальная переменная должна использоваться в этом же блоке;
- error 004: function «%s» is not implemented — функция %s не реализована;
- error 005: function may not have arguments — функция не имеет аргументов;
- error 006: must be assigned to an array — должен быть присвоен массив;
- error 007: operator cannot be redefined — оператор не может быть установлен еще раз;
- error 008: must be a constant expression; assumed zero — должно быть постоянным выражением; равным нулю;
- error 009: invalid array size (negative or zero) — неверный размер массива (отрицательный или 0);
- error 010: invalid function or declaration — неизвестная функция или декларация;
- error 011: invalid outside functions — неверно вне функции;
- error 012: invalid function call, not a valid address — неверный вызов функции, неверный адрес;
- error 013: no entry point (no public functions) — нет точки входа (не public функция);
- error 014: invalid statement; not in switch — неверный оператор; не в switch;
- error 015: «default» case must be the last case in switch statement — «default» должен быть последним условием в switch;
- error 016: multiple defaults in «switch» — несколько «default» в switch;
- error 017: undefined symbol «%s» — неизвестный символ «%s»;
- error 018: initialization data exceeds declared size — данные массива превышают его размер;
- error 019: not a label: %s» — не метка «%s»;
- error 020: invalid symbol name «%s» — неверное имя символа «%s»;
- error 021: symbol already defined: %s» — символ уже объявлен: «%s»;
- error 022: must be lvalue (non-constant) — должно быть левосторонним (нет постоянной);
- error 023: array assignment must be simple assignment — назначение массива должно быть простым;
- error 024: «break» or «continue» is out of context — «break» или «continue» вне контекста;
- error 025: function heading differs from prototype — функция заголовка отличается от прототипа;
- error 026: no matching «#if…» — не найдено «#if…»;
- error 027: invalid character constant — недопустимый символ в постоянной;
- error 028: invalid subscript (not an array or too many subscripts): «%s» — неверный индекс (это не массив или слишком много индексов): «%s»;
- error 029: invalid expression, assumed zero — неверное выражение, нет результата;
- error 030: compound statement not closed at the end of file — составной оператор не закрыт в конце файла;
- error 031: unknown directive — неизвестная директива;
- error 032: array index out of bounds (variable «%s») — индекс массива превышен;
- error 033: array must be indexed (variable «%s») — массив должен быть проиндексирован;
- error 034: argument does not have a default value (argument %d) — аргумент не имеет начального значения (аргумент %d);
- error 035: argument type mismatch (argument %d) — несоответствие типа аргумента (аргумент %d);
- error 036: empty statement — пустой оператор;
- error 037: invalid string (possibly non-terminated string) — неправильная строка;
- error 038: extra characters on line — лишние символы в строке;
- error 039: constant symbol has no size — символьная константа не имеет размера;
- error 040: duplicate «case» label (value %d) — несколько раз объявлен «case» с одним тем же параметром;
- error 041: invalid ellipsis, array size is not known — размер массива неизвестен;
- error 042: invalid combination of class specifiers — недопустимое сочетание класса;
- error 043: character constant exceeds range for packed string — символьная константа превышает размер строки;
- error 044: positional parameters must precede all named parameters — позиционные параметры должны предшествовать всем именованные параметры;
- error 045: too many function arguments — слишком много аргументов у функции;
- error 046: unknown array size (variable «%s») — неизвестный размер массива;
- error 047: array sizes do not match, or destination array is too small — размеры массива конфликтуют, либо целевой массив слишком маленький;
- error 048: array dimensions do not match — размеры массива не совпадают;
- error 049: invalid line continuation — неправильное продолжение строки;
- error 050: invalid range — неверный диапазон;
- error 051: invalid subscript, use «[ ]» operators on major dimensions — неправильный индекс, используйте «[]»;
- error 052: multi-dimensional arrays must be fully initialized — много-размерные массивы должны быть полностью определены;
- error 053: exceeding maximum number of dimensions — превышение максимального числа измерений;
- error 054: unmatched closing brace — не найдена закрывающаяся скобка;
- error 055: start of function body without function header — начало функции без заголовка;
- error 056: arrays, local variables and function arguments cannot be public (variable «%s») — ?????;
- error 057: unfinished expression before compiler directive — незавершенное выражение для компилятора;
- error 058: duplicate argument; same argument is passed twice — дублирование аргумента; Аргумент передается несколько раз;
- error 059: function argument may not have a default value (variable «%s») — аргумент не может иметь значение по-умолчанию;
- error 060: multiple «#else» directives between «#if … #endif» — Несколько «#else» между «#if … #endif» — несколько «#else» между «#if и #endif»;
- error 061: «#elseif» directive follows an «#else» directive — «#else» перед «#elseif»;
- error 062: number of operands does not fit the operator — число операндов не соответствует оператору;
- error 063: function result tag of operator «%s» must be «%s» — Результат функции %s должен быть %s;
- error 064: cannot change predefined operators — невозможно изменить уже определенные операторы;
- error 065: function argument may only have a single tag (argument %d) — в этой функции может быть только один аргумент;
- error 066: function argument may not be a reference argument or an array (argument «%s») — аргумент функции не может быть ссылкой или массивом;
- error 067: variable cannot be both a reference and an array (variable «%s») — Переменная не может быть как массив или ссылка;
- error 068: invalid rational number precision in #pragma — неверное число в #pragma;
- error 069: rational number format already defined — формат рационального числа уже определен;
- error 070: rational number support was not enabled — рациональное число не поддерживается;
- error 071: user-defined operator must be declared before use (function «%s») — объявленный оператор должен быть перед использованием;
- error 072: «sizeof» operator is invalid on «function» symbols — оператор «sizeof» не может быть использован для символов функции;
- error 073: function argument must be an array (argument «%s») — аргумент %s должен быть массивом;
- error 074: #define %s must start with an alphabetic character — #define должен начинаться с буквы;
- error 075: input line too long (after substitutions — введенная строка слишком длинная;
- error 076: syntax *error in the expression, or invalid function call — неправильный синтаксис или неправильный вызов функции;
- error 077: malformed UTF-8 encoding, or corrupted file: %s — плохая кодировка UTF-8 или плохой файл: %s;
- error 078: function uses both «return» and «return <value>» — функция использует «return» и «return <значение>»;
- error 079: inconsistent return types (array & non-array) — несовместимость типов возвращенных результатов;
- error 080: unknown symbol, or not a constant symbol (symbol «%s») — неизвестный или непостоянный символ: %s;
- error 081: cannot take a tag as a default value for an indexed array parameter (symbol «%s») — не могу принять тег в качестве значения по умолчанию для индексированного параметра-массива (символ «% S»);
- error 082: user-defined operators and native functions may not have states — созданные функции или операторы не имеют состояния;
- error 083: a function may only belong to a single automaton (symbol «%s») — функция может принадлежать только к одной автоматизации;
- error 084: state conflict: one of the states is already assigned to another implementation (symbol «%s») — Кофликт state(функция созданий структур):одна из state уже создана в другом месте(символ %s);
- error 085: no states are defined for function «%s» — нет состояний, определенных для функции «%s»;
- error 086: unknown automaton «%s» — неизвестная автоматизация «%s»;
- error 087: unknown state «%s» for automaton «%s» — неизвестное состояние «%s» в автоматизации «%s»;
- error 088: number of arguments does not match definition — количество аргументов не совпадает с объявленными в функции;
Коды «Фатальных ошибок»
- fatal error 100: cannot read from file: «%s» — невозможно прочитать из файла «%s»;
- fatal error 107: too many error messages on one line — слишком много сообщений об ошибке в одной строке;
Коды предупреждений
- warning 200: symbol «%s» is truncated to 31 characters — название переменной «%s» обрезано до 31 символа;
- warning 201: redefinition of constant/macro (symbol «%s») — повторно установлена постоянная/макро (переменная «%s»);
- warning 202: number of arguments does not match definition — несовпадение количества аргументов;
- warning 203: symbol is never used: «%s» — переменная никогда не использовалась: «%s»;
- warning 204: symbol is assigned a value that is never used: «%s» — переменной установлено значение которое никогда не использовалось: «%s»;
- warning 209: function «%s» should return a value — функция «%s» ничего не возвращает;
- warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
- warning 213: tag mismatch — несоответствие аргументов;
- warning 215: expression has no effect — выражение не имеет смысла;
- warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
- warning 217: loose indentation — не выровненная строка;
- warning 219: local variable «%s» shadows a variable at a preceding level — локальная переменная «%s» встречается на предыдущем уровне;
- warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — неопределенный размер массива в «sizeof» выражении (переменная «%s»);
- warning 225: unreachable code — невыполнимый код;
- warning 234: symbol «%s» is marked as deprecated: Do not use this function — Функция не рекомендуется к использованию;;
- warning 235: public function lacks forward declaration (symbol «%s») — у public функции отсутствует forward (символ «%s»);
Последнее редактирование: 6 Сен 2016
-
#3
Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «сомневается»)
Я бы пример добавил:
Например если ошибка на 37 строке:
/home/home/GIT/addons/sourcemod/scripting/my_plugin.sp(37) : error 017: undefined symbol «EventHookM»
+ ещё стоит написать что если даже при компиляции не возникло ошибок и предупреждений, то нужно проверить /addons/sourcemod/logs/errors<сегодняшнее число>.log после того как плагин немного поработает.
-
#4
Возможные ошибки при компиляции
Для начала разберём разницу между ошибкой (error) и предупреждением (warning).
- Предупреждение — то, что может выдать Вам компилятор в случае «некритичной ошибки» (По мнению компилятора) допущенной в исходном коде плагина. Такая ошибка не будет влиять на работу плагина (Под сомнением), но лучше писать так, чтобы компилятор не ругался.
Ошибка — ситуация, в которой компилятор «откажет» Вам в компилировании плагина, т.е. он не будет компилировать Ваш плагин, пока Вы не устраните ошибку в исходном коде.Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «
сомневается
«)
Коды ошибок
- error 001: expected token: «%s», but found «%s» — ожидался символ: «%s», но был найден «%s»;
error 002: only a single statement (or expression) can follow each «case» — только одно заявление (или выражение) могут следовать за «case»;
error 003: declaration of a local variable must appear in a compound block — объявленная локальная переменная должна использоваться в этом же блоке;
error 004: function «%s» is not implemented — функция %s не реализована;
error 005: function may not have arguments — функция не имеет аргументов;
error 006: must be assigned to an array — должен быть присвоен массив;
error 007: operator cannot be redefined — оператор не может быть установлен еще раз;
error 008: must be a constant expression; assumed zero — должно быть постоянным выражением; равным нулю;
error 009: invalid array size (negative or zero) — неверный размер массива (отрицательный или 0);
error 010: invalid function or declaration — неизвестная функция или декларация;
error 011: invalid outside functions — неверно вне функции;
error 012: invalid function call, not a valid address — неверный вызов функции, неверный адрес;
error 013: no entry point (no public functions) — нет точки входа (не public функция);
error 014: invalid statement; not in switch — неверный оператор; не в switch;
error 015: «default» case must be the last case in switch statement — «default» должен быть последним условием в switch;
error 016: multiple defaults in «switch» — несколько «default» в switch;
error 017: undefined symbol «%s» — неизвестный символ «%s»;
error 018: initialization data exceeds declared size — данные массива превышают его размер;
error 019: not a label: %s» — не метка «%s»;
error 020: invalid symbol name «%s» — неверное имя символа «%s»;
error 021: symbol already defined: %s» — символ уже объявлен: «%s»;
error 022: must be lvalue (non-constant) — должно быть левосторонним (нет постоянной);
error 023: array assignment must be simple assignment — назначение массива должно быть простым;
error 024: «break» or «continue» is out of context — «break» или «continue» вне контекста;
error 025: function heading differs from prototype — функция заголовка отличается от прототипа;
error 026: no matching «#if…» — не найдено «#if…»;
error 027: invalid character constant — недопустимый символ в постоянной;
error 028: invalid subscript (not an array or too many subscripts): «%s» — неверный индекс (это не массив или слишком много индексов): «%s»;
error 029: invalid expression, assumed zero — неверное выражение, нет результата;
error 030: compound statement not closed at the end of file — составной оператор не закрыт в конце файла;
error 031: unknown directive — неизвестная директива;
error 032: array index out of bounds (variable «%s») — индекс массива превышен;
error 033: array must be indexed (variable «%s») — массив должен быть проиндексирован;
error 034: argument does not have a default value (argument %d) — аргумент не имеет начального значения (аргумент %d);
error 035: argument type mismatch (argument %d) — несоответствие типа аргумента (аргумент %d);
error 036: empty statement — пустой оператор;
error 037: invalid string (possibly non-terminated string) — неправильная строка;
error 038: extra characters on line — лишние символы в строке;
error 039: constant symbol has no size — символьная константа не имеет размера;
error 040: duplicate «case» label (value %d) — несколько раз объявлен «case» с одним тем же параметром;
error 041: invalid ellipsis, array size is not known — размер массива неизвестен;
error 042: invalid combination of class specifiers — недопустимое сочетание класса;
error 043: character constant exceeds range for packed string — символьная константа превышает размер строки;
error 044: positional parameters must precede all named parameters — позиционные параметры должны предшествовать всем именованные параметры;
error 045: too many function arguments — слишком много аргументов у функции;
error 046: unknown array size (variable «%s») — неизвестный размер массива;
error 047: array sizes do not match, or destination array is too small — размеры массива конфликтуют, либо целевой массив слишком маленький;
error 048: array dimensions do not match — размеры массива не совпадают;
error 049: invalid line continuation — неправильное продолжение строки;
error 050: invalid range — неверный диапазон;
error 051: invalid subscript, use «[ ]» operators on major dimensions — неправильный индекс, используйте «[]»;
error 052: multi-dimensional arrays must be fully initialized — много-размерные массивы должны быть полностью определены;
error 053: exceeding maximum number of dimensions — превышение максимального числа измерений;
error 054: unmatched closing brace — не найдена закрывающаяся скобка;
error 055: start of function body without function header — начало функции без заголовка;
error 056: arrays, local variables and function arguments cannot be public (variable «%s») — ?????;
error 057: unfinished expression before compiler directive — незавершенное выражение для компилятора;
error 058: duplicate argument; same argument is passed twice — дублирование аргумента; Аргумент передается несколько раз;
error 059: function argument may not have a default value (variable «%s») — аргумент не может иметь значение по-умолчанию;
error 060: multiple «#else» directives between «#if … #endif» — Несколько «#else» между «#if … #endif» — несколько «#else» между «#if и #endif»;
error 061: «#elseif» directive follows an «#else» directive — «#else» перед «#elseif»;
error 062: number of operands does not fit the operator — число операндов не соответствует оператору;
error 063: function result tag of operator «%s» must be «%s» — Результат функции %s должен быть %s;
error 064: cannot change predefined operators — невозможно изменить уже определенные операторы;
error 065: function argument may only have a single tag (argument %d) — в этой функции может быть только один аргумент;
error 066: function argument may not be a reference argument or an array (argument «%s») — аргумент функции не может быть ссылкой или массивом;
error 067: variable cannot be both a reference and an array (variable «%s») — Переменная не может быть как массив или ссылка;
error 068: invalid rational number precision in #pragma — неверное число в #pragma;
error 069: rational number format already defined — формат рационального числа уже определен;
error 070: rational number support was not enabled — рациональное число не поддерживается;
error 071: user-defined operator must be declared before use (function «%s») — объявленный оператор должен быть перед использованием;
error 072: «sizeof» operator is invalid on «function» symbols — оператор «sizeof» не может быть использован для символов функции;
error 073: function argument must be an array (argument «%s») — аргумент %s должен быть массивом;
error 074: #define %s must start with an alphabetic character — #define должен начинаться с буквы;
error 075: input line too long (after substitutions — введенная строка слишком длинная;
error 076: syntax *error in the expression, or invalid function call — неправильный синтаксис или неправильный вызов функции;
error 077: malformed UTF-8 encoding, or corrupted file: %s — плохая кодировка UTF-8 или плохой файл: %s;
error 078: function uses both «return» and «return <value>» — функция использует «return» и «return <значение>»;
error 079: inconsistent return types (array & non-array) — несовместимость типов возвращенных результатов;
error 080: unknown symbol, or not a constant symbol (symbol «%s») — неизвестный или непостоянный символ: %s;
error 081: cannot take a tag as a default value for an indexed array parameter (symbol «%s») — не могу принять тег в качестве значения по умолчанию для индексированного параметра-массива (символ «% S»);
error 082: user-defined operators and native functions may not have states — созданные функции или операторы не имеют состояния;
error 083: a function may only belong to a single automaton (symbol «%s») — функция может принадлежать только к одной автоматизации;
error 084: state conflict: one of the states is already assigned to another implementation (symbol «%s») — Кофликт state(функция созданий структур):одна из state уже создана в другом месте(символ %s);
error 085: no states are defined for function «%s» — нет состояний, определенных для функции «%s»;
error 086: unknown automaton «%s» — неизвестная автоматизация «%s»;
error 087: unknown state «%s» for automaton «%s» — неизвестное состояние «%s» в автоматизации «%s»;
error 088: number of arguments does not match definition — количество аргументов не совпадает с объявленными в функции;Коды «Фатальных ошибок»
- fatal error 100: cannot read from file: «%s» — невозможно прочитать из файла «%s»;
fatal error 107: too many error messages on one line — слишком много сообщений об ошибке в одной строке;Коды предупреждений
- warning 200: symbol «%s» is truncated to 31 characters — название переменной «%s» обрезано до 31 символа;
warning 201: redefinition of constant/macro (symbol «%s») — повторно установлена постоянная/макро (переменная «%s»);
warning 202: number of arguments does not match definition — несовпадение количества аргументов;
warning 203: symbol is never used: «%s» — переменная никогда не использовалась: «%s»;
warning 204: symbol is assigned a value that is never used: «%s» — переменной установлено значение которое никогда не использовалось: «%s»;
warning 209: function «%s» should return a value — функция «%s» ничего не возвращает;
warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
warning 213: tag mismatch — несоответствие аргументов;
warning 215: expression has no effect — выражение не имеет смысла;
warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
warning 217: loose indentation — не выровненная строка;
warning 219: local variable «%s» shadows a variable at a preceding level — локальная переменная «%s» встречается на предыдущем уровне;
warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — неопределенный размер массива в «sizeof» выражении (переменная «%s»);
warning 225: unreachable code — невыполнимый код;
warning 234: symbol «%s» is marked as deprecated: Do not use this function — Функция не рекомендуется к использованию;;
warning 235: public function lacks forward declaration (symbol «%s») — у public функции отсутствует forward (символ «%s»);
Мой пост
- Команда форума
-
#5
Я нашел в базе своего старого форума, решил что будет полезно
-
#6
Я нашел в базе своего старого форума, решил что будет полезно
Я знаю, поэтому и улыбнуло)
- Команда форума
-
#7
@Антон Облаков, spcomp.exe так же обязан лежать в папке с компилятором.
-
#9
Ещё было бы прекрасней, по пару примеров исправления ошибок и предупреждений =).
Оффтоп
- Команда форума
-
#10
@alexmy, разве перевода не достаточно? Как по мне — вполне.
- Команда форума
-
#11
Ещё было бы прекрасней, по пару примеров исправления ошибок и предупреждений =).
Что именно интересует? Могу написать.
-
#12
пару примеров исправления ошибок и предупреждений
Можно создать основную тему по исправлению
error/warning
, по мере наполнения базы вопросов/ответов, рядом с ‘Кодом №’ — сделать отсылки на примерное решение.
В самой теме перед реквестом, обязательное прочтение (‘Кодом №’) на уже готовые более-менее решения.
-
#13
Смысл такой, есть вообщем старые плагины и синтаксис там соответственно древний :D. А при компиляции под новым синтаксисом, соответственно ошибок куча. Меня интересует сама «корректировка» под новый синтаксис. Вот плагин [L4D(2)] MultiSlots — AlliedModders куча ошибок, меня интересует сами части исправления. В интернете нечего подобного нету попадает хлам всякий и не более.
- Команда форума
-
#14
@alexmy, оно даже под 1.7 не компилится.
-
#15
@alexmy, оно даже под 1.7 не компилится.
Посмотреть вложение 21768
И такого хлама все больше и больше будет с обновлением SM :D. Вот хотелось бы хотя бы простые примеры с исправление. не обязательно с этим плагином.
- Команда форума
-
#16
@alexmy, тут проблема вовсе не в СМ.
Ошибка 017 (она же «Undefined symbol») сигнализирует о том, что есть вызов функции или применение переменной, которая не существует.
-
#17
@alexmy, тут проблема вовсе не в СМ.
Ошибка 017 (она же «Undefined symbol») сигнализирует о том, что есть вызов функции или применение переменной, которая не существует.
Ну вот я пробовал компилятором 1.5.3 почему то не выдает не одной ошибки и не предупреждение. Вот ошибка с плагина по ссылке
error 017: undefined symbol "SpawnFakeClientAndTeleport"
Вот это часть:
Оффтоп
тут её не должно быть… по сути или я что то не понимаю или компилятор в другой части когда находит это ошибку и бьет по всем SpawnFakeClientAndTeleport
-
#18
старые плагины и синтаксис там соответственно древний :D. А при компиляции под новым синтаксисом, соответственно ошибок куча. Меня интересует сама «корректировка» под новый синтаксис.
Ошибки ввида ‘error 147: new-style declarations are required’ при ‘#pragma newdecls required’ лучше преобрести отдельную тему ‘new-style SourcePawn Transitional Syntax’ , например если @R1KO согласится, то за основу содержания ‘Темы Сообщения’ — перевода на новый синтаксис, можно взять Ядро плагина — [VIP] Core (либо другой, где присутствует множество функций) — [Shop] Core, Ядро плагина — [Shop] Core (Fork).
Что имеем:
#a. некоторый разбор перевода new-style.
#b. перевод большого выбранного ядра.
#c. возможное нахождение трудно замечаемых ошибок/недочетов.
#d. отсутствующие примеры функций будут позже в комментариях.
Если с выходом нового sm — старый синтаксис будет обратно
не совместим
, то к этому времени у большенства будет имется некий опыт, для перевода
не
обновляемых
нужных
плагинов, на актуальный sm.
Чем больше придерживаются к актуальному, прежде всего стабильному sm — тем ошибки идентичные, которые легче найти/отписать решение, либо иначе самому написать в BugReport т.к. ситуация позволяет.
P.S.:
для (v34) старее sm_1.7- есть обновляемая тема [CS:S v34] SourceMod 1.6.x/1.7.x/1.8.x.
Если создавать эти темы, то лучше именно обладателю ядра @R1KO, @FrozDark, …, т.к. может быть будет не приятно, если будут иные «ковырять» код.
И если согласятся, то думаю другие тоже подключаться.
Или просто написать гайд по переводу Ru:Introduction to SourcePawn 1.7, SourcePawn Transitional Syntax и простеньких «побольше» примеров.
Последнее редактирование: 3 Мар 2017
- Команда форума
-
#19
@DarklSide, у меня уже есть отдельная версия, которую я буду переводить. можно на её примере
-
#20
@R1KO, тогда могу присоединится, т.к. большенство действий является «однотипное» для большого кол-ва кода.
При этом
пометить
места, которые могут войти в содержание темы.