Shadows In Rain писал(а): Юля-Юлечка, на технических форумах любая проблема решается оченнь легко. Нужно просто показать сиськи. С пруфами.
#pragma dynamic 131072 //I used to much memory =(
/*
* CVARs:
* - These CVARS can be changed at any time during round!
* sj_kick (default: 650) - Default Kicking Speed.
* sj_score (default: 15) - Scores needed to win a round.
* sj_reset (default: 30.0) - Ball reset time, to respawn at ball spawn location.
* sj_goalsafety (default: 650) - Distance around Mascot, that does damage to enemy.
* sj_random (default: 1) - Turns Team Randomizing ON/OFF.
*
* Requires: AMXX 1.75+
*
* Author: OneEyed
* IRC: #soccerjam (irc.gamesurge.net)
* Website: Вы должны зарегистрироваться, чтобы видеть ссылки.
*/
/* ------------------------------------------------------------------------- */
/* /----------------------- START OF CUSTOMIZATION -----------------------/ */
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
/* /------------ CUSTOM DEFINES ------------ CUSTOM DEFINES ------------/ */
/* ------------------------------------------------------------------------- */
// Disable knife disarm ? (Leaves only ball disarm)
// Comment this define to disable.
#define KNIFE_DISARM_ON
//When player reaches MAX level, they receive this many levels.
#define MAX_LVL_BONUS 1
//Max levels for each upgrade
#define MAX_LVL_STAMINA 5
#define MAX_LVL_STRENGTH 5
#define MAX_LVL_AGILITY 5
#define MAX_LVL_DEXTERITY 5
#define MAX_LVL_DISARM 5
#define MAX_LVL_POWERPLAY 5
//Prices for each upgrade.
//price = ((UpgradeLevel * UpgradePrice) / 2) + UpgradePrice
#define EXP_PRICE_STAMINA 220
#define EXP_PRICE_STRENGTH 200
#define EXP_PRICE_AGILITY 300
#define EXP_PRICE_DEXTERITY 200
#define EXP_PRICE_DISARM 200
//Experience per stat.
#define EXP_GOALY 100 //for goaly save and goaly points.
#define EXP_STEAL 100
#define EXP_KILL 100
#define EXP_ASSIST 200
#define EXP_GOAL 100
#define BASE_HP 100 //starting hp
#define BASE_SPEED 250.0 //starting run speed
#define BASE_DISARM 10 //starting disarm from lvl 1
#define COUNTDOWN_TIME 10 //Countdown time between rounds.
#define GOALY_DELAY 8.0 //Delay for goaly exp
//Curve Ball Defines
#define CURVE_ANGLE 15 //Angle for spin kick multipled by current direction.
#define CURVE_COUNT 6 //Curve this many times.
#define CURVE_TIME 0.2 //Time to curve again.
#define DIRECTIONS 2 //# of angles allowed.
#define ANGLEDIVIDE 6 //Divide angle this many times for curve.
//Misc. amounts
#define AMOUNT_LATEJOINEXP 100 //latejoinexp * each scored point.
#define AMOUNT_POWERPLAY 5 //added bonus to STR and AGI per powerplay lvl.
#define AMOUNT_GOALY 7 //Goaly camper exp
//Amount of points for each upgrade.
#define AMOUNT_STA 20 //Health per lvl
#define AMOUNT_STR 30 //Stronger kicking per lvl
#define AMOUNT_AGI 13 //Faster Speed per lvl
#define AMOUNT_DEX 10 //Better Catching
#define AMOUNT_DISARM 2 //Disarm ball chance (disarm lvl * this) if random num 1-100 < disarm
#define DISARM_MULTIPLIER 3
/* ------------------------------------------------------------------------- */
/* /---------------- TEAM NAMES ------------ TEAM NAMES ------------/ */
/* ------------------------------------------------------------------------- */
#define TEAMS 4 //Don't edit this.
//Names to be put on scoreboard.
static const TeamNames[TEAMS][] = {
"NULL",
"Terr", //Terrorist Team
"CT", //CT Team
"NULL"
}
/* ------------------------------------------------------------------------- */
/* /---------------- MODELS ---------------- MODELS ----------------/ */
/* ------------------------------------------------------------------------- */
//You may change the ball model. Just give correct path of new model.
new ball[] = "models/kickball/ball.mdl"
static const TeamMascots[2][] = {
"models/kingpin.mdl", //TERRORIST MASCOT
"models/garg.mdl" //CT MASCOT
}
/* ------------------------------------------------------------------------- */
/* /---------------- COLORS ---------------- COLORS ----------------/ */
/* ------------------------------------------------------------------------- */
//Format is RGB 0-255
//TEAM MODEL GLOW COLORS
#define TERR_GLOW_RED 250
#define TERR_GLOW_GREEN 10
#define TERR_GLOW_BLUE 10
#define CT_GLOW_RED 10
#define CT_GLOW_GREEN 10
#define CT_GLOW_BLUE 250
//TEAM HUD METER COLOR (Turbo/Curve Angle meters)
#define TERR_METER_RED 250
#define TERR_METER_GREEN 10
#define TERR_METER_BLUE 10
#define CT_METER_RED 10
#define CT_METER_GREEN 10
#define CT_METER_BLUE 250
//BALL GLOW COLOR (default: yellow) //it glows only one color
#define BALL_RED 255
#define BALL_GREEN 200
#define BALL_BLUE 100
//BALL BEAM
#define BALL_BEAM_WIDTH 5
#define BALL_BEAM_LIFE 10
#define BALL_BEAM_RED 250
#define BALL_BEAM_GREEN 80
#define BALL_BEAM_BLUE 10
#define BALL_BEAM_ALPHA 175
/* ------------------------------------------------------------------------- */
/* /---------------- SOUNDS ---------------- SOUNDS ----------------/ */
/* ------------------------------------------------------------------------- */
//-- NOTE: Sounds must be located in sound/kickball/ folder.
new BALL_BOUNCE_GROUND[] = "kickball/bounce.wav"
new BALL_RESPAWN[] = "kickball/returned.wav"
new BALL_KICKED[] = "kickball/kicked.wav"
new BALL_PICKED_UP[] = "kickball/gotball.wav"
new UPGRADED_MAX_LEVEL[] = "kickball/levelup.wav"
new ROUND_START[] = "kickball/prepare.wav"
new SCORED_GOAL[] = "kickball/distress.wav"
new STOLE_BALL_FAST[] = "kickball/pussy.wav"
//When a goal is scored, one of these will randomly play.
#define MAX_SOUNDS 6
new SCORED_SOUNDS[MAX_SOUNDS][] = {
"kickball/amaze.wav",
"kickball/laugh.wav",
"kickball/perfect.wav",
"kickball/diebitch.wav",
"kickball/bday.wav",
"kickball/boomchakalaka.wav"
}
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
/* /------------------------ END OF CUSTOMIZATION ------------------------/ */
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
/* ------------ DO NOT EDIT BELOW ---------------------------------------------------------- */
/* -------------------------- DO NOT EDIT BELOW -------------------------------------------- */
/* --------------------------------------- DO NOT EDIT BELOW ------------------------------- */
/* ---------------------------------------------------- DO NOT EDIT BELOW ------------------ */
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <fun>
static const AUTHOR[] = "OneEyed"
static const VERSION[] = "2.07a"
#define MAX_TEXT_BUFFER 2047
#define MAX_NAME_LENGTH 33
#define MAX_PLAYER 33
#define MAX_ASSISTERS 3
#define MAX_BALL_SPAWNS 5
#define POS_X -1.0
#define POS_Y 0.85
#define HUD_CHANNEL 4
#define MESSAGE_DELAY 4.0
enum {
UNASSIGNED = 0,
T,
CT,
SPECTATOR
}
#define RECORDS 6
enum {
GOAL = 1,
ASSIST,
STEAL,
KILL,
DISTANCE,
GOALY
}
#define UPGRADES 5
enum {
STA = 1, //stamina
STR, //strength
AGI, //agility
DEX, //dexterity
DISARM,
}
static const UpgradeTitles[UPGRADES+1][] = {
"NULL",
"Stamina",
"Strength",
"Agility",
"Dexterity",
"Disarm"
}
new const UpgradeMax[UPGRADES+1] = {
0, //NULL
MAX_LVL_STAMINA, //STAMINA
MAX_LVL_STRENGTH, //STRENGTH
MAX_LVL_AGILITY, //AGILITY
MAX_LVL_DEXTERITY, //DEXTERITY
MAX_LVL_DISARM, //DISARM
}
new const UpgradePrice[UPGRADES+1] = {
0, //NULL
EXP_PRICE_STAMINA,
EXP_PRICE_STRENGTH,
EXP_PRICE_AGILITY,
EXP_PRICE_DEXTERITY,
EXP_PRICE_DISARM,
}
new TeamColors[TEAMS][3] =
{
{ 0, 0, 0 },
{ TERR_GLOW_RED, TERR_GLOW_GREEN, TERR_GLOW_BLUE } ,
{ CT_GLOW_RED, CT_GLOW_GREEN, CT_GLOW_BLUE },
{ 0, 0, 0 }
}
new TeamMeterColors[TEAMS][3] =
{
{ 0, 0, 0 },
{ TERR_METER_RED, TERR_METER_GREEN, TERR_METER_BLUE } ,
{ CT_METER_RED, CT_METER_GREEN, CT_METER_BLUE },
{ 0, 0, 0 }
}
new ballcolor[3] = { BALL_RED, BALL_GREEN, BALL_BLUE }
new PlayerUpgrades[MAX_PLAYER][UPGRADES+1]
new GoalEnt[TEAMS]
new PressedAction[MAX_PLAYER]
new seconds[MAX_PLAYER]
new g_sprint[MAX_PLAYER]
new SideJump[MAX_PLAYER]
new Float:SideJumpDelay[MAX_PLAYER]
new PlayerDeaths[MAX_PLAYER]
new PlayerKills[MAX_PLAYER]
new curvecount
new direction
new maxplayers
new Float:BallSpinDirection[3]
new ballspawncount
new Float:TeamBallOrigins[TEAMS][3]
new Float:TEMP_TeamBallOrigins[3]
new Mascots[TEAMS]
new Float:MascotsOrigins[3]
new Float:MascotsAngles[3]
new menu_upgrade[MAX_PLAYER]
new Float:fire_delay
new winner
new Float:GoalyCheckDelay[MAX_PLAYER]
new GoalyCheck[MAX_PLAYER]
new GoalyPoints[MAX_PLAYER]
new Float:BallSpawnOrigin[MAX_BALL_SPAWNS][3]
new TopPlayer[2][RECORDS+1]
new MadeRecord[MAX_PLAYER][RECORDS+1]
new TopPlayerName[RECORDS+1][MAX_NAME_LENGTH]
new g_Experience[MAX_PLAYER]
new timer
new Float:testorigin[3]
new Float:velocity[3]
new score[TEAMS]
new scoreboard[1025]
new temp1[64], temp2[64]
new distorig[2][3] //distance recorder
new gmsgShake
new gmsgDeathMsg
new gmsgSayText
new gmsgTextMsg
new goaldied[MAX_PLAYER]
new bool:is_dead[MAX_PLAYER]
new terr[33], ct[33], cntCT, cntT
new PowerPlay, powerplay_list[MAX_LVL_POWERPLAY+1]
new assist[16]
new iassist[TEAMS]
new gamePlayerEquip
new CVAR_SCORE
new CVAR_RESET
new CVAR_GOALSAFETY
new CVAR_KICK
new Float:CVAR_RESPAWN
new CVAR_RANDOM
new fire
new smoke
new beamspr
new g_fxBeamSprite
new Burn_Sprite
new ballholder
new ballowner
new aball
new is_kickball
new g_TimeLimit;
new bool:has_knife[MAX_PLAYER]
new OFFSET_INTERNALMODEL;
/*====================================================================================================
[Precache]
Purpose: $$
Comment: $$
====================================================================================================*/
PrecacheSounds() {
new x
for(x=0;x<MAX_SOUNDS;x++)
engfunc( EngFunc_PrecacheSound, SCORED_SOUNDS[x])
engfunc( EngFunc_PrecacheSound, STOLE_BALL_FAST)
engfunc( EngFunc_PrecacheSound, ROUND_START)
engfunc( EngFunc_PrecacheSound, BALL_BOUNCE_GROUND)
engfunc( EngFunc_PrecacheSound, BALL_PICKED_UP)
engfunc( EngFunc_PrecacheSound, BALL_RESPAWN)
engfunc( EngFunc_PrecacheSound, SCORED_GOAL)
engfunc( EngFunc_PrecacheSound, BALL_KICKED)
engfunc( EngFunc_PrecacheSound, UPGRADED_MAX_LEVEL)
}
PrecacheBall() {
engfunc( EngFunc_PrecacheModel, ball)
}
PrecacheMonsters(team) {
engfunc( EngFunc_PrecacheModel, TeamMascots[team-1])
}
PrecacheSprites() {
beamspr = engfunc( EngFunc_PrecacheModel,"sprites/laserbeam.spr")
fire = engfunc( EngFunc_PrecacheModel,"sprites/shockwave.spr")
smoke = engfunc( EngFunc_PrecacheModel,"sprites/steam1.spr")
Burn_Sprite = engfunc( EngFunc_PrecacheModel,"sprites/xfireball3.spr")
g_fxBeamSprite = engfunc( EngFunc_PrecacheModel,"sprites/lgtning.spr")
}
PrecacheOther() {
engfunc( EngFunc_PrecacheModel, "models/chick.mdl")
}
/*====================================================================================================
[Initialize]
Purpose: $$
Comment: $$
====================================================================================================*/
public plugin_init() {
new mapname[64]
get_mapname(mapname,63)
register_cvar("soccer_jam_online", "0", FCVAR_SERVER)
register_cvar("soccer_jam_version", VERSION, FCVAR_SERVER)
set_cvar_string("soccer_jam_version", VERSION)
register_dictionary("soccerjam.txt")
register_dictionary("soccerjam_help.txt")
if(is_kickball > 0)
{
PrecacheSprites()
register_plugin("Soccer Jam(ON)", VERSION, AUTHOR)
set_cvar_num("soccer_jam_online", 1)
timer = COUNTDOWN_TIME
gmsgTextMsg = get_user_msgid("TextMsg")
gmsgDeathMsg = get_user_msgid("DeathMsg")
gmsgShake = get_user_msgid("ScreenShake")
gmsgSayText = get_user_msgid("SayText")
maxplayers = get_maxplayers()
if(equali(mapname,"soccerjam")) {
PrecacheOther()
CreateGoalNets()
create_wall()
}
register_clcmd("say","handle_say")
register_event("ResetHUD", "Event_ResetHud", "be")
register_event("HLTV","Event_StartRound","a","1=0","2=0")
register_event("Damage", "Event_Damage", "b", "2!0", "3=0", "4!0" )
CVAR_SCORE = register_cvar("sj_score","15")
CVAR_RESET = register_cvar("sj_reset","30.0")
CVAR_GOALSAFETY = register_cvar("sj_goalsafety","650")
CVAR_KICK = register_cvar("sj_kick","650")
CVAR_RESPAWN = 2.0 //register_cvar("kickball_respawn","2.0")
CVAR_RANDOM = register_cvar("sj_random","1")
register_cvar( "sj_timelimit", "0" );
register_cvar("SCORE_CT","0")
register_cvar("SCORE_T","0")
register_menucmd(register_menuid("Team_Select",1), (1<<0)|(1<<1)|(1<<4)|(1<<5), "team_select")
register_touch("PwnBall", "player", "touchPlayer")
register_touch("PwnBall", "soccerjam_goalnet", "touchNet")
register_touch("PwnBall", "worldspawn", "touchWorld")
register_touch("PwnBall", "func_wall", "touchWorld")
register_touch("PwnBall", "func_door", "touchWorld")
register_touch("PwnBall", "func_door_rotating", "touchWorld")
register_touch("PwnBall", "func_wall_toggle", "touchWorld")
register_touch("PwnBall", "func_breakable", "touchWorld")
register_touch("PwnBall", "Blocker", "touchBlocker")
set_task(0.4,"meter",0,_,_,"b")
set_task(0.5,"statusDisplay",7654321,"",0,"b")
register_think("PwnBall","ball_think")
register_think("Mascot", "mascot_think")
register_clcmd("radio1", "LeftDirection", 0)
register_clcmd("radio2", "RightDirection", 0)
register_clcmd("drop","Turbo")
register_clcmd("lastinv","BuyUpgrade")
register_clcmd("fullupdate","fullupdate")
register_message(gmsgTextMsg, "editTextMsg")
register_event("ShowMenu", "menuclass", "b", "4&CT_Select", "4&Terrorist_Select");
register_event("VGUIMenu", "menuclass", "b", "1=26", "1=27");
OFFSET_INTERNALMODEL = is_amd64_server() ? 152 : 126;
}
else {
register_plugin("Soccer Jam(OFF)", VERSION, AUTHOR)
set_cvar_num("soccer_jam_online",0)
}
return PLUGIN_HANDLED
}
//public plugin_end() {
//server_cmd("mp_timelimit %i", g_TimeLimit)
//}
/*====================================================================================================
[Initialize Entities]
Purpose: Handles our custom entities, created with Valve Hammer, and fixes for soccerjam.bsp.
Comment: $$
====================================================================================================*/
public pfn_keyvalue(entid) {
new classname[32], key[32], value[32]
copy_keyvalue(classname, 31, key, 31, value, 31)
new temp_origins[3][10], x, team
new temp_angles[3][10]
if(equal(key, "classname") && equal(value, "soccerjam_goalnet"))
DispatchKeyValue("classname", "func_wall")
if(equal(classname, "game_player_equip")){
if(!is_kickball || !gamePlayerEquip)
gamePlayerEquip = entid
else {
remove_entity(entid)
}
}
else if(equal(classname, "func_wall"))
{
if(equal(key, "team"))
{
team = str_to_num(value)
if(team == 1 || team == 2) {
GoalEnt[team] = entid
set_task(1.0, "FinalizeGoalNet", team)
}
}
}
else if(equal(classname, "soccerjam_mascot"))
{
if(equal(key, "team"))
{
team = str_to_num(value)
create_mascot(team)
}
else if(equal(key, "origin"))
{
parse(value, temp_origins[0], 9, temp_origins[1], 9, temp_origins[2], 9)
for(x=0; x<3; x++)
MascotsOrigins[x] = floatstr(temp_origins[x])
}
else if(equal(key, "angles"))
{
parse(value, temp_angles[0], 9, temp_angles[1], 9, temp_angles[2], 9)
for(x=0; x<3; x++)
MascotsAngles[x] = floatstr(temp_angles[x])
}
}
else if(equal(classname, "soccerjam_teamball"))
{
if(equal(key, "team"))
{
team = str_to_num(value)
for(x=0; x<3; x++)
TeamBallOrigins[team][x] = TEMP_TeamBallOrigins[x]
}
else if(equal(key, "origin"))
{
parse(value, temp_origins[0], 9, temp_origins[1], 9, temp_origins[2], 9)
for(x=0; x<3; x++)
TEMP_TeamBallOrigins[x] = floatstr(temp_origins[x])
}
}
else if(equal(classname, "soccerjam_ballspawn"))
{
if(equal(key, "origin")) {
is_kickball = 1
create_Game_Player_Equip()
PrecacheBall()
PrecacheSounds()
if(ballspawncount < MAX_BALL_SPAWNS) {
parse(value, temp_origins[0], 9, temp_origins[1], 9, temp_origins[2], 9)
BallSpawnOrigin[ballspawncount][0] = floatstr(temp_origins[0])
BallSpawnOrigin[ballspawncount][1] = floatstr(temp_origins[1])
BallSpawnOrigin[ballspawncount][2] = floatstr(temp_origins[2]) + 10.0
ballspawncount++
}
}
}
}
createball() {
new entity = create_entity("info_target")
if (entity) {
entity_set_string(entity,EV_SZ_classname,"PwnBall")
entity_set_model(entity, ball)
entity_set_int(entity, EV_INT_solid, SOLID_BBOX)
entity_set_int(entity, EV_INT_movetype, MOVETYPE_BOUNCE)
new Float:MinBox[3]
new Float:MaxBox[3]
MinBox[0] = -15.0
MinBox[1] = -15.0
MinBox[2] = 0.0
MaxBox[0] = 15.0
MaxBox[1] = 15.0
MaxBox[2] = 12.0
entity_set_vector(entity, EV_VEC_mins, MinBox)
entity_set_vector(entity, EV_VEC_maxs, MaxBox)
glow(entity,ballcolor[0],ballcolor[1],ballcolor[2],10)
entity_set_float(entity,EV_FL_framerate,0.0)
entity_set_int(entity,EV_INT_sequence,0)
}
//save our entity ID to aball variable
aball = entity
entity_set_float(entity,EV_FL_nextthink,halflife_time() + 0.05)
return PLUGIN_HANDLED
}
CreateGoalNets() {
new endzone, x
new Float:orig[3]
new Float:MinBox[3], Float:MaxBox[3]
for(x=1;x<3;x++) {
endzone = create_entity("info_target")
if (endzone) {
entity_set_string(endzone,EV_SZ_classname,"soccerjam_goalnet")
entity_set_model(endzone, "models/chick.mdl")
entity_set_int(endzone, EV_INT_solid, SOLID_BBOX)
entity_set_int(endzone, EV_INT_movetype, MOVETYPE_NONE)
MinBox[0] = -25.0; MinBox[1] = -145.0; MinBox[2] = -36.0
MaxBox[0] = 25.0; MaxBox[1] = 145.0; MaxBox[2] = 70.0
entity_set_vector(endzone, EV_VEC_mins, MinBox)
entity_set_vector(endzone, EV_VEC_maxs, MaxBox)
switch(x) {
case 1: {
orig[0] = 2110.0
orig[1] = 0.0
orig[2] = 1604.0
}
case 2: {
orig[0] = -2550.0
orig[1] = 0.0
orig[2] = 1604.0
}
}
entity_set_origin(endzone,orig)
entity_set_int(endzone, EV_INT_team, x)
set_entity_visibility(endzone, 0)
GoalEnt[x] = endzone
}
}
}
create_wall() {
new wall = create_entity("func_wall")
if(wall)
{
new Float:orig[3]
new Float:MinBox[3], Float:MaxBox[3]
entity_set_string(wall,EV_SZ_classname,"Blocker")
entity_set_model(wall, "models/chick.mdl")
entity_set_int(wall, EV_INT_solid, SOLID_BBOX)
entity_set_int(wall, EV_INT_movetype, MOVETYPE_NONE)
MinBox[0] = -72.0; MinBox[1] = -100.0; MinBox[2] = -72.0
MaxBox[0] = 72.0; MaxBox[1] = 100.0; MaxBox[2] = 72.0
entity_set_vector(wall, EV_VEC_mins, MinBox)
entity_set_vector(wall, EV_VEC_maxs, MaxBox)
orig[0] = 2355.0
orig[1] = 1696.0
orig[2] = 1604.0
entity_set_origin(wall,orig)
set_entity_visibility(wall, 0)
}
}
create_mascot(team)
{
new Float:MinBox[3], Float:MaxBox[3]
new mascot = create_entity("info_target")
if(mascot)
{
PrecacheMonsters(team)
entity_set_string(mascot,EV_SZ_classname,"Mascot")
entity_set_model(mascot, TeamMascots[team-1])
Mascots[team] = mascot
entity_set_int(mascot, EV_INT_solid, SOLID_NOT)
entity_set_int(mascot, EV_INT_movetype, MOVETYPE_NONE)
entity_set_int(mascot, EV_INT_team, team)
MinBox[0] = -16.0; MinBox[1] = -16.0; MinBox[2] = -72.0
MaxBox[0] = 16.0; MaxBox[1] = 16.0; MaxBox[2] = 72.0
entity_set_vector(mascot, EV_VEC_mins, MinBox)
entity_set_vector(mascot, EV_VEC_maxs, MaxBox)
//orig[2] += 200.0
entity_set_origin(mascot,MascotsOrigins)
entity_set_float(mascot,EV_FL_animtime,2.0)
entity_set_float(mascot,EV_FL_framerate,1.0)
entity_set_int(mascot,EV_INT_sequence,0)
if(team == 2)
entity_set_byte(mascot, EV_BYTE_controller1, 115)
entity_set_vector(mascot,EV_VEC_angles,MascotsAngles)
entity_set_float(mascot,EV_FL_nextthink,halflife_time() + 1.0)
}
}
create_Game_Player_Equip() {
gamePlayerEquip = create_entity("game_player_equip")
if(gamePlayerEquip) {
//DispatchKeyValue(gamePlayerEquip, "weapon_knife", "1")
//DispatchKeyValue(entity, "weapon_scout", "1")
DispatchKeyValue(gamePlayerEquip, "targetname", "roundstart")
DispatchSpawn(gamePlayerEquip)
}
}
public FinalizeGoalNet(team)
{
new goalnet = GoalEnt[team]
entity_set_string(goalnet,EV_SZ_classname,"soccerjam_goalnet")
entity_set_int(goalnet, EV_INT_team, team)
set_entity_visibility(goalnet, 0)
}
public RightDirection(id) {
if(id == ballholder) {
direction--
if(direction < -(DIRECTIONS))
direction = -(DIRECTIONS)
new temp = direction * CURVE_ANGLE
SendCenterText( id, temp );
}
else
client_print(id, print_chat, "%L", id, "CANT_CURVE_RIGHT");
return PLUGIN_HANDLED
}
public LeftDirection(id) {
if(id == ballholder) {
direction++
if(direction > DIRECTIONS)
direction = DIRECTIONS
new temp = direction * CURVE_ANGLE
SendCenterText( id, temp );
}
else {
client_print(id, print_chat, "%L", id, "CANT_CURVE_LEFT");
}
return PLUGIN_HANDLED
}
SendCenterText( id, dir )
{
if(dir < 0)
client_print(id, print_center, "%L", id, "CURVING_RIGHT", (dir<0?-(dir):dir));
else if(dir == 0)
client_print(id, print_center, "0 degrees");
else if(dir > 0)
client_print(id, print_center, "%L", id, "CURVING_LEFT", (dir<0?-(dir):dir));
}
public plugin_cfg() {
if(is_kickball) {
server_cmd("sv_maxspeed 999")
server_cmd("sv_airaccelerate 10")
//Fallback to make sure our mp_timelimit is correct.
new mpTimelimit = get_cvar_num("mp_timelimit");
new sjTimelimit = get_cvar_num("sj_timelimit");
if( mpTimelimit > 3 )
set_cvar_num("sj_timelimit", mpTimelimit);
else {
if(mpTimelimit && sjTimelimit > 3 )
set_cvar_num("mp_timelimit", sjTimelimit);
}
}
else {
//server_cmd("exec server.cfg")
new failed[64];
format(failed,63,"%L", LANG_SERVER, "PLUGIN_FAILED");
set_fail_state(failed);
}
}
/*====================================================================================================
[Ball Brain]
Purpose: These functions help control the ball and its activities.
Comment: $$
====================================================================================================*/
public ball_think() {
new maxscore = get_pcvar_num(CVAR_SCORE)
if(score[1] >= maxscore || score[2] >= maxscore) {
entity_set_float(aball,EV_FL_nextthink,halflife_time() + 0.05)
return PLUGIN_HANDLED
}
if(is_valid_ent(aball))
{
new Float:gametime = get_gametime()
if(PowerPlay >= MAX_LVL_POWERPLAY && gametime - fire_delay >= 0.3)
on_fire()
if(ballholder > 0)
{
new team = get_user_team(ballholder)
entity_get_vector(ballholder, EV_VEC_origin,testorigin)
if(!is_user_alive(ballholder)) {
new tname[32]
get_user_name(ballholder,tname,31)
remove_task(55555)
set_task(get_pcvar_float(CVAR_RESET),"clearBall",55555)
if(!g_sprint[ballholder])
set_speedchange(ballholder)
format(temp1,63,"%L", LANG_PLAYER, "DROPPED_BALL", TeamNames[team], tname)
//remove glow of owner and set ball velocity really really low
glow(ballholder,0,0,0,0)
ballowner = ballholder
ballholder = 0
testorigin[2] += 5
entity_set_origin(aball, testorigin)
new Float:vel[3], x
for(x=0;x<3;x++)
vel[x] = 1.0
entity_set_vector(aball,EV_VEC_velocity,vel)
entity_set_float(aball,EV_FL_nextthink,halflife_time() + 0.05)
return PLUGIN_HANDLED
}
if(entity_get_int(aball,EV_INT_solid) != SOLID_NOT)
entity_set_int(aball, EV_INT_solid, SOLID_NOT)
//Put ball in front of player
ball_infront(ballholder, 55.0)
new i
for(i=0;i<3;i++)
velocity[i] = 0.0
//Add lift to z axis
new flags = entity_get_int(ballholder, EV_INT_flags)
if(flags & FL_DUCKING)
testorigin[2] -= 10
else
testorigin[2] -= 30
entity_set_vector(aball,EV_VEC_velocity,velocity)
entity_set_origin(aball,testorigin)
}
else {
if(entity_get_int(aball,EV_INT_solid) != SOLID_BBOX)
entity_set_int(aball, EV_INT_solid, SOLID_BBOX)
}
}
entity_set_float(aball,EV_FL_nextthink,halflife_time() + 0.05)
return PLUGIN_HANDLED
}
moveBall(where, team=0) {
if(is_valid_ent(aball)) {
if(team) {
new Float:bv[3]
bv[2] = 50.0
entity_set_origin(aball, TeamBallOrigins[team])
entity_set_vector(aball,EV_VEC_velocity,bv)
}
else {
switch(where) {
case 0: { //outside map
new Float:orig[3], x
for(x=0;x<3;x++)
orig[x] = -9999.9
entity_set_origin(aball,orig)
ballholder = -1
}
case 1: { //at middle
new Float:v[3], rand
v[2] = 400.0
if(ballspawncount > 1)
rand = random_num(0, ballspawncount-1)
else
rand = 0
entity_set_origin(aball, BallSpawnOrigin[rand])
entity_set_vector(aball, EV_VEC_velocity, v)
PowerPlay = 0
ballholder = 0
ballowner = 0
}
}
}
}
}
public ball_infront(id, Float:dist) {
new Float:nOrigin[3]
new Float:vAngles[3] // plug in the view angles of the entity
new Float:vReturn[3] // to get out an origin fDistance away
entity_get_vector(aball,EV_VEC_origin,testorigin)
entity_get_vector(id,EV_VEC_origin,nOrigin)
entity_get_vector(id,EV_VEC_v_angle,vAngles)
vReturn[0] = floatcos( vAngles[1], degrees ) * dist
vReturn[1] = floatsin( vAngles[1], degrees ) * dist
vReturn[0] += nOrigin[0]
vReturn[1] += nOrigin[1]
testorigin[0] = vReturn[0]
testorigin[1] = vReturn[1]
testorigin[2] = nOrigin[2]
/*
//Sets the angle to face the same as the player.
new Float:ang[3]
entity_get_vector(id,EV_VEC_angles,ang)
ang[0] = 0.0
ang[1] -= 90.0
ang[2] = 0.0
entity_set_vector(aball,EV_VEC_angles,ang)
*/
}
public CurveBall(id) {
if(direction && get_speed(aball) > 5 && curvecount > 0) {
new Float:dAmt = float((direction * CURVE_ANGLE) / ANGLEDIVIDE);
new Float:v[3], Float:v_forward[3];
entity_get_vector(aball, EV_VEC_velocity, v);
vector_to_angle(v, BallSpinDirection);
BallSpinDirection[1] = normalize( BallSpinDirection[1] + dAmt );
BallSpinDirection[2] = 0.0;
angle_vector(BallSpinDirection, 1, v_forward);
new Float:speed = vector_length(v)// * 0.95;
v[0] = v_forward[0] * speed
v[1] = v_forward[1] * speed
entity_set_vector(aball, EV_VEC_velocity, v);
curvecount--;
set_task(CURVE_TIME, "CurveBall", id);
}
}
public clearBall() {
play_wav(0, BALL_RESPAWN);
format(temp1,63,"%L",LANG_PLAYER,"BALL_RESPAWNED")
moveBall(1)
}
/*====================================================================================================
[Mascot Think]
Purpose: $$
Comment: $$
====================================================================================================*/
public mascot_think(mascot)
{
new team = entity_get_int(mascot, EV_INT_team)
new indist[32], inNum, chosen
new id, playerteam, dist
for(id=1 ; id<=maxplayers ; id++)
{
if(is_user_alive(id) && !is_user_bot(id))
{
playerteam = get_user_team(id)
if(playerteam != team)
{
if(!chosen) {
dist = get_entity_distance(id, mascot)
if(dist < get_pcvar_num(CVAR_GOALSAFETY))
if(id == ballholder) {
chosen = id
break
}
else
indist[inNum++] = id
}
}
}
}
if(!chosen) {
new rnd = random_num(0, (inNum-1))
chosen = indist[rnd]
}
if(chosen)
TerminatePlayer(chosen, mascot, team, ( ballholder == chosen ? 230.0 : random_float(5.0, 15.0) ) )
entity_set_float(mascot,EV_FL_nextthink,halflife_time() + 1.0)
}
goaly_checker(id, Float:gametime, team) {
if(!is_user_alive(id) || (gametime - GoalyCheckDelay[id] < GOALY_DELAY) )
return PLUGIN_HANDLED
new dist, gcheck
new Float:pOrig[3]
entity_get_vector(id, EV_VEC_origin, pOrig)
dist = floatround(get_distance_f(pOrig, TeamBallOrigins[team]))
//--/* Goaly Exp System */--//
if(dist < 600 ) {
gcheck = GoalyCheck[id]
if(id == ballholder && gcheck >= 2)
kickBall(id, 1)
GoalyPoints[id]++
if(gcheck < 2)
g_Experience[id] += gcheck * AMOUNT_GOALY
else
g_Experience[id] += gcheck * (AMOUNT_GOALY / 2)
if(gcheck < 5)
GoalyCheck[id]++
GoalyCheckDelay[id] = gametime
}
else
GoalyCheck[id] = 0
return PLUGIN_HANDLED
}
/*====================================================================================================
[Status Display]
Purpose: Displays the Scoreboard information.
Comment: $$
====================================================================================================*/
public statusDisplay()
{
new id, team, bteam = get_user_team(ballholder>0?ballholder:ballowner)
new score_t = score[T], score_ct = score[CT]
set_hudmessage(20, 255, 20, 0.95, 0.20, 0, 1.0, 1.5, 0.1, 0.1, HUD_CHANNEL)
new Float:gametime = get_gametime()
for(id=1; id<=maxplayers; id++) {
if(is_user_connected(id) && !is_user_bot(id))
{
team = get_user_team(id)
goaly_checker(id, gametime, team)
if(!is_user_alive(id) && !is_dead[id] && (team == 1 || team == 2) && GetPlayerModel(id) != 0xFF)
{
//new Float:ballorig[3], x
//entity_get_vector(id,EV_VEC_origin,ballorig)
//for(x=0;x<3;x++)
// distorig[0][x] = floatround(ballorig[x])
remove_task(id+1000)
has_knife[id] = false;
is_dead[id] = true
new Float:respawntime = CVAR_RESPAWN
set_task(respawntime,"AutoRespawn",id)
set_task((respawntime+0.2), "AutoRespawn2",id)
}
if(!winner) {
format(scoreboard,1024," %i %L^n%s - %i | %s - %i ^n%L %i ^n^n%s^n^n^n%s",get_pcvar_num(CVAR_SCORE),id,"GOALS_WINS",TeamNames[T],score_t,TeamNames[CT],score_ct,id,"EXPERIENCE",g_Experience[id],temp1,team==bteam?temp2:"")
show_hudmessage(id,"%s",scoreboard)
}
}
}
}
/*====================================================================================================
[Touched]
Purpose: All touching stuff takes place here.
Comment: $$
====================================================================================================*/
public touchWorld(ball, world) {
if(get_speed(ball) > 10)
{
new Float:v[3]
entity_get_vector(ball, EV_VEC_velocity, v)
v[0] = (v[0] * 0.85)
v[1] = (v[1] * 0.85)
v[2] = (v[2] * 0.85)
entity_set_vector(ball, EV_VEC_velocity, v)
emit_sound(ball, CHAN_ITEM, BALL_BOUNCE_GROUND, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
return PLUGIN_HANDLED
}
public touchPlayer(ball, player) {
if(is_user_bot(player))
return PLUGIN_HANDLED
new playerteam = get_user_team(player)
if((playerteam != 1 && playerteam != 2))
return PLUGIN_HANDLED
remove_task(55555)
new aname[64], stolen, x
get_user_name(player,aname,63)
new ballteam = get_user_team(ballowner)
if(ballowner > 0 && playerteam != ballteam )
{
new speed = get_speed(aball)
if(speed > 500)
{
//configure catching algorithm
new rnd = random_num(0,100)
new bstr = (PlayerUpgrades[ballowner][STR] * AMOUNT_STR) / 10
new dex = (PlayerUpgrades[player][DEX] * AMOUNT_DEX)
new pct = ( PressedAction[player] ? 40:20 ) + dex
pct += ( g_sprint[player] ? 5 : 0 ) //player turboing? give 5%
pct -= ( g_sprint[ballowner] ? 5 : 0 ) //ballowner turboing? lose 5%
pct -= bstr //ballowner has strength? remove bstr
//will player avoid damage?
if( rnd > pct ) {
new Float:dodmg = (float(speed) / 13.0) + bstr
client_print(0,print_chat,"%L",LANG_PLAYER,"BALL_SMACKED",aname,floatround(dodmg))
set_msg_block(gmsgDeathMsg,BLOCK_ONCE)
fakedamage(player,"AssWhoopin",dodmg,1)
set_msg_block(gmsgDeathMsg,BLOCK_NOT)
if(!is_user_alive(player)) {
message_begin(MSG_ALL, gmsgDeathMsg)
write_byte(ballowner)
write_byte(player)
write_string("AssWhoopin")
message_end()
new frags = get_user_frags(ballowner)
entity_set_float(ballowner, EV_FL_frags, float(frags + 1))
setScoreInfo(ballowner)
//set_user_frags(ballowner, get_user_frags(ballowner)+1)
Event_Record(ballowner, KILL, -1, EXP_KILL)
client_print(player,print_chat,"%L",player,"KILLED_BY_BALL")
client_print(ballowner,print_chat,"%L",ballowner,"EXP_FOR_BALLKILL")
}
else {
new Float:pushVel[3]
pushVel[0] = velocity[0]
pushVel[1] = velocity[1]
pushVel[2] = velocity[2] + ((velocity[2] < 0)?random_float(-200.0,-50.0):random_float(50.0,200.0))
entity_set_vector(player,EV_VEC_velocity,pushVel)
}
for(x=0;x<3;x++)
velocity[x] = (velocity[x] * random_float(0.1,0.9))
entity_set_vector(aball,EV_VEC_velocity,velocity)
direction = 0
return PLUGIN_HANDLED
}
}
if(speed > 950)
play_wav(0, STOLE_BALL_FAST)
new Float:pOrig[3]
entity_get_vector(player, EV_VEC_origin, pOrig)
new dist = floatround(get_distance_f(pOrig, TeamBallOrigins[playerteam]))
new gainedxp
if(dist < 550) {
gainedxp = EXP_STEAL + EXP_GOALY + (speed / 8)
Event_Record(player, STEAL, -1, EXP_STEAL + EXP_GOALY + (speed / 8))
GoalyPoints[player] += EXP_GOALY/2
}
else {
gainedxp = EXP_STEAL
Event_Record(player, STEAL, -1, EXP_STEAL)
}
format(temp1,63,"%L",LANG_PLAYER,"STOLE_BALL",TeamNames[playerteam],aname)
client_print(0,print_console,"%s",temp1)
stolen = 1
message_begin(MSG_ONE, gmsgShake, {0,0,0}, player)
write_short(255 << 12) //ammount
write_short(1 << 11) //lasts this long
write_short(255 << 10) //frequency
message_end()
client_print(player,print_chat,"%L",player,"EXP_FOR_STEAL",gainedxp)
}
if(ballholder == 0) {
emit_sound(aball, CHAN_ITEM, BALL_PICKED_UP, 1.0, ATTN_NORM, 0, PITCH_NORM)
new msg[64], check
if(!has_knife[player])
give_knife(player)
if(stolen)
PowerPlay = 0
else
format(temp1,63,"%L",LANG_PLAYER,"BALL_PICKUP",TeamNames[playerteam],aname)
if(((PowerPlay > 1 && powerplay_list[PowerPlay-2] == player) || (PowerPlay > 0 && powerplay_list[PowerPlay-1] == player)) && PowerPlay != MAX_LVL_POWERPLAY)
check = true
if(PowerPlay <= MAX_LVL_POWERPLAY && !check) {
g_Experience[player] += (PowerPlay==2?10:25)
powerplay_list[PowerPlay] = player
PowerPlay++
}
curvecount = 0
direction = 0
GoalyCheck[player] = 0
format(temp2, 63, "%L %i",LANG_PLAYER,"POWER_PLAY", PowerPlay>0?PowerPlay-1:0)
ballholder = player
ballowner = 0
if(!g_sprint[player])
set_speedchange(player)
set_hudmessage(255, 20, 20, POS_X, 0.4, 1, 1.0, 1.5, 0.1, 0.1, 2)
format(msg,63,"%L",player,"YOU_HAVE_BALL")
show_hudmessage(player,"%s",msg)
//Glow Player who has ball their team color
beam()
glow(player, TeamColors[playerteam][0], TeamColors[playerteam][1], TeamColors[playerteam][2], 1)
}
return PLUGIN_HANDLED
}
public touchNet(ball, goalpost)
{
remove_task(55555)
new team = get_user_team(ballowner)
new goalent = GoalEnt[team]
if (goalpost != goalent && ballowner > 0) {
new aname[64]
new Float:netOrig[3]
new netOrig2[3]
entity_get_vector(ball, EV_VEC_origin,netOrig)
new l
for(l=0;l<3;l++)
netOrig2[l] = floatround(netOrig[l])
flameWave(netOrig2)
get_user_name(ballowner,aname,63)
new frags = get_user_frags(ballowner)
entity_set_float(ballowner, EV_FL_frags, float(frags + 10))
play_wav(0, SCORED_GOAL)
/////////////////////ASSIST CODE HERE///////////
new assisters[4] = { 0, 0, 0, 0 }
new iassisters = 0
new ilastplayer = iassist[ team ]
// We just need the last player to kick the ball
// 0 means it has passed 15 at least once
if ( ilastplayer == 0 )
ilastplayer = 15
else
ilastplayer--
if ( assist[ ilastplayer ] != 0 ) {
new i, x, bool:canadd, playerid
for(i=0; i<16; i++) {
// Stop if we've already found 4 assisters
if ( iassisters == MAX_ASSISTERS )
break
playerid = assist[ i ]
// Skip if player is invalid
if ( playerid == 0 )
continue
// Skip if kicker is counted as an assister
if ( playerid == assist[ ilastplayer ] )
continue
canadd = true
// Loop through each assister value
for(x=0; x<3; x++)
// make sure we can add them
if ( playerid == assisters[ x ] ) {
canadd = false
break
}
// Skip if they've already been added
if ( canadd == false )
continue
// They didn't kick the ball last, and they haven't been added, add them
assisters[ iassisters++ ] = playerid
}
// This gives each person an assist, xp, and prints that out to them
new c, pass
for(c=0; c<iassisters; c++) {
pass = assisters[ c ]
Event_Record(pass, ASSIST, -1, EXP_ASSIST)
client_print( pass, print_chat, "%L",pass,"EXP_FOR_ASSIST",EXP_ASSIST)
}
}
iassist[ 0 ] = 0
/////////////////////ASSIST CODE HERE///////////
for(l=0; l<3; l++)
distorig[1][l] = floatround(netOrig[l])
new distshot = (get_distance(distorig[0],distorig[1])/12)
new gainedxp = distshot + EXP_GOAL
format(temp1,63,"%L",LANG_PLAYER,"SCORED_GOAL",TeamNames[team],aname,distshot)
client_print(0,print_console,"%s",temp1)
if(distshot > MadeRecord[ballowner][DISTANCE])
Event_Record(ballowner, DISTANCE, distshot, 0)// record distance, and make that distance exp
Event_Record(ballowner, GOAL, -1, gainedxp) //zero xp for goal cause distance is what gives it.
//Increase Score, and update cvar score
score[team]++
switch(team) {
case 1: set_cvar_num("score_ct",score[team])
case 2: set_cvar_num("score_t",score[team])
}
client_print(ballowner,print_chat,"%L",ballowner,"EXP_FOR_GOAL",gainedxp,distshot)
new oteam = (team == 1 ? 2 : 1)
increaseTeamXP(team, 75)
increaseTeamXP(oteam, 50)
moveBall(0)
new x
for(x=1; x<=maxplayers; x++) {
if(is_user_connected(x))
{
Event_Record(x, GOALY, GoalyPoints[x], 0)
new kills = get_user_frags(x)
new deaths = cs_get_user_deaths(x)
setScoreInfo(x)
if( deaths > 0)
PlayerDeaths[x] = deaths
if( kills > 0)
PlayerKills[x] = kills
}
}
if(score[team] < get_pcvar_num(CVAR_SCORE)) {
new r = random_num(0,MAX_SOUNDS-1)
play_wav(0, SCORED_SOUNDS[r]);
}
else {
winner = team
format(scoreboard,1024,"%L",LANG_PLAYER,"TEAM_WINS",TeamNames[team])
set_task(1.0,"showhud_winner",0,"",0,"a",3)
}
server_cmd("sv_restart 4")
}
else if(goalpost == goalent) {
moveBall(0, team)
client_print(ballowner,print_chat,"%L",ballowner,"CANNOT_KICK_GOAL")
}
return PLUGIN_HANDLED
}
//This is for soccerjam.bsp to fix locker room.
public touchBlocker(pwnball, blocker) {
new Float:orig[3] = { 2234.0, 1614.0, 1604.0 }
entity_set_origin(pwnball, orig)
}
/*====================================================================================================
[Events]
Purpose: $$
Comment: $$
====================================================================================================*/
//public Event_DeathMsg() {
// new id = read_data(2)
// strip_user_weapons(id);
//}
public Event_Damage()
{
new victim = read_data(0)
new attacker = get_user_attacker(victim)
if(is_user_alive(attacker)) {
if(is_user_alive(victim) ) {
#if !defined KNIFE_DISARM_ON
if(victim == ballholder) {
#endif
new upgrade = PlayerUpgrades[attacker][DISARM]
if(upgrade) {
new disarm = upgrade * AMOUNT_DISARM
new disarmpct = BASE_DISARM + (victim==ballholder?(disarm*2):0)
new rand = random_num(1,100)
if(disarmpct >= rand)
{
new vname[32], aname[32]
get_user_name(victim,vname,31)
get_user_name(attacker,aname,31)
#if defined KNIFE_DISARM_ON
if(victim == ballholder) {
#endif
kickBall(victim, 1)
client_print(attacker,print_chat,"%L",attacker,"DISARM_BALL_ATTACKER",vname)
client_print(victim,print_chat,"%L",victim,"DISARM_BALL_VICTIM",aname)
#if defined KNIFE_DISARM_ON
}
else {
new weapon, clip, ammo
weapon = get_user_weapon(victim,clip,ammo)
if(weapon == CSW_KNIFE)
{
strip_user_weapons(victim);
has_knife[victim] = false;
set_task(float(disarm / DISARM_MULTIPLIER), "give_knife", victim+1000)
client_print(attacker,print_chat,"%L",attacker,"DISARM_KNIFE_ATTACKER",vname)
client_print(victim,print_chat,"%L",victim,"DISARM_KNIFE_VICTIM",aname)
}
}
#endif
}
}
#if !defined KNIFE_DISARM_ON
}
#endif
}
else
g_Experience[attacker] += (EXP_KILL/2)
}
}
public Event_StartRound()
{
g_TimeLimit = get_cvar_num("mp_timelimit");
if(winner)
{
set_task(1.0,"displayWinnerAwards",0)
//MP_TIMELIMIT replication
new Float:gtime = float(g_TimeLimit) - (get_gametime() / 60.0);
if( g_TimeLimit && gtime <= 0.0 )
{
//Fix for Map Vote plugins (2 min marker).
new bool:check;
if(cvar_exists("amx_extendmap_max"))
check = true;
server_cmd("mp_timelimit %i", (check ? 2 : 1));
set_task(10.0, "CheckExtendMap", 555666, "", 0, "b");
}
else
set_task(10.0,"PostGame",0)
}
else
SetupRound()
}
public CheckExtendMap() {
new timelimit = get_cvar_num("mp_timelimit");
if(timelimit > g_TimeLimit) {
PostGame();
remove_task(555666);
}
}
public SetupRound() {
iassist[ 0 ] = 0
if(!is_valid_ent(aball))
createball()
moveBall(1)
new id
for(id=1; id<=maxplayers; id++) {
if(is_user_connected(id) && !is_user_bot(id)) {
is_dead[id] = false
seconds[id] = 0
g_sprint[id] = 0
PressedAction[id] = 0
}
}
play_wav(0, ROUND_START)
set_task(0.5, "PostSetupRound", 0)
set_task(1.0, "PostPostSetupRound", 0)
return PLUGIN_HANDLED
}
public PostSetupRound() {
new id
for(id=1; id<=maxplayers; id++)
if(is_user_alive(id) && !is_user_bot(id))
give_knife(id)
}
public PostPostSetupRound() {
new id, kills, deaths
for(id=1; id<=maxplayers; id++) {
if(is_user_connected(id) && !is_user_bot(id)) {
kills = PlayerKills[id]
deaths = PlayerDeaths[id]
if(kills)
entity_set_float(id, EV_FL_frags, float(kills))
if(deaths)
cs_set_user_deaths(id,deaths)
setScoreInfo(id)
}
}
}
public Event_ResetHud(id) {
goaldied[id] = 0
set_task(1.0,"PostResetHud",id)
}
public PostResetHud(id) {
if(is_user_alive(id) && !is_user_bot(id))
{
new stam = PlayerUpgrades[id][STA]
if(!has_knife[id]) {
give_knife(id)
}
//compensate for our turbo
if(!g_sprint[id])
set_speedchange(id)
if(stam > 0)
entity_set_float(id, EV_FL_health, float(BASE_HP + (stam * AMOUNT_STA)))
}
}
/*====================================================================================================
[Client Commands]
Purpose: $$
Comment: $$
====================================================================================================*/
public Turbo(id)
{
if(is_user_alive(id))
g_sprint[id] = 1
return PLUGIN_HANDLED
}
public client_PreThink(id)
{
if( is_kickball && is_valid_ent(aball) && is_user_connected(id))
{
new button = entity_get_int(id, EV_INT_button)
new usekey = (button & IN_USE)
new up = (button & IN_FORWARD)
new down = (button & IN_BACK)
new moveright = (button & IN_MOVERIGHT)
new moveleft = (button & IN_MOVELEFT)
new jump = (button & IN_JUMP)
new flags = entity_get_int(id, EV_INT_flags)
new onground = flags & FL_ONGROUND
if( (moveright || moveleft) && !up && !down && jump && onground && !g_sprint[id] && id != ballholder)
SideJump[id] = 1
if(g_sprint[id])
entity_set_float(id, EV_FL_fuser2, 0.0)
if( id != ballholder )
PressedAction[id] = usekey
else {
if( usekey && !PressedAction[id]) {
kickBall(ballholder, 0)
}
else if( !usekey && PressedAction[id])
PressedAction[id] = 0
}
}
}
public client_PostThink(id) {
if(is_kickball && is_user_connected(id)) {
new Float:gametime = get_gametime()
new button = entity_get_int(id, EV_INT_button)
new up = (button & IN_FORWARD)
new down = (button & IN_BACK)
new moveright = (button & IN_MOVERIGHT)
new moveleft = (button & IN_MOVELEFT)
new jump = (button & IN_JUMP)
new Float:vel[3]
entity_get_vector(id,EV_VEC_velocity,vel)
if( (gametime - SideJumpDelay[id] > 5.0) && SideJump[id] && jump && (moveright || moveleft) && !up && !down) {
vel[0] *= 2.0
vel[1] *= 2.0
vel[2] = 300.0
entity_set_vector(id,EV_VEC_velocity,vel)
SideJump[id] = 0
SideJumpDelay[id] = gametime
}
else
SideJump[id] = 0
}
}
public kickBall(id, velType)
{
remove_task(55555)
set_task(get_pcvar_float(CVAR_RESET),"clearBall",55555)
new team = get_user_team(id)
new a,x
//Give it some lift
ball_infront(id, 55.0)
testorigin[2] += 10
new Float:tempO[3], Float:returned[3]
new Float:dist2
entity_get_vector(id, EV_VEC_origin, tempO)
new tempEnt = trace_line( id, tempO, testorigin, returned )
dist2 = get_distance_f(testorigin, returned)
//ball_infront(id, 55.0)
if( point_contents(testorigin) != CONTENTS_EMPTY || (!is_user_connected(tempEnt) && dist2 ) )//|| tempDist < 65)
return PLUGIN_HANDLED
else
{
//Check Make sure our ball isnt inside a wall before kicking
new Float:ballF[3], Float:ballR[3], Float:ballL[3]
new Float:ballB[3], Float:ballTR[3], Float:ballTL[3]
new Float:ballBL[3], Float:ballBR[3]
for(x=0; x<3; x++) {
ballF[x] = testorigin[x]; ballR[x] = testorigin[x];
ballL[x] = testorigin[x]; ballB[x] = testorigin[x];
ballTR[x] = testorigin[x]; ballTL[x] = testorigin[x];
ballBL[x] = testorigin[x]; ballBR[x] = testorigin[x];
}
for(a=1; a<=6; a++) {
ballF[1] += 3.0; ballB[1] -= 3.0;
ballR[0] += 3.0; ballL[0] -= 3.0;
ballTL[0] -= 3.0; ballTL[1] += 3.0;
ballTR[0] += 3.0; ballTR[1] += 3.0;
ballBL[0] -= 3.0; ballBL[1] -= 3.0;
ballBR[0] += 3.0; ballBR[1] -= 3.0;
if(point_contents(ballF) != CONTENTS_EMPTY || point_contents(ballR) != CONTENTS_EMPTY ||
point_contents(ballL) != CONTENTS_EMPTY || point_contents(ballB) != CONTENTS_EMPTY ||
point_contents(ballTR) != CONTENTS_EMPTY || point_contents(ballTL) != CONTENTS_EMPTY ||
point_contents(ballBL) != CONTENTS_EMPTY || point_contents(ballBR) != CONTENTS_EMPTY)
return PLUGIN_HANDLED
}
new ent = -1
testorigin[2] += 35.0
while((ent = find_ent_in_sphere(ent, testorigin, 35.0)) != 0) {
if(ent > maxplayers)
{
new classname[32]
entity_get_string(ent, EV_SZ_classname, classname, 31)
if((contain(classname, "goalnet") != -1 || contain(classname, "func_") != -1) &&
!equal(classname, "func_water") && !equal(classname, "func_illusionary"))
return PLUGIN_HANDLED
}
}
testorigin[2] -= 35.0
}
new kickVel
if(!velType)
{
new str = (PlayerUpgrades[id][STR] * AMOUNT_STR) + (AMOUNT_POWERPLAY*(PowerPlay*5))
kickVel = get_pcvar_num(CVAR_KICK) + str
kickVel += g_sprint[id] * 100
if(direction) {
entity_get_vector(id, EV_VEC_angles, BallSpinDirection)
curvecount = CURVE_COUNT
}
}
else {
curvecount = 0
direction = 0
kickVel = random_num(100, 600)
}
new Float:ballorig[3]
entity_get_vector(id,EV_VEC_origin,ballorig)
for(x=0; x<3; x++)
distorig[0][x] = floatround(ballorig[x])
velocity_by_aim(id, kickVel, velocity)
for(x=0; x<3; x++)
distorig[0][x] = floatround(ballorig[x])
/////////////////////WRITE ASSIST CODE HERE IF NEEDED///////////
if ( iassist[ 0 ] == team ) {
if ( iassist[ team ] == 15 )
iassist[ team ] = 0
}
else {
// clear the assist list
new ind
for(ind = 0; ind < 16; ind++ )
assist[ ind ] = 0
// clear the assist index
iassist[ team ] = 0
// set which team to track
iassist[ 0 ] = team
}
assist[ iassist[ team ]++ ] = id
/////////////////////WRITE ASSIST CODE HERE IF NEEDED///////////
ballowner = id
ballholder = 0
entity_set_origin(aball,testorigin)
entity_set_vector(aball,EV_VEC_velocity,velocity)
set_task(CURVE_TIME*2, "CurveBall", id)
emit_sound(aball, CHAN_ITEM, BALL_KICKED, 1.0, ATTN_NORM, 0, PITCH_NORM)
glow(id,0,0,0,0)
beam()
new aname[64]
get_user_name(id,aname,63)
if(!g_sprint[id])
set_speedchange(id)
format(temp1,63,"%L",LANG_PLAYER,"KICKED_BALL",TeamNames[team],aname)
client_print(0,print_console,"%s",temp1)
return PLUGIN_HANDLED
}
/*====================================================================================================
[Command Blocks]
Purpose: $$
Comment: $$
====================================================================================================*/
public client_kill(id) {
if(is_kickball)
return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
public client_command(id) {
if(!is_kickball) return PLUGIN_CONTINUE
new arg[13]
read_argv( 0, arg , 12 )
if ( equal("buy",arg) || equal("autobuy",arg) )
return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
//fix for an exploit.
public menuclass(id) {
// They changed teams
SetPlayerModel(id, 0xFF);
}
GetPlayerModel(id)
{
if(!is_user_connected(id))
return 0;
return get_pdata_int(id, OFFSET_INTERNALMODEL, 5);
}
SetPlayerModel(id, int)
{
if(!is_user_connected(id))
return;
set_pdata_int(id, OFFSET_INTERNALMODEL, int, 5);
}
public team_select(id, key) {
if(is_kickball) {
new team = get_user_team(id)
//SetPlayerModel(id, 0xFF);
if( (team == 1 || team == 2) && (key == team-1) )
{
new message[64]
format(message, 63, "%L",id,"CANT_REJOIN_TEAM")
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0, 0, 0}, id)
write_byte(0)
write_string(message)
message_end()
engclient_cmd(id,"chooseteam")
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}
public fullupdate(id)
return PLUGIN_HANDLED
/*====================================================================================================
[Upgrades]
Purpose: This handles the upgrade menu.
Comment: $$
====================================================================================================*/
public BuyUpgrade(id) {
new level[65], num[11], mTitle[101]//, max_count
format(mTitle,100,"%L",id,"MENU_TITLE")
menu_upgrade[id] = menu_create(mTitle, "Upgrade_Handler")
new x
for(x=1; x<=UPGRADES; x++)
{
new price = ((PlayerUpgrades[id][x] * UpgradePrice[x]) / 2) + UpgradePrice[x]
if((PlayerUpgrades[id][x] + 1) > UpgradeMax[x]) {
//max_count++
format(level,64,"\r%s %L",UpgradeTitles[x],id,"MENU_CHOICE_MAXED",UpgradeMax[x])
}
else {
format(level,64,"%s \r%L \y-- \w%i XP",UpgradeTitles[x], id, "MENU_CHOICE_NEXT", PlayerUpgrades[id][x]+1, price)
}
format(num, 10,"%i",x)
menu_additem(menu_upgrade[id], level, num, 0)
}
menu_addblank(menu_upgrade[id], (UPGRADES+1))
menu_setprop(menu_upgrade[id], MPROP_EXIT, MEXIT_NORMAL)
menu_display(id, menu_upgrade[id], 0)
return PLUGIN_HANDLED
}
public Upgrade_Handler(id, menu, item) {
if(item == MENU_EXIT)
return PLUGIN_HANDLED
new cmd[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
new upgrade = str_to_num(cmd)
new playerupgrade = PlayerUpgrades[id][upgrade]
new price = ((playerupgrade * UpgradePrice[upgrade]) / 2) + UpgradePrice[upgrade]
new maxupgrade = UpgradeMax[upgrade]
if(playerupgrade != maxupgrade && playerupgrade != maxupgrade+MAX_LVL_BONUS)
{
new needed = g_Experience[id] - price
if( (needed >= 0) )
{
if(playerupgrade < maxupgrade-1)
playerupgrade += 1
else
playerupgrade += MAX_LVL_BONUS+1
g_Experience[id] -= price
if(playerupgrade < maxupgrade)
client_print(id,print_chat,"%L",id,"MENU_UPGRADED",playerupgrade,UpgradeTitles[upgrade],price)
else {
client_print(id,print_chat,"%L",id,"MENU_UPGRADED",maxupgrade,UpgradeTitles[upgrade],price)
#if(MAX_LVL_BONUS > 1)
client_print(id,print_chat,"%L",id,"MENU_MAX_LVL_BONUS",maxupgrade,MAX_LVL_BONUS)
#else
client_print(id,print_chat,"%L",id,"MENU_MAX_LVL",maxupgrade)
#endif
play_wav(id, UPGRADED_MAX_LEVEL)
}
switch(upgrade) {
case STA: {
new stam = playerupgrade * AMOUNT_STA
entity_set_float(id, EV_FL_health, float(BASE_HP + stam))
}
case AGI: {
if(!g_sprint[id])
set_speedchange(id)
}
}
PlayerUpgrades[id][upgrade] = playerupgrade
}
else
client_print(id,print_chat,"%L",id,"MENU_MISSING_EXP",(needed * -1),(playerupgrade+1),UpgradeTitles[upgrade])
}
else {
client_print(id,print_chat,"%L",id,"MENU_UPGRADE_MAXED",UpgradeTitles[upgrade],maxupgrade)
}
return PLUGIN_HANDLED
}
/*====================================================================================================
[Meters]
Purpose: This controls the turbo meter and curve angle meter.
Comment: $$
====================================================================================================*/
public meter()
{
new id
new turboTitle[32]
new sprintText[128], sec
new r, g, b, team
new len, x
new ndir = -(DIRECTIONS)
format(turboTitle,31,"%L",LANG_PLAYER,"TURBO_TITLE");
for(id=1; id<=maxplayers; id++)
{
if(!is_user_connected(id) || !is_user_alive(id) || is_user_bot(id))
continue
sec = seconds[id]
team = get_user_team(id)
r = TeamMeterColors[team][0]
g = TeamMeterColors[team][1]
b = TeamMeterColors[team][2]
if(id == ballholder) {
set_hudmessage(r, g, b, POS_X, 0.75, 0, 0.0, 0.6, 0.0, 0.0, 1)
len = format(sprintText, 127, " %L ^n[",id,"CURVE_TITLE")
for(x=DIRECTIONS; x>=ndir; x--)
if(x==0)
len += format(sprintText[len], 127-len, "%s%s",direction==x?"0":"+", x==ndir?"]":" ")
else
len += format(sprintText[len], 127-len, "%s%s",direction==x?"0":"=", x==ndir?"]":" ")
show_hudmessage(id, "%s", sprintText)
}
set_hudmessage(r, g, b, POS_X, POS_Y, 0, 0.0, 0.6, 0.0, 0.0, 3)
if(sec > 30) {
sec -= 2
format(sprintText, 127, " %s ^n[==============]",turboTitle)
set_speedchange(id)
g_sprint[id] = 0
}
else if(sec >= 0 && sec < 30 && g_sprint[id]) {
sec += 2
set_speedchange(id, 100.0)
}
switch(sec) {
case 0: format(sprintText, 127, " %s ^n[||||||||||||||]",turboTitle)
case 2: format(sprintText, 127, " %s ^n[|||||||||||||=]",turboTitle)
case 4: format(sprintText, 127, " %s ^n[||||||||||||==]",turboTitle)
case 6: format(sprintText, 127, " %s ^n[|||||||||||===]",turboTitle)
case 8: format(sprintText, 127, " %s ^n[||||||||||====]",turboTitle)
case 10: format(sprintText, 127, " %s ^n[|||||||||=====]",turboTitle)
case 12: format(sprintText, 127, " %s ^n[||||||||======]",turboTitle)
case 14: format(sprintText, 127, " %s ^n[|||||||=======]",turboTitle)
case 16: format(sprintText, 127, " %s ^n[||||||========]",turboTitle)
case 18: format(sprintText, 127, " %s ^n[|||||=========]",turboTitle)
case 20: format(sprintText, 127, " %s ^n[||||==========]",turboTitle)
case 22: format(sprintText, 127, " %s ^n[|||===========]",turboTitle)
case 24: format(sprintText, 127, " %s ^n[||============]",turboTitle)
case 26: format(sprintText, 127, " %s ^n[|=============]",turboTitle)
case 28: format(sprintText, 127, " %s ^n[==============]",turboTitle)
case 30: {
format(sprintText, 128, " %s ^n[==============]",turboTitle)
sec = 92
}
case 32: sec = 0
}
seconds[id] = sec
show_hudmessage(id,"%s",sprintText)
}
}
/*====================================================================================================
[Misc.]
Purpose: $$
Comment: $$
====================================================================================================*/
set_speedchange(id, Float:speed=0.0)
{
new Float:agi = float( (PlayerUpgrades[id][AGI] * AMOUNT_AGI) + (id==ballholder?(AMOUNT_POWERPLAY * (PowerPlay*2)):0) )
agi += (BASE_SPEED + speed)
entity_set_float(id,EV_FL_maxspeed, agi)
}
public give_knife(id) {
if(id > 1000)
id -= 1000
remove_task(id+1000)
give_item(id, "weapon_knife")
has_knife[id] = true;
}
Event_Record(id, recordtype, amt, exp) {
if(amt == -1)
MadeRecord[id][recordtype]++
else
MadeRecord[id][recordtype] = amt
new playerRecord = MadeRecord[id][recordtype]
if(playerRecord > TopPlayer[1][recordtype])
{
TopPlayer[0][recordtype] = id
TopPlayer[1][recordtype] = playerRecord
new name[MAX_NAME_LENGTH+1]
get_user_name(id,name,MAX_NAME_LENGTH)
format(TopPlayerName[recordtype],MAX_NAME_LENGTH,"%s",name)
}
g_Experience[id] += exp
}
Float:normalize(Float:nVel)
{
if(nVel > 360.0) {
nVel -= 360.0
}
else if(nVel < 0.0) {
nVel += 360.0
}
return nVel
}
print_message(id, msg[]) {
message_begin(MSG_ONE_UNRELIABLE, gmsgSayText, {0,0,0}, id)
write_byte(id)
write_string(msg)
message_end()
}
public editTextMsg()
{
new string[64], radio[64]
get_msg_arg_string(2, string, 63)
if( get_msg_args() > 2 )
get_msg_arg_string(3, radio, 63)
if(containi(string, "#Game_will_restart") != -1 || containi(radio, "#Game_radio") != -1)
return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
public client_connect(id)
if(is_kickball)
set_user_info(id,"_vgui_menus","0")
public AutoRespawn(id)
if(is_dead[id] && is_user_connected(id)) {
new team = get_user_team(id)
if(team == 1 || team == 2) {
spawn(id)
}
else
is_dead[id] = false
}
public AutoRespawn2(id)
if(is_dead[id] && is_user_connected(id)) {
new team = get_user_team(id)
if(team == 1 || team == 2) {
spawn(id)
if(!has_knife[id])
give_knife(id)
}
//strip_user_weapons(id)
is_dead[id] = false
}
play_wav(id, wav[])
client_cmd(id,"spk %s",wav)
cmdSpectate(id) {
cs_set_user_team(id, CS_TEAM_SPECTATOR, CS_DONTCHANGE)
if(is_user_alive(id))
user_kill(id)
}
increaseTeamXP(team, amt) {
new id
for(id=1; id<=maxplayers; id++)
if(get_user_team(id) == team && is_user_connected(id))
g_Experience[id] += amt
}
setScoreInfo(id) {
message_begin(MSG_BROADCAST,get_user_msgid("ScoreInfo"));
write_byte(id);
write_short(get_user_frags(id));
write_short(cs_get_user_deaths(id));
write_short(0);
write_short(get_user_team(id));
message_end();
}
// Erase our current temps (used for ball events)
public eraser(num) {
if(num == 3333)
format(temp1,63,"")
if(num == 4444)
format(temp2,63,"")
return PLUGIN_HANDLED
}
/*====================================================================================================
[Cleanup]
Purpose: $$
Comment: $$
====================================================================================================*/
public client_disconnect(id) {
if(is_kickball) {
new x
for(x = 1; x<=RECORDS; x++)
MadeRecord[id][x] = 0
remove_task(id)
if(ballholder == id ) {
ballholder = 0
clearBall()
}
if(ballowner == id) {
ballowner = 0
}
GoalyPoints[id] = 0
PlayerKills[id] = 0
PlayerDeaths[id] = 0
is_dead[id] = false
seconds[id] = 0
g_sprint[id] = 0
PressedAction[id] = 0
has_knife[id] = false;
g_Experience[id] = 0
for(x=1; x<=UPGRADES; x++)
PlayerUpgrades[id][x] = 0
}
}
cleanup() {
new x, id, m
for(x=1;x<=RECORDS;x++) {
TopPlayer[0][x] = 0
TopPlayer[1][x] = 0
TopPlayerName[x][0] = 0
}
for(id=1;id<=maxplayers;id++) {
PlayerDeaths[id] = 0
PlayerKills[id] = 0
//UsedExp[id] = 0
g_Experience[id] = 0
for(x=1;x<=UPGRADES;x++)
PlayerUpgrades[id][x] = 0
for(m = 1; m<=RECORDS; m++)
MadeRecord[id][m] = 0
}
PowerPlay = 0
winner = 0
score[T] = 0
score[CT] = 0
set_cvar_num("score_ct",0)
set_cvar_num("score_t",0)
for(x = 0;x<=cntCT;x++)
ct[x] = 0
for(x = 0; x<= cntT; x++)
terr[x] = 0
cntCT = 0
cntT = 0
}
/*====================================================================================================
[Help]
Purpose: $$
Comment: $$
====================================================================================================*/
public client_putinserver(id) {
if(is_kickball) {
set_task(20.0,"soccerjamHelp",id)
}
}
public soccerjamHelp(id)
{
client_cmd(id, "cl_forwardspeed 1000")
client_cmd(id, "cl_backspeed 1000")
client_cmd(id, "cl_sidespeed 1000")
new name[32]
get_user_name(id,name,31)
client_print(id,print_chat,"========= - [Soccer Jam] v%s - ========",VERSION)
client_print(id,print_chat,"%L",id,"WELCOME_MSG",name)
client_print(id,print_chat,"%L",id,"WELCOME_HELP_MSG")
LateJoinExp(id)
client_print(id,print_chat,"=========------------------========")
}
LateJoinExp(id)
{
new total = (score[T] + score[CT]) * AMOUNT_LATEJOINEXP
if(total) {
g_Experience[id] += total
client_print(id, print_chat, "%L",id,"EXP_FOR_LATEJOIN",total)
}
}
public handle_say(id)
{
new said[192], help[7]
read_args(said,192)
remove_quotes(said)
strcat(help,said,6)
if( (containi(help, "help") != -1) )
soccerjam_help(id)
if( (contain(help, "spec") != -1) )
cmdSpectate(id)
return PLUGIN_CONTINUE
}
public soccerjam_help(id) {
new help_title[64], msg[2047], len
format(help_title,63,"%L",id,"HELP_HEADER")
len = format(msg,2046,"<body bgcolor=#000000><font color=#FFB000><br>")
len += format(msg[len],2046-len,"<center><h2>%L</h2><br><table><tr><td><p><b><font color=#FFB000>",id,"HELP_TITLE")
len += format(msg[len],2046-len,"<h2>%L</h2>",id,"HELP_MOVES_TITLE")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_MOVES_KICK")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_MOVES_CURVELEFT")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_MOVES_CURVERIGHT")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_MOVES_TURBO")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_MOVES_UPGRADE")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_MOVES_DIVE")
len += format(msg[len],2046-len,"%L<br><br>",id,"HELP_MOVES_CATCH")
len += format(msg[len],2046-len,"<h2>%L</h2>",id,"HELP_STATS_TITLE")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_STATS_STAMINA")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_STATS_STRENGTH")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_STATS_AGILITY")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_STATS_DEXTERITY")
len += format(msg[len],2046-len,"%L<br>",id,"HELP_STATS_DISARM")
len += format(msg[len],2046-len,"<h2>%L</h2>",id,"HELP_POWERPLAY_TITLE")
len += format(msg[len],2046-len,"- %L<br>",id,"HELP_POWERPLAY_ONE")
len += format(msg[len],2046-len,"- %L<br>",id,"HELP_POWERPLAY_TWO")
len += format(msg[len],2046-len,"<h2>%L</h2>",id,"HELP_TIPS_TITLE")
len += format(msg[len],2046-len,"- %L<br>",id,"HELP_TIPS_ONE")
len += format(msg[len],2046-len,"- %L<br>",id,"HELP_TIPS_TWO")
len += format(msg[len],2046-len,"- %L<br>",id,"HELP_TIPS_THREE")
len += format(msg[len],2046-len,"</b><br></td></tr></table><br>Soccer Jam made by OneEyed</center>")
show_motd(id,msg,help_title)
}
/*====================================================================================================
[Post Game]
Purpose: $$
Comment: $$
====================================================================================================*/
public showhud_winner() {
set_hudmessage(255, 0, 20, -1.0, 0.35, 1, 1.0, 1.5, 0.1, 0.1, HUD_CHANNEL)
show_hudmessage(0,"%s",scoreboard)
}
public displayWinnerAwards()
{
//If NO steal/assist was made, set name to Nobody
new x
for(x=1;x<=RECORDS;x++)
if(!TopPlayer[0][x])
format(TopPlayerName[x],MAX_NAME_LENGTH,"Nobody")
//Display our Winning Team, with Awards, and kill Comm Chair of opponent
new awards[513]
new len = 0
len += format(awards[len], 512-len, "%s %L^n", (winner == 1 ? "Terrorist" : "CT"), LANG_PLAYER, "AWARDS_HEADER" )
len += format(awards[len], 512-len, "%s - %i | %s - %i^n^n", TeamNames[T],score[T],TeamNames[CT],score[CT])
len += format(awards[len], 512-len, " %L^n",LANG_PLAYER,"AWARDS_TITLE")
len += format(awards[len], 512-len, "%i %L -- %s^n", TopPlayer[1][GOAL], LANG_PLAYER, "AWARDS_GOALS", TopPlayerName[GOAL])
len += format(awards[len], 512-len, "%i %L -- %s^n", TopPlayer[1][STEAL], LANG_PLAYER, "AWARDS_STEALS", TopPlayerName[STEAL])
len += format(awards[len], 512-len, "%i %L -- %s^n", TopPlayer[1][ASSIST], LANG_PLAYER, "AWARDS_ASSISTS", TopPlayerName[ASSIST])
len += format(awards[len], 512-len, "%i %L -- %s^n", TopPlayer[1][KILL], LANG_PLAYER, "AWARDS_BALLKILLS", TopPlayerName[KILL])
len += format(awards[len], 512-len, "%i %L -- %s^n", TopPlayer[1][DISTANCE], LANG_PLAYER, "AWARDS_LONGESTGOAL", TopPlayerName[DISTANCE])
set_hudmessage(250, 130, 20, 0.4, 0.35, 0, 1.0, 10.0, 0.1, 0.1, 2)
show_hudmessage(0, "%s", awards)
}
public PostGame() {
new randomize = get_pcvar_num(CVAR_RANDOM)
if(randomize)
{
set_hudmessage(20, 250, 20, -1.0, 0.55, 1, 1.0, 3.0, 1.0, 0.5, 2)
show_hudmessage(0, "%L",LANG_PLAYER,"RANDOMIZING_TEAMS")
set_task(3.0,"randomize_teams",0)
}
else
BeginCountdown()
}
public BeginCountdown() {
if(!timer) {
timer = COUNTDOWN_TIME
cleanup()
}
else {
new output[32]
num_to_word(timer,output,31)
client_cmd(0,"spk vox/%s.wav",output)
if(timer > (COUNTDOWN_TIME / 2))
set_hudmessage(20, 250, 20, -1.0, 0.55, 1, 1.0, 1.0, 1.0, 0.5, 2)
else
set_hudmessage(255, 0, 0, -1.0, 0.55, 1, 1.0, 1.0, 1.0, 0.5, 2)
if(timer > (COUNTDOWN_TIME - 2))
show_hudmessage(0, "%L^n%i",LANG_PLAYER,"GAME_BEGINS_IN",timer)
else
show_hudmessage(0, "%i",timer)
if(timer == 1)
server_cmd("sv_restart 1")
timer--
set_task(0.9,"BeginCountdown",0)
}
}
/*====================================================================================================
[Team Randomizer]
Purpose: $$
Comment: $$
====================================================================================================*/
public randomize_teams()
{
new terr, ct, id, team, cnt, temp, x, pl_temp
new teams[3][33], player_list[33]
new shuff_t, shuff_ct
new shuffle = random_num(10,30)
//Put all players in one big list
for(id=1; id<=maxplayers; id++)
if(is_user_connected(id) && !is_user_bot(id)) {
team = get_user_team(id)
if(team == 1 || team == 2)
player_list[cnt++] = id
}
cnt--
//Make a list of Terr and CT players
while(cnt >= 0)
{
if(cnt % 2 == 0)
teams[1][terr++] = player_list[cnt--]
else
teams[2][ct++] = player_list[cnt--]
}
//Shuffle the players
for(x=0;x<=shuffle;x++) {
shuff_t = random_num(0,terr-1);
shuff_ct = random_num(0,ct-1);
temp = teams[1][shuff_t];
teams[1][shuff_t] = teams[2][shuff_ct];
teams[2][shuff_ct] = temp;
}
//Put Players in their team.
for(x=1; x<3; x++)
for(id=0; id<((terr>ct?terr:ct)); id++) {
pl_temp = teams[x][id]
if(is_user_connected(pl_temp)) {
select_model(pl_temp, x, random_num(1,4))
set_task(1.0, "DelayedTeamSwitch", pl_temp+(x*1000))
}
}
set_task(3.0,"BeginCountdown",0)
}
public DelayedTeamSwitch(id) {
new team, msg[124]
if(id >= 2000)
team = 2
else
team = 1
id -= team*1000
format(msg, 123, "^x03 %L",id,"RANDOM_MOVED_TEAM", team==1?"Terrorist":"Counter-Terrorist")
print_message(id, msg)
}
//random model selecting for teamstack
select_model(id, team, model) {
switch(team) {
case 1: {
switch(model) {
case 1: cs_set_user_team(id, CS_TEAM_T, CS_T_TERROR)
case 2: cs_set_user_team(id, CS_TEAM_T, CS_T_LEET)
case 3: cs_set_user_team(id, CS_TEAM_T, CS_T_ARCTIC)
case 4: cs_set_user_team(id, CS_TEAM_T, CS_T_GUERILLA)
}
}
case 2: {
switch(model) {
case 1: cs_set_user_team(id, CS_TEAM_CT, CS_CT_URBAN)
case 2: cs_set_user_team(id, CS_TEAM_CT, CS_CT_GSG9)
case 3: cs_set_user_team(id, CS_TEAM_CT, CS_CT_SAS)
case 4: cs_set_user_team(id, CS_TEAM_CT, CS_CT_GIGN)
case 5: cs_set_user_team(id, CS_TEAM_CT, CS_CT_VIP) //my lil secret
}
}
case 3: {
cs_set_user_team(id, CS_TEAM_SPECTATOR, CS_DONTCHANGE)
if(is_user_alive(id))
user_kill(id)
}
}
}
/*====================================================================================================
[Special FX]
Purpose: $$
Comment: $$
====================================================================================================*/
TerminatePlayer(id, mascot, team, Float:dmg) {
new orig[3], Float:morig[3], iMOrig[3]
get_user_origin(id, orig)
entity_get_vector(mascot,EV_VEC_origin,morig)
new x
for(x=0;x<3;x++)
iMOrig[x] = floatround(morig[x])
fakedamage(id,"Terminator",dmg,1)
new hp = get_user_health(id)
if(hp < 0)
increaseTeamXP(team, 25)
new loc = (team == 1 ? 100 : 140)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(0)
write_coord(iMOrig[0]) //(start positionx)
write_coord(iMOrig[1]) //(start positiony)
write_coord(iMOrig[2] + loc) //(start positionz)
write_coord(orig[0]) //(end positionx)
write_coord(orig[1]) //(end positiony)
write_coord(orig[2]) //(end positionz)
write_short(g_fxBeamSprite) //(sprite index)
write_byte(0) //(starting frame)
write_byte(0) //(frame rate in 0.1's)
write_byte(7) //(life in 0.1's)
write_byte(120) //(line width in 0.1's)
write_byte(25) //(noise amplitude in 0.01's)
write_byte(250) //r
write_byte(0) //g
write_byte(0) //b
write_byte(220) //brightness
write_byte(1) //(scroll speed in 0.1's)
message_end()
}
glow(id, r, g, b, on) {
if(on == 1) {
set_rendering(id, kRenderFxGlowShell, r, g, b, kRenderNormal, 255)
entity_set_float(id, EV_FL_renderamt, 1.0)
}
else if(!on) {
set_rendering(id, kRenderFxNone, r, g, b, kRenderNormal, 255)
entity_set_float(id, EV_FL_renderamt, 1.0)
}
else if(on == 10) {
set_rendering(id, kRenderFxGlowShell, r, g, b, kRenderNormal, 255)
entity_set_float(id, EV_FL_renderamt, 1.0)
}
}
on_fire()
{
new rx, ry, rz, Float:forig[3], forigin[3], x
fire_delay = get_gametime()
rx = random_num(-5, 5)
ry = random_num(-5, 5)
rz = random_num(-5, 5)
entity_get_vector(aball, EV_VEC_origin, forig)
for(x=0;x<3;x++)
forigin[x] = floatround(forig[x])
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(17)
write_coord(forigin[0] + rx)
write_coord(forigin[1] + ry)
write_coord(forigin[2] + 10 + rz)
write_short(Burn_Sprite)
write_byte(7)
write_byte(235)
message_end()
}
beam() {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(22) // TE_BEAMFOLLOW
write_short(aball) // ball
write_short(beamspr)// laserbeam
write_byte(BALL_BEAM_LIFE) // life
write_byte(BALL_BEAM_WIDTH) // width
write_byte(BALL_BEAM_RED) // R
write_byte(BALL_BEAM_GREEN) // G
write_byte(BALL_BEAM_BLUE) // B
write_byte(BALL_BEAM_ALPHA) // brightness
message_end()
}
flameWave(myorig[3]) {
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, myorig)
write_byte( 21 )
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2] + 16)
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2] + 500)
write_short( fire )
write_byte( 0 ) // startframe
write_byte( 0 ) // framerate
write_byte( 15 ) // life 2
write_byte( 50 ) // width 16
write_byte( 10 ) // noise
write_byte( 255 ) // r
write_byte( 0 ) // g
write_byte( 0 ) // b
write_byte( 255 ) //brightness
write_byte( 1 / 10 ) // speed
message_end()
message_begin(MSG_BROADCAST,SVC_TEMPENTITY,myorig)
write_byte( 21 )
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2] + 16)
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2] + 500)
write_short( fire )
write_byte( 0 ) // startframe
write_byte( 0 ) // framerate
write_byte( 10 ) // life 2
write_byte( 70 ) // width 16
write_byte( 10 ) // noise
write_byte( 255 ) // r
write_byte( 50 ) // g
write_byte( 0 ) // b
write_byte( 200 ) //brightness
write_byte( 1 / 9 ) // speed
message_end()
message_begin(MSG_BROADCAST,SVC_TEMPENTITY,myorig)
write_byte( 21 )
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2] + 16)
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2] + 500)
write_short( fire )
write_byte( 0 ) // startframe
write_byte( 0 ) // framerate
write_byte( 10 ) // life 2
write_byte( 90 ) // width 16
write_byte( 10 ) // noise
write_byte( 255 ) // r
write_byte( 100 ) // g
write_byte( 0 ) // b
write_byte( 200 ) //brightness
write_byte( 1 / 8 ) // speed
message_end()
//Explosion2
message_begin( MSG_BROADCAST, SVC_TEMPENTITY)
write_byte( 12 )
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2])
write_byte( 80 ) // byte (scale in 0.1's) 188
write_byte( 10 ) // byte (framerate)
message_end()
//TE_Explosion
message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte( 3 )
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2])
write_short( fire )
write_byte( 65 ) // byte (scale in 0.1's) 188
write_byte( 10 ) // byte (framerate)
write_byte( 0 ) // byte flags
message_end()
//Smoke
message_begin( MSG_BROADCAST,SVC_TEMPENTITY,myorig)
write_byte( 5 ) // 5
write_coord(myorig[0])
write_coord(myorig[1])
write_coord(myorig[2])
write_short( smoke )
write_byte( 50 ) // 2
write_byte( 10 ) // 10
message_end()
return PLUGIN_HANDLED
}
Pafos писал(а):VenomIvanof, the function createball creates a ball (573 lines) . look where the it gets called .
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5