AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Knives explosives (https://forums.alliedmods.net/showthread.php?t=156549)

bobby3 05-08-2011 09:46

Knives explosives
 
Im trying to get the knives to make a explosion just like an HE. When it explodes should take dmg to every1 around it.
Code based on this plugin
PHP Code:

/* AMX Mod X script.
*
*   Throwing Knives (throwing_knives.sma)
*   Copyright (C) 2003-2004  -]ToC[-Bludy / jtp10181
*
*   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.
*
*   In addition, as a special exception, the author gives permission to
*   link the code of this program with the Half-Life Game Engine ("HL
*   Engine") and Modified Game Libraries ("MODs") developed by Valve,
*   L.L.C ("Valve"). You must obey the GNU General Public License in all
*   respects for all of the code used other than the HL Engine and MODs
*   from Valve. If you modify this file, you may extend this exception
*   to your version of the file, but you are not obligated to do so. If
*   you do not wish to do so, delete this exception statement from your
*   version.
*
****************************************************************************
*
*   Version 1.0.2 - Date: 10/09/2004
*
*   Original by -]ToC[-Bludy
*
*   Upgraded to STEAM and ported to AMXx by: jtp10181 <[email protected]>
*   Homepage: http://www.jtpage.net
*
****************************************************************************
*
*   Admin Commands:
*
*     amx_tknives - Toggles Throwing Knives On and Off
*
*   Client Commands:
*
*     throw_knife  - This is the command for everyone to throw knives
*     say /knifehelp  - Brings up knifehelp menu to help players bind keys
*     say /throwingknives - Same as /knifehelp
*
*  CVARs: Paste the following into your amxx.cfg to change defaults.
*  must uncomment cvar lines for them to take effect
*
****************************************************************************
*  CVAR CONFIG BEGIN
****************************************************************************
// ******************  Throwing Knives Setup ******************
//Toggles Throwing Knives on and off (default 0) ( 1 or 0 )
//amx_throwknives 1
//The amount of ammo to be given at roundstart (default 5) ( 1 or higher )
//amx_knifeammo 5
//Force at which knives are thrown (default 1200) ( 200 or higher )
//amx_knifetossforce 1200
//Maximum amount of knives allowed at once (default 10) ( amx_knifeammo or higher )
//amx_maxknifeammo 10
//Damage dealt on a knife hit (default 25) ( 1 or higher )
//amx_knifedmg 25
//Toggles knife dropping on death on and off (default 1) ( 1 or 0 )
//amx_dropknives 1
//Toggles autoswitching to knife when bind is pressed (default 1) ( 1 or 0 )
//amx_knifeautoswitch 1
//Toggles logging kill as "throwing_knife" or "knife" (default 0) (1 = throwing_knife, 0 = knife)
//amx_tknifelog 1
****************************************************************************
*  CVAR CONFIG END
****************************************************************************
*
*  Additional info:
*
* - You must bind a key to throw_knife
* - You can no longer drop your knives on command, only when you die
* - Team Attack system dropped, but it will obey the server friendlyfire cvar
*
*  NEW FEATURES:
*
* - New knife model, more effecient, smaller file size, easier to download
* - New contact system, knife will stick to whatever they hit
* - New code which is less CPU intensive, less bugs, server crashing seems to be eliminated.
*
*  DESCRIPTION:
*
*     It was brought to my attention a few days ago that with the update to the 
*     AMX forums the file attached to the bottom of the forum topic had only an 
*     .amx file and no custom model.  This gave me the motivation to create a new 
*     model that was smaller and faster to download, and a brand new knife system 
*     to make the knives more realistic.  It took a few server crashes to get the 
*     code right, but it payed off in the end.  A few of my clan members and I 
*     played throwing knife darts on one of the 
*     players sprays to celebrate.
*             
*     The knives work a lot better than before, and they are a lot of fun to 
*     play with. So get your knives out and go Have Fun
*
*                 ******** Engine Module REQUIRED ********
*                   ******** FUN Module REQUIRED ********
*
*  Changelog:
*
*  v1.0.2 - JTP10181 - 10/09/04
* - Support for AMXModX 0.20
*
*  v1.0.1 - JTP10181 - 08/11/04
* - Some tweaks to make it work better on listenservers, changed engclient_cmd to client_cmd
*
*  v1.0 - JTP10181 - 07/05/04
* - Removed some unneeded return statements
* - Made it so the knives cannot be used before the round has started (freezetime)
* - Added some extra checks on variables to be safe
* - Redid the delay code so it did not use a task
* - Changed authid arrays to be 34 usable chars for future compatibility
*
*  v0.9.8 - JTP10181 - 06/08/04
* - Tweaked the help messages a little for the commands
* - Removed all \ line breaks, not supported anymore.
* - Somewhere I added the auto-switch feature but forgot to log it.
*
*  v0.9.7 - JTP10181 - 05/19/04
* - Upgraded MOTD box to STEAM compatibility
* - Fixed bugs that happened when amx_knifeammo is greater than amx_maxknifeammo
* - Made checks to keep amx_knifeammo from being set higher than amx_maxknifeammo
* - Started to reorganize code to make it easier to follow
* - Changed a lot of PLUGIN_HANDLED to PLUGIN_CONTINUE
* - Fixed bug with partial pickups not subtracting the correct ammount from the dropped ammo
* - Hopefully fixed bug that would sometimes kill all the knife entities in the middle of a round
* - Added logging to server logs for stats software
* - Fixed bugs with scores being updated wrong
*
*  Below v0.9.6 was maintained by -]ToC[-Bludy
*
**************************************************************************/
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fun>
new bool:knifeout[33]
new 
bool:roundfreeze
new Float:tossdelay[33]
new 
knifeammo[33]
new 
holdammo[33]
new 
fire
public player_death() {
 new 
id read_data(2)
 
knife_drop(id)
}
public 
HandleSay(id) {
 new 
Speech[192]
 
read_args(Speech,192)
 
remove_quotes(Speech)
 if(!
equal(Speech"vote",4) && ((containi(Speech"knife") != -1) || (containi(Speech"knives") != -1))) {
  if(
get_cvar_num("amx_throwknives") == 1){
   
client_print(id,print_chat"[AMX] Throwing Knives are ON - For help say /knifehelp")
  }
  else {
   
client_print(id,print_chat"[AMX] Throwing Knives are OFF")
  }
 }
}
public 
knife_drop(id) {
 
 if(!
get_cvar_num("amx_dropknives") || knifeammo[id] <= || !get_cvar_num("amx_throwknives")) return
 new 
FloatOrigin[3], FloatVelocity[3]
 
entity_get_vector(idEV_VEC_originOrigin)
 new 
knifedrop create_entity("info_target")
 if(!
knifedrop) return
 
entity_set_string(knifedropEV_SZ_classname"knife_pickup")
 
entity_set_model(knifedrop"models/w_knifepack.mdl")
 new 
Float:MinBox[3] = {-1.0, -1.0, -1.0}
 new 
Float:MaxBox[3] = {1.01.01.0}
 
entity_set_vector(knifedropEV_VEC_minsMinBox)
 
entity_set_vector(knifedropEV_VEC_maxsMaxBox)
 
entity_set_origin(knifedropOrigin)
 
entity_set_int(knifedropEV_INT_effects32)
 
entity_set_int(knifedropEV_INT_solid1)
 
entity_set_int(knifedropEV_INT_movetype6)
 
entity_set_edict(knifedropEV_ENT_ownerid)
 
VelocityByAim(id400 Velocity)
 
entity_set_vector(knifedropEV_VEC_velocity ,Velocity)
 
holdammo[id] = knifeammo[id]
 
knifeammo[id] = 0
}
public 
check_knife(id) {
 if(!
get_cvar_num("amx_throwknives")) return
 new 
weapon read_data(2)
 if(
weapon == CSW_KNIFE) {
  
knifeout[id] = true
  
/*if(knifeammo[id] > 1) {
   client_print(id, print_center,"You have %d knives",knifeammo[id])
  }
  else if(knifeammo[id] == 1) {
   client_print(id, print_center,"You have %d knife",knifeammo[id])
  }*/
  
client_print(idprint_center,"You have %d throwing %s",knifeammo[id], knifeammo[id] == "knife" "knives")
 }
 else {
  
knifeout[id] = false
 
}
}
public 
kill_all_entity(classname[]) {
 new 
iEnt find_ent_by_class(-1classname)
 new 
tEnt
 
while(iEnt 0) {
  
tEnt iEnt
  iEnt 
find_ent_by_class(iEntclassname)
  
remove_entity(tEnt)
 }
}
public 
new_spawn(id) {
 if(
knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo")
 if(
knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo")
 
tossdelay[id] = 0.0
}
public 
client_connect(id) {
 
knifeammo[id] = get_cvar_num("amx_knifeammo")
 
holdammo[id] = 0
 tossdelay
[id] = 0.0
 knifeout
[id] = false
}
public 
client_disconnect(id) {
 
knifeammo[id] = 0
 holdammo
[id] = 0
 tossdelay
[id] = 0.0
 knifeout
[id] = false
}
public 
round_start() {
 
roundfreeze false
}
public 
round_end() {
 
roundfreeze true
 kill_all_entity
("throwing_knife")
 
kill_all_entity("knife_pickup")
}
public 
vexd_pfntouch(pToucherpTouched) {
 if ( !
is_valid_ent(pToucher) ) return
 if (!
get_cvar_num("amx_throwknives")) return
 new 
Classname[32]
 
entity_get_string(pToucherEV_SZ_classnameClassname31)
 new 
owner entity_get_edict(pToucherEV_ENT_owner)
 new 
Float:kOrigin[3]
 
entity_get_vector(pToucherEV_VEC_originkOrigin)
 if(
equal(Classname,"knife_pickup")) {
  if ( !
is_valid_ent(pTouched) ) return
 
  
check_cvars()
  new 
Class2[32]     
  
entity_get_string(pTouchedEV_SZ_classnameClass231)
  if(!
equal(Class2,"player") || knifeammo[pTouched] >= get_cvar_num("amx_maxknifeammo")) return
  if((
knifeammo[pTouched] + holdammo[owner]) > get_cvar_num("amx_maxknifeammo")) {
   
holdammo[owner] -= get_cvar_num("amx_maxknifeammo") - knifeammo[pTouched]
   
knifeammo[pTouched] = get_cvar_num("amx_maxknifeammo")
   
emit_sound(pToucherCHAN_ITEM"weapons/knife_deploy1.wav"1.0ATTN_NORM0PITCH_NORM)
  }
  else {
   
knifeammo[pTouched] += holdammo[owner]
   
emit_sound(pToucherCHAN_ITEM"weapons/knife_deploy1.wav"1.0ATTN_NORM0PITCH_NORM)
   
remove_entity(pToucher)
  }
  
client_print(pTouchedprint_center,"You have %i knives",knifeammo[pTouched])
 }
 else if(
equal(Classname,"throwing_knife")) {
  
check_cvars()
  if(
is_user_alive(pTouched)) {
   new 
movetype entity_get_int(pToucherEV_INT_movetype)
   if(
movetype == && knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) {
    if(
knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) knifeammo[pTouched] += 1
    client_print
(pTouched,print_center,"You have %i knives",knifeammo[pTouched])
    
emit_sound(pToucherCHAN_ITEM"weapons/knife_deploy1.wav"1.0ATTN_NORM0PITCH_NORM)
    
remove_entity(pToucher)
   }
   else if (
movetype != 0) {
    if(
owner == pTouched) return
    
remove_entity(pToucher)
    if(
get_cvar_num("mp_friendlyfire") == && get_user_team(pTouched) == get_user_team(owner)) return
                                                    new  
iVec3[3]
    new 
pTdead[33]
    
get_user_origin(pToucheriVec33)
    
entity_set_float(pTouchedEV_FL_dmg_takeget_cvar_num("amx_knifedmg") * 1.0)
    if((
get_user_health(pTouched) - get_cvar_num("amx_knifedmg")) <= 0) {
     
pTdead[pTouched] = 1
    
}
    else {
     
set_user_health(pTouchedget_user_health(pTouched) - get_cvar_num("amx_knifedmg"))
    }
    if(
get_user_team(pTouched) == get_user_team(owner)) {
     new 
name[33]
     
get_user_name(owner,name,32)
     
client_print(0,print_chat,"%s attacked a teammate",name)
    }
    
emit_sound(pTouchedCHAN_ITEM"weapons/knife_hit4.wav"1.0ATTN_NORM0PITCH_NORM)
                                                     
create_explosion(iVec3)
    if(
pTdead[pTouched]) {
     if(
get_user_team(pTouched) == get_user_team(owner)) {
      
set_user_frags(ownerget_user_frags(owner) - 1)
      
client_print(owner,print_center,"You killed a teammate")
     }
     else {
      
set_user_frags(ownerget_user_frags(owner) + 1)
     }
     new 
gmsgScoreInfo get_user_msgid("ScoreInfo")
     new 
gmsgDeathMsg get_user_msgid("DeathMsg")
     
//Kill the victim and block the messages
     
set_msg_block(gmsgDeathMsg,BLOCK_ONCE)
     
set_msg_block(gmsgScoreInfo,BLOCK_ONCE)
     
user_kill(pTouched,1)
     
//Update killers scorboard with new info
     
message_begin(MSG_ALL,gmsgScoreInfo)
     
write_byte(owner)
     
write_short(get_user_frags(owner))
     
write_short(get_user_deaths(owner))
     
write_short(0)
     
write_short(get_user_team(owner))
     
message_end()
     
//Update victims scoreboard with correct info
     
message_begin(MSG_ALL,gmsgScoreInfo)
     
write_byte(pTouched)
     
write_short(get_user_frags(pTouched))
     
write_short(get_user_deaths(pTouched))
     
write_short(0)
     
write_short(get_user_team(pTouched))
     
message_end()
     
//Replaced HUD death message
     
message_begin(MSG_ALL,gmsgDeathMsg,{0,0,0},0)
     
write_byte(owner)
     
write_byte(pTouched)
     
write_byte(0)
     
write_string("knife")
     
message_end()
     new 
tknifelog[16]
     if (
get_cvar_num("amx_tknifelog")) tknifelog "throwing_knife"
     
else tknifelog "knife"
     
new namea[32], authida[35], teama[32]
     new 
namev[32], authidv[35], teamv[32]
     
get_user_name(owner,namea,31)
     
get_user_authid(owner,authida,34)
     
get_user_team(owner,teama,31)
     
get_user_name(pTouched,namev,31)
     
get_user_authid(pTouched,authidv,34)
     
get_user_team(pTouched,teamv,31)
     
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
     
namea,get_user_userid(owner),authida,teama,namev,get_user_userid(pTouched),authidv,teamv,tknifelog)
    }
   }
  }
  else {
   
entity_set_int(pToucherEV_INT_movetype0)
   
emit_sound(pToucherCHAN_ITEM"weapons/knife_hitwall1.wav"1.0ATTN_NORM0PITCH_NORM)
  }
 }
}
create_explosion(Origin[3])
{
 
message_begin(MSG_ALLSVC_TEMPENTITY
 
write_byte(3)
 
write_coord(Origin[0]) 
 
write_coord(Origin[1]) 
 
write_coord(Origin[2] + 22
 
write_short(fire)  
 
write_byte(10)   
 
write_byte(12)   
 
write_byte(0)   
 
message_end()
 
 
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
 
write_byte(116)
 
write_coord(Origin[0]) 
 
write_coord(Origin[1]) 
 
write_coord(Origin[2]) 
 
write_byte(47)
 
message_end()
}
public 
command_knife(id) {
 if(!
is_user_alive(id) || !get_cvar_num("amx_throwknives") || roundfreeze) return PLUGIN_HANDLED
 
if(get_cvar_num("amx_knifeautoswitch")) {
  
knifeout[id] = true
  
//engclient_cmd(id,"weapon_knife")
  
client_cmd(id,"weapon_knife")
 }
 if(!
knifeammo[id]) client_print(id,print_center,"You are out of knives",knifeammo[id])
 if(!
knifeout[id] || !knifeammo[id]) return PLUGIN_HANDLED
 
if(tossdelay[id] > get_gametime() - 0.5) return PLUGIN_HANDLED
 
else tossdelay[id] = get_gametime()
 
knifeammo[id]--
 if (
knifeammo[id] == 1) {
  
client_print(id,print_center,"You have %i knife",knifeammo[id])
 }
 else {
  
client_print(id,print_center,"You have %i knives",knifeammo[id])
 }
 new 
FloatOrigin[3], FloatVelocity[3], FloatvAngle[3], Ent
 entity_get_vector
(idEV_VEC_origin Origin)
 
entity_get_vector(idEV_VEC_v_anglevAngle)
 
Ent create_entity("info_target")
 if (!
Ent) return PLUGIN_HANDLED
 entity_set_string
(EntEV_SZ_classname"throwing_knife")
 
entity_set_model(Ent"models/w_throwingknife.mdl")
 new 
Float:MinBox[3] = {-1.0, -7.0, -1.0}
 new 
Float:MaxBox[3] = {1.07.01.0}
 
entity_set_vector(EntEV_VEC_minsMinBox)
 
entity_set_vector(EntEV_VEC_maxsMaxBox)
 
vAngle[0] -= 90
 entity_set_origin
(EntOrigin)
 
entity_set_vector(EntEV_VEC_anglesvAngle)
 
entity_set_int(EntEV_INT_effects2)
 
entity_set_int(EntEV_INT_solid1)
 
entity_set_int(EntEV_INT_movetype6)
 
entity_set_edict(EntEV_ENT_ownerid)
 
VelocityByAim(idget_cvar_num("amx_knifetossforce") , Velocity)
 
entity_set_vector(EntEV_VEC_velocity ,Velocity)
 
 return 
PLUGIN_HANDLED
}
public 
admin_tknife(id,level,cid){
 
 if (!
cmd_access(id,level,cid,1))
  return 
PLUGIN_HANDLED
 
new authid[35],name[32]
 
get_user_authid(id,authid,34)
 
get_user_name(id,name,31)
 if(
get_cvar_num("amx_throwknives") == 0){
  
set_cvar_num("amx_throwknives",1)
  
client_print(0,print_chat,"[AMXX] Admin has enabled throwing knives")
  
console_print(id,"[AMXX] You have enabled throwing knives")
  
log_amx("Admin: ^"%s<%d><%s><>^" enabled throwing knives",name,get_user_userid(id),authid)
 }
 else {
  
set_cvar_num("amx_throwknives",0)
  
client_print(0,print_chat,"[AMXX] Admin has disabled throwing knives")
  
console_print(id,"[AMXX] You have disabled throwing knives")
  
log_amx("Admin: ^"%s<%d><%s><>^" disabled throwing knives",name,get_user_userid(id),authid)
 }
 return 
PLUGIN_HANDLED
}
 
/************************************************************
* MOTD Popups
************************************************************/
public knife_help(id)
{
 new 
len 1024
 
new buffer[1025]
 new 
0
#if !defined NO_STEAM
 
+= copy(buffer[n],len-n,"<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><body><pre>")
#endif
 
+= copybuffer[n],len-n,"To use your knives have to bind a key to:^n^n throw_knife^n^n")
 
+= copybuffer[n],len-n,"In order to bind a key you must open your console and use the bind command: ^n^n")
 
+= copybuffer[n],len-n,"bind ^"key^" ^"command^" ^n^n")
 
+= copybuffer[n],len-n,"In this case the command is ^"throw_knife^".  Here are some examples:^n^n")
 
+= copybuffer[n],len-n,"    bind f throw_knife         bind MOUSE3 throw_knife^n^n")
 
+= copybuffer[n],len-n,"- If a knife is thrown, you may pick it up when it stops moving ^n")
 
+= copybuffer[n],len-n,"- Knives are FF sensitive, you can hurt your teammates if FF is on^n")
 
+= copybuffer[n],len-n,"- Your knife ammo will show in the center of your screen^n")
 
+= copybuffer[n],len-n,"- You will get credit for knife kills on the scoreboard^n^n")
 
+= copybuffer[n],len-n,"Start your knifing and Have fun!")
#if !defined NO_STEAM
 
+= copybuffer[n],len-n,"</pre></body></html>")
#endif
 
show_motd(id,buffer ,"Throwing Knife Help:")
 return 
PLUGIN_CONTINUE
}
/************************************************************
* CORE PLUGIN FUNCTIONS
************************************************************/
public plugin_init()
{
 
register_plugin("Throwing Knives","1.0.2","-]ToC[-Bludy/JTP10181")
 
register_event("ResetHUD","new_spawn","b")
 
register_event("CurWeapon","check_knife","b","1=1")
 
register_event("DeathMsg""player_death""a")
 
register_logevent("round_start"2"1=Round_Start"
 
register_logevent("round_end"2"1=Round_End")
 
//register_clcmd("j_knife","command_knife",0,"- throws a knife if the plugin is enabled")
 
register_clcmd("throw_knife","command_knife",0,"- throws a knife if the plugin is enabled")
 
register_concmd("amx_tknives","admin_tknife",ADMIN_LEVEL_A,"- toggles throwing knives on/off")
 
register_clcmd("say /knifehelp","knife_help")
 
register_clcmd("say /throwingknives","knife_help")
 
register_clcmd("say","HandleSay")
 
register_cvar("amx_throwknives","1",FCVAR_SERVER)
 
register_cvar("amx_knifeammo","5")
 
register_cvar("amx_knifetossforce","1200")
 
register_cvar("amx_maxknifeammo","10")
 
register_cvar("amx_knifedmg","25")
 
register_cvar("amx_dropknives","1")
 
register_cvar("amx_knifeautoswitch","1")
 
register_cvar("amx_tknifelog","0")
 
check_cvars()
}
public 
plugin_precache()
{
 
 
fire precache_model("sprites/c4.spr")
 
precache_sound("weapons/knife_hitwall1.wav")
 
precache_sound("weapons/knife_hit4.wav")
 
precache_sound("weapons/knife_deploy1.wav")
 
precache_model("models/w_knifepack.mdl")
 
precache_model("models/w_throwingknife.mdl")
}
public 
check_cvars() {
 if (
get_cvar_num("amx_knifeammo") > get_cvar_num("amx_maxknifeammo")) {
  
server_print("[AMXX] amx_knifeammo can not be greater than amx_maxknifeammo, adjusting amx_maxknifeammo")
  
set_cvar_num("amx_maxknifeammo",get_cvar_num("amx_knifeammo"))
 }
 if (
get_cvar_num("amx_knifedmg") < ) {
  
server_print("[AMXX] amx_knifedmg can not be set lower than 1, setting cvar to 1 now.")
  
set_cvar_num("amx_knifedmg",0)
 }
 if (
get_cvar_num("amx_knifetossforce") < 200 ) {
  
server_print("[AMXX] amx_knifetossforce can not be set lower than 200, setting cvar to 200 now.")
  
set_cvar_num("amx_knifetossforce",200)
 }
}
public 
plugin_modules() {
 
require_module("fun")
 
require_module("engine")


Plz help im justa beginner!! =O

SonicSonedit 05-08-2011 10:46

Re: Knives explosives
 
If you are just a beginner, try to make something easier first, to understand the basis.

bobby3 05-08-2011 12:19

Re: Knives explosives
 
uhh LOl im doing a mod but wat ever


All times are GMT -4. The time now is 04:18.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.