Skocz do zawartości

Nowy szablon forum

mygo.pl

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

Czytaj więcej

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

serwerów CS

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

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

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

Czytaj więcej

RSSGravity Gun | port from Amx please


MYGO.pl
 Udostępnij

Rekomendowane odpowiedzi

  • RSSy
Does anybody want this for Amxx? Click the quote to get to the zip file. Post if interested.

Quote:

Originally Posted by No0n3 (Post 461548)
Can somone compile it for amxmodx. All files are attached.. (i'm not sure this is right forum :|)
PHP Code:

/********************************************************************************************************
                             AMX Gravity Gun Deathmatch

  Version: 0.3.1
  Author: KRoTaL

  0.1   Release
  0.1.1 Bug fixes
  0.2   Now works like the real HL2 gravity gun with the real sounds :)
  0.2.1 Added Gauss gun model
  0.2.2 Bug fixes
  0.3   Added 2 new settings: ggdm_allweapons + ggdm_damage, + the possibility to grab and throw players
  0.3.1 Fewer objects should stay in the air


  Objects will be randomly created on the map (you can configure the models to be used).
  Grab them and throw them at your ennemies to kill them, or throw them directly if you are close to them.
  You cannot use any other weapons.
  To grab an object/player, press the +attack2 button.
  To throw an object/player, press the +attack button.

  IMPORTANT: If your server crashes, try reducing the ggdm_objects setting (especially on small maps).


  Cvars:

  ggdm_active 0   - 0: disables the plugin
                    1: enables the plugin (objects will be created next round)

  ggdm_allweapons 0   - 0: players can only use the gravity gun
                        1: players can use all the weapons, and the knife is replaced with the gravity gun

  ggdm_damage 20    - amount of damage done to a player when you throw him

  ggdm_grabforce 10   - sets the amount of force used when grabbing objects

  ggdm_throwforce 1400  - sets the power of your throws

  ggdm_objects 30   - sets how many objects to create on the map (between 1 and 80)

  ggdm_maxdist 140    - sets how close to an object you need to be to throw it without grabbing it

  ggdm_maxdist_grab 1500  - sets how close to an object you need to be to grab it


  Setup:

  Put these files on your server:

  addons/amx/plugins/gravitygun_dm.amx
  addons/amx/lang/ggdm.txt
  addons/amx/config/ggdm_objects.cfg
  sound/ggdm/ggdm_throw.mp3
  sound/ggdm/ggdm_grab.mp3
  sound/ggdm/ggdm_grabbing.mp3
  sound/ggdm/ggdm_denythrow.mp3
  sound/ggdm/ggdm_denygrab.mp3

  You can configure the models to be used for the objects in the ggdm_objects.cfg file.
  Format:

  path_of_the_model name_of_the_model MinBox(X_axis) MinBox(Y_axis) MinBox(Z_axis) MaxBox(X_axis) MaxBox(Y_axis) MaxBox(Z_axis)

  Examples:

  models/chick.mdl chicken -20 -20 -1 20 20 20
  models/w_weaponbox.mdl weaponbox -12 -12 -1 12 12 40
  models/filecabinet.mdl filecabinet -16 -16 -1 16 16 60
  models/houndeye.mdl houndeye -20 -20 -1 20 20 25
  models/w_flashbang.mdl flashbang -10 -10 -1 10 10 10
  models/w_smokegrenade.mdl smokegrenade -10 -10 -1 10 10 10
  models/w_hegrenade.mdl grenade -10 -10 -1 10 10 10

  The name of the model will be used in the death messages:
  KRoT@L killed T(+)rget with washbasin
  KRoT@L killed T(+)rget with chicken

  If you want to type a space in the name of the model, use quotes:
  models/big_thing.mdl "big thing" -20 -20 -20 20 20 20

  Do not forget to put the models on your server to allow people to download them.

  You need to enable VexdUM.

  Credits:
  SpaceDude for his Jedi Grab Plugin
  Kaddar for his Rune Mod Plugin


********************************************************************************************************/


#include <translator>
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <engine>
#include <cstrike>


#define KEY_THROW IN_ATTACK
#define KEY_GRAB IN_ATTACK2

#define RESET_OWNER 2.2
#define GRAB_SPEED 30

#define MAX_NAME_LENGTH 32
#define MAX_SPAWNS 81
#define BEHINDBASESIZE 1500

#define find_entity
#define is_entity

new gMsgDeathMsg

new SPAWN[MAX_SPAWNS][3]
new 
SPAWNS
new SPAWNS_ENABLED
new OBJECTS_ENABLED

new g_ObjectsNum
new g_Model[MAX_SPAWNS][64], g_ModelName[MAX_SPAWNS][32]
new 
g_MinX[MAX_SPAWNS], g_MinY[MAX_SPAWNS], g_MinZ[MAX_SPAWNS]
new 
g_MaxX[MAX_SPAWNS], g_MaxY[MAX_SPAWNS], g_MaxZ[MAX_SPAWNS]

new 
grabbed[33]
new 
grablength[33]
new 
grabbing_player[33]
new 
velocity_multiplier

new bool:wait_denygrab[33]
new 
bool:wait_denythrow[33]
new 
bool:active=false

new GRAVGUN_VMODEL[64] = "models/v_gauss.mdl"
new GRAVGUN_PMODEL[64] = "models/p_gauss.mdl"

public plugin_init()
{
  
load_translations("ggdm")
  
register_plugin("Gravity Gun DeathMatch""0.3.1""KRoTaL")
  
register_cvar("ggdm_active","0")
  
register_cvar("ggdm_allweapons","0")
  
register_cvar("ggdm_damage","20")
  
register_cvar("ggdm_grabforce","10")
  
register_cvar("ggdm_throwforce","1400")
  
register_cvar("ggdm_objects","30")
  
register_cvar("ggdm_maxdist","140")
  
register_cvar("ggdm_maxdist_grab","1500")
  
register_clcmd("say","handle_say")
  
register_clcmd("say_team","handle_say")

  
register_event("CurWeapon","switchweapon","be","1=1")
  
register_event("ResetHUD","reset_hud","b")
  
register_event("DeathMsg","death_event","a")
  
register_logevent("roundstart"2"0=World triggered""1=Round_Start")
  
register_logevent("endround"2"0=World triggered""1=Round_End")
  
gMsgDeathMsg get_user_msgid("DeathMsg")
  
set_task(0.5"createSpawns"0""0)
}

public 
ggdm_help(id)
{
  
set_hudmessage(255255255, -1.00.6700.0112.00.010.012)
  
show_hudmessage(id_T("WELCOME TO GRAVITY GUN DEATHMATCH!^nPRESS +ATTACK2 BUTTON TO GRAB AN OBJECT.^nPRESS +ATTACK BUTTON TO THROW IT AT YOUR ENNEMIES AND KILL THEM.^nYou can throw an object without grabbing it if you are close to it.^nYou can also grab and throw players."))

  return 
PLUGIN_CONTINUE
}

public 
handle_say(id)
{
  if(
active)
  {
    new 
said[192]
    
read_args(said,192)
    
remove_quotes(said)

    if( (
containi(said"ggdm") != -1) || (containi(said"gravity") != -1) )
    {
      
ggdm_help(id)
    }
  }

  return 
PLUGIN_CONTINUE
}

public 
reset_hud(id)
{
  if(
active)
  {
    if(
task_exists(11111+id))
      
remove_task(11111+id)
    if(
task_exists(33333+id))
      
remove_task(33333+id)
    
client_cmd(id"mp3 stop")
    
set_user_godmode(id)
    
entity_set_edict(idEV_ENT_owner33)
  }

  if(
get_cvar_num("ggdm_active")==|| SPAWNS_ENABLED == || OBJECTS_ENABLED == 0)
    return 
PLUGIN_CONTINUE

  grabbed
[id]=0
  grabbing_player
[id]=0
  wait_denygrab
[id]=false
  wait_denythrow
[id]=false
  entity_set_edict
(idEV_ENT_owner33)
  if(
get_cvar_num("ggdm_allweapons") == 0)
    
set_user_godmode(id1)
  new 
ids[1]
  
ids[0]=id
  set_task
(0.1"detect_key"11111+idids1"b")

  return 
PLUGIN_CONTINUE
}

public 
death_event()
{
  if(
active)
  {
    new 
id read_data(2)
    if(
task_exists(11111+id))
      
remove_task(11111+id)
    if(
task_exists(33333+id))
      
remove_task(33333+id)
    if(
grabbed[id])
      
entity_set_edict(grabbed[id], EV_ENT_owner33)
    
grabbed[id]=0
    grabbing_player
[id]=0
    wait_denygrab
[id]=false
    wait_denythrow
[id]=false
    client_cmd
(id"mp3 stop")
  }

  return 
PLUGIN_CONTINUE
}

public 
client_kill(id)
{
  if(
active)
  {
    if(
task_exists(11111+id))
      
remove_task(11111+id)
    if(
task_exists(33333+id))
      
remove_task(33333+id)
    if(
grabbed[id])
      
entity_set_edict(grabbed[id], EV_ENT_owner33)
    
grabbed[id]=0
    grabbing_player
[id]=0
    wait_denygrab
[id]=false
    wait_denythrow
[id]=false
    client_cmd
(id"mp3 stop")
  }

  return 
PLUGIN_CONTINUE
}

public 
switchweapon(id)
{
  if(
get_cvar_num("ggdm_active") == || SPAWNS_ENABLED == || OBJECTS_ENABLED == 0)
    return 
PLUGIN_CONTINUE

  
if(get_cvar_num("ggdm_allweapons") == 0)
  {
    
client_cmd(id"weapon_knife")
    
entity_set_string(idEV_SZ_viewmodelGRAVGUN_VMODEL)
    
entity_set_string(idEV_SZ_weaponmodelGRAVGUN_PMODEL)
  }
  else
  {
    new 
plrClipplrAmmoplrWeapId get_user_weapon(idplrClipplrAmmo)
    if (
plrWeapId == CSW_KNIFE)
    {
      
entity_set_string(idEV_SZ_viewmodelGRAVGUN_VMODEL)
      
entity_set_string(idEV_SZ_weaponmodelGRAVGUN_PMODEL)
    }
    else
    {
      if(
grabbed[id])
      {
        
client_cmd(id"mp3 stop")
        
client_cmd(id"mp3 play ^"sound\ggdm\ggdm_throw.mp3^"")
        if(
task_exists(33333+id))
          
remove_task(33333+id)
        
wait_denythrow[id]=false
        
new Float:pVelocity[3]
        
VelocityByAim(id,get_cvar_num("ggdm_throwforce"),pVelocity)
        
entity_set_vector(grabbed[id],EV_VEC_velocity,pVelocity)
        new 
entity[1]
        
entity[0]=grabbed[id]
        
set_task(RESET_OWNER"reset_owner"22222+grabbed[id], entity1)
        
grabbed[id]=0
      
}

      return 
PLUGIN_CONTINUE
    
}
  }

  return 
PLUGIN_CONTINUE
}

public 
roundstart()
{
  if(
get_cvar_num("ggdm_active") == 0)
  {
    
remove_objects()
    
active=false
  
}
  else
  {
    if(
SPAWNS_ENABLED == && OBJECTS_ENABLED == 1)
    {
      
spawn_objects()
      
set_hudmessage(255255255, -1.00.6700.0115.00.010.012)
      
show_hudmessage(0_T("WELCOME TO GRAVITY GUN DEATHMATCH!^nPRESS +ATTACK2 BUTTON TO GRAB AN OBJECT.^nPRESS +ATTACK BUTTON TO THROW IT AT YOUR ENNEMIES AND KILL THEM.^nYou can throw an object without grabbing it if you are close to it.^nYou can also grab and throw players."))
      
show_hudmessage(0_T("WELCOME TO GRAVITY GUN DEATHMATCH!^nPRESS +ATTACK2 BUTTON TO GRAB AN OBJECT.^nPRESS +ATTACK BUTTON TO THROW IT AT YOUR ENNEMIES AND KILL THEM.^nYou can throw an object without grabbing it if you are close to it.^nYou can also grab and throw players."))
      
active=true
    
}
    else
    {
      if(
SPAWNS_ENABLED == 0)
        
console_print(0_T("[Gravity Gun DeathMatch] OBJECTS WILL NOT SPAWN."))
      if(
OBJECTS_ENABLED == 0)
        
console_print(0_T("[Gravity Gun DeathMatch] YOU NEED TO CONFIGURE THE OBJECTS TO BE SPAWNED."))
      
active=false
    
}
  }

  return 
PLUGIN_CONTINUE
}

public 
endround()
{
  if(
active)
  {
    
set_task(4.0"remove_objects"99999""0)
  }

  return 
PLUGIN_CONTINUE
}

spawn_objects()
{
  for(new 
0;SPAWNSi++ )
  {
    new 
randomizer random(SPAWNS)
    if(
randomizer != i)
    {
      new 
temp[3]
      
temp[0] = SPAWN[i][0]
      
temp[1] = SPAWN[i][1]
      
temp[2] = SPAWN[i][2]
      
SPAWN[i][0] = SPAWN[randomizer][0]
      
SPAWN[i][1] = SPAWN[randomizer][1]
      
SPAWN[i][2] = SPAWN[randomizer][2]
      
SPAWN[randomizer][0] = temp[0]
      
SPAWN[randomizer][1] = temp[1]
      
SPAWN[randomizer][2] = temp[2]
    }
  }

  
remove_objects()

  new 
objects=get_cvar_num("ggdm_objects")
  if(
objects<1)
    
objects=1
  
if(objects>80)
    
objects=80

  
for(new 0objectsi++)
  {
    new 
NewObject create_entity("info_target")
    if(
NewObject <= 0) {
      
console_print(0_T("[Gravity Gun DeathMatch] OBJECT GENERATION FAILED."))
      return 
PLUGIN_HANDLED_MAIN
    
}

    new 
Float:temporg[3]
    
temporg[0] = float(SPAWN[i][0])
    
temporg[1] = float(SPAWN[i][1])
    
temporg[2] = float(SPAWN[i][2] + 32)

    new 
randObject random_num(0g_ObjectsNum)

    
entity_set_string(NewObjectEV_SZ_classname"entObject")
    
entity_set_model(NewObjectg_Model[randObject])
    
entity_set_origin(NewObjecttemporg)
    
entity_set_edict(NewObjectEV_ENT_owner33)
    
entity_set_int(NewObjectEV_INT_iuser4randObject)
    
entity_set_int(NewObjectEV_INT_solid2)
    
entity_set_int(NewObjectEV_INT_movetype10)
    
entity_set_float(NewObjectEV_FL_gravity1.0)
    
entity_set_float(NewObjectEV_FL_friction0.66)

    new 
Float:MinBox[3], Float:MaxBox[3]
    
MinBox[0]=float(g_MinX[randObject])
    
MinBox[1]=float(g_MinY[randObject])
    
MinBox[2]=float(g_MinZ[randObject])
    
MaxBox[0]=float(g_MaxX[randObject])
    
MaxBox[1]=float(g_MaxY[randObject])
    
MaxBox[2]=float(g_MaxZ[randObject])

    
entity_set_size(NewObjectMinBoxMaxBox)

    new 
Float:velocity[3]
    
velocity[0] = float(random(256)-128)
    
velocity[1] = float(random(256)-128)
    
velocity[2] = float(random(300)+75)
    
entity_set_vector(NewObjectEV_VEC_velocity,velocity)
  }

  return 
PLUGIN_CONTINUE
}

public 
remove_objects()
{
  new 
nextitem  find_entity(-1,"entObject")
  while(
nextitem 0)
  {
    
remove_entity(nextitem)
    
nextitem find_entity(-1,"entObject")
  }

  return 
PLUGIN_CONTINUE
}

public 
entity_touch(entity1entity2)
{
  if(!
active)
    return 
PLUGIN_CONTINUE

  
if(entity1 && is_entity(entity1) && entity2 && is_entity(entity2))
  {
    new 
itemClassName[MAX_NAME_LENGTH]
    new 
playerClassname[MAX_NAME_LENGTH]
    
entity_get_string(entity1EV_SZ_classnameitemClassNameMAX_NAME_LENGTH-1)
    
entity_get_string(entity2EV_SZ_classnameplayerClassnameMAX_NAME_LENGTH-1)
    if(
equal(itemClassName,"entObject") && equal(playerClassname,"player"))
    {
      new 
killer=entity_get_edict(entity1EV_ENT_owner)-33
      
if(!killer || killer==entity2 || grabbed[killer])
        return 
PLUGIN_CONTINUE

      
if(get_cvar_num("mp_friendlyfire") == && get_user_team(killer) == get_user_team(entity2))
        return 
PLUGIN_CONTINUE

      set_user_godmode
(entity2)
      
emit_sound(entity2CHAN_BODY"player/headshot1.wav"1.0ATTN_NORM0PITCH_NORM)
      
set_msg_block(gMsgDeathMsgBLOCK_SET)
      
set_user_health(entity20)
      
set_msg_block(gMsgDeathMsgBLOCK_NOT)
      
log_kill(killerentity2g_ModelName[entity_get_int(entity1EV_INT_iuser4)])

      if(
get_user_team(killer) != get_user_team(entity2))
      {
        
set_user_frags(entity2get_user_frags(entity2) + 1)
        
set_user_frags(killerget_user_frags(killer) + 1)
        new 
money get_user_money(killer)
        if(
money 16000)
          
set_user_money(killermoney 300)
      }
      else
      {
        
set_user_frags(entity2get_user_frags(entity2) + 1)
        
set_user_frags(killerget_user_frags(killer) - 2)
        new 
money get_user_money(killer)
        if (
money != 0)
          
set_user_money(killermoney 150)
      }

      
message_begin(MSG_BROADCASTget_user_msgid("DeathMsg"), {0,0,0}, 0)
      
write_byte(killer)
      
write_byte(entity2)
      
write_byte(0)
      
write_string(g_ModelName[entity_get_int(entity1EV_INT_iuser4)])
      
message_end()

      
entity_set_edict(entity1EV_ENT_owner33)
      
entity_set_vector(entity1EV_VEC_velocityFloat:{0,0,0})
    }
  }

  return 
PLUGIN_CONTINUE
}

public 
log_kill(killervictimweapon[])
{
  new 
kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10]

  
get_user_name(killerkname31)
  
get_user_team(killerkteam9)
  
get_user_authid(killerkauthid31)

  
get_user_name(victimvname31)
  
get_user_team(victimvteam9)
  
get_user_authid(victimvauthid31)

  
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
  
knameget_user_userid(killer), kauthidkteam,
  
vnameget_user_userid(victim), vauthidvteamweapon)
}

public 
extra_damage(killervictim)
{
  if(
get_cvar_num("mp_friendlyfire") == && get_user_team(killer) == get_user_team(victim))
    return 
PLUGIN_CONTINUE

  
new health get_user_health(victim) - get_cvar_num("ggdm_damage")

  if(
health 0)
  {
    
set_user_godmode(victim)
    
set_user_health(victimhealth)
    if(
get_cvar_num("ggdm_allweapons") == 0)
      
set_user_godmode(victim1)
  }
  else
  {
    
set_user_godmode(victim)
    
emit_sound(victimCHAN_BODY"player/headshot1.wav"1.0ATTN_NORM0PITCH_NORM)
    
set_msg_block(gMsgDeathMsgBLOCK_SET)
    
set_user_health(victim0)
    
set_msg_block(gMsgDeathMsgBLOCK_NOT)
    
log_kill(killervictim"throw")

    if(
get_user_team(killer) != get_user_team(victim))
    {
      
set_user_frags(victimget_user_frags(victim) + 1)
      
set_user_frags(killerget_user_frags(killer) + 1)
      new 
money get_user_money(killer)
      if(
money 16000)
        
set_user_money(killermoney 300)
    }
    else
    {
      
set_user_frags(victimget_user_frags(victim) + 1)
      
set_user_frags(killerget_user_frags(killer) - 2)
      new 
money get_user_money(killer)
      if (
money != 0)
        
set_user_money(killermoney 150)
    }

    
message_begin(MSG_BROADCASTget_user_msgid("DeathMsg"), {0,0,0}, 0)
    
write_byte(killer)
    
write_byte(victim)
    
write_byte(0)
    
write_string("throw")
    
message_end()
  }

  return 
PLUGIN_CONTINUE
}

public 
detect_key(player[])
{
  new 
id=player[0]

  new 
plrClipplrAmmoplrWeapId get_user_weapon(idplrClipplrAmmo)
  if (
plrWeapId != CSW_KNIFE)
    return 
PLUGIN_CONTINUE

  
new button entity_get_int(idEV_INT_button)
  if(
grabbed[id])
  {
    if(
button KEY_THROW)
    {
      
client_cmd(id"mp3 stop")
      
client_cmd(id"mp3 play ^"sound\ggdm\ggdm_throw.mp3^"")
      if(
task_exists(33333+id))
        
remove_task(33333+id)
      
wait_denythrow[id]=true
      
new ids[1]
      
ids[0]=id
      set_task
(1.5"reset_denythrow"55555+idids1)
      new 
Float:pVelocity[3]
      
VelocityByAim(id,get_cvar_num("ggdm_throwforce"),pVelocity)
      
entity_set_vector(grabbed[id],EV_VEC_velocity,pVelocity)
      new 
entity[1]
      
entity[0]=grabbed[id]
      
set_task(RESET_OWNER"reset_owner"22222+grabbed[id], entity1)
      if(
grabbed[id] > && grabbed[id] < 33)
        
extra_damage(idgrabbed[id])
      
grabbed[id]=0

      
return PLUGIN_CONTINUE
    
}
    new 
origin[3], look[3], direction[3], moveto[3], Float:grabbedorigin[3], Float:velocity[3], length
    get_user_origin
(idorigin1)
    
get_user_origin(idlook3)
    
entity_get_vector(grabbed[id], EV_VEC_origingrabbedorigin)

    
direction[0]=look[0]-origin[0]
    
direction[1]=look[1]-origin[1]
    
direction[2]=look[2]-origin[2]
    
length get_distance(look,origin)
    if (!
lengthlength=// avoid division by 0

    
moveto[0]=origin[0]+direction[0]*grablength[id]/length
    moveto
[1]=origin[1]+direction[1]*grablength[id]/length
    moveto
[2]=origin[2]+direction[2]*grablength[id]/length

    velocity
[0]=(moveto[0]-grabbedorigin[0])*velocity_multiplier
    velocity
[1]=(moveto[1]-grabbedorigin[1])*velocity_multiplier
    velocity
[2]=(moveto[2]-grabbedorigin[2])*velocity_multiplier

    entity_set_vector
(grabbed[id], EV_VEC_velocityvelocity)
  }
  else
  {
    if(
button KEY_GRAB)
    {
      new 
targetidbody
      get_user_aiming
(idtargetidbody)
      if (
targetid)
      {
        new 
itemClassName[MAX_NAME_LENGTH]
        
entity_get_string(targetidEV_SZ_classnameitemClassNameMAX_NAME_LENGTH-1)
        if(
equal(itemClassName,"entObject") || equal(itemClassName,"player"))
        {
          new 
owner=entity_get_edict(targetidEV_ENT_owner)-33
          
if(owner>&& grabbed[owner]==targetid)
            return 
PLUGIN_CONTINUE
          
if(equal(itemClassName,"player"))
          {
            if(
grabbing_player[targetid]==id || grabbed[targetid]==id)
              return 
PLUGIN_CONTINUE
          
}
          new 
origin1[3], origin2[3], Float:forigin2[3]
          
get_user_origin(idorigin1)
          
entity_get_vector(targetidEV_VEC_originforigin2)
          
FVecIVec(forigin2origin2)
          new 
length get_distance(origin1,origin2)
          if(
length get_cvar_num("ggdm_maxdist_grab"))
          {
            if(
length get_cvar_num("ggdm_maxdist"))
            {
              
set_grabbed(idtargetid)
            }
            else
            {
              new 
origin[3], look[3], direction[3], moveto[3], Float:grabbedorigin[3], Float:velocity[3]
              
get_user_origin(idorigin1)
              
get_user_origin(idlook3)
              
entity_get_vector(targetidEV_VEC_origingrabbedorigin)

              
direction[0]=look[0]-origin[0]
              
direction[1]=look[1]-origin[1]
              
length get_distance(look,origin)
              if (!
lengthlength=// avoid division by 0

              
grablength[id] = length GRAB_SPEED
              velocity_multiplier 
get_cvar_num("ggdm_grabforce")

              
moveto[0]=origin[0]+direction[0]*grablength[id]/length
              moveto
[1]=origin[1]+direction[1]*grablength[id]/length

              velocity
[0]=(moveto[0]-grabbedorigin[0])*velocity_multiplier
              velocity
[1]=(moveto[1]-grabbedorigin[1])*velocity_multiplier
              velocity
[2]=4.0

              entity_set_vector
(targetidEV_VEC_velocityvelocity)
            }
          }
        }
      }
      else if(!
wait_denygrab[id])
      {
        
//client_cmd(id, "mp3 stop")
        
client_cmd(id"mp3 play ^"sound\ggdm\ggdm_denygrab.mp3^"")
        
wait_denygrab[id]=true
        
new ids[1]
        
ids[0]=id
        set_task
(1.4"reset_denygrab"44444+idids1)
      }
      return 
PLUGIN_CONTINUE
    
}
    else
    {
      
grabbing_player[id]=0
    
}
    if(
button KEY_THROW)
    {
      new 
targetidbody
      get_user_aiming
(idtargetidbody)
      if (
targetid)
      {
        new 
itemClassName[MAX_NAME_LENGTH]
        
entity_get_string(targetidEV_SZ_classnameitemClassNameMAX_NAME_LENGTH-1)
        if(
equal(itemClassName,"entObject") || equal(itemClassName,"player"))
        {
          new 
owner=entity_get_edict(targetidEV_ENT_owner)-33
          
if(owner>&& grabbed[owner]==targetid)
            return 
PLUGIN_CONTINUE
          
if(equal(itemClassName,"player"))
          {
            if(
grabbing_player[targetid]==id || grabbed[targetid]==id)
              return 
PLUGIN_CONTINUE
          
}
          new 
origin1[3], origin2[3], Float:forigin2[3]
          
get_user_origin(idorigin1)
          
entity_get_vector(targetidEV_VEC_originforigin2)
          
FVecIVec(forigin2origin2)
          new 
length get_distance(origin1,origin2)
          if(
length get_cvar_num("ggdm_maxdist"))
          {
            
client_cmd(id"mp3 stop")
            
client_cmd(id"mp3 play ^"sound\ggdm\ggdm_throw.mp3^"")
            
wait_denythrow[id]=true
            
new ids[1]
            
ids[0]=id
            set_task
(1.4"reset_denythrow"55555+idids1)
            new 
Float:pVelocity[3]
            
VelocityByAim(id,get_cvar_num("ggdm_throwforce"),pVelocity)
            
entity_set_vector(targetid,EV_VEC_velocity,pVelocity)
            
entity_set_edict(targetidEV_ENT_ownerid+33)
            new 
entity[1]
            
entity[0]=targetid
            
if(task_exists(22222+targetid))
              
remove_task(22222+targetid)
            
set_task(RESET_OWNER"reset_owner"22222+targetidentity1)
            if(
targetid && targetid 33)
              
extra_damage(idtargetid)
          }
        }
      }
      else if(!
wait_denythrow[id])
      {
        
//client_cmd(id, "mp3 stop")
        
client_cmd(id"mp3 play ^"sound\ggdm\ggdm_denythrow.mp3^"")
        
wait_denythrow[id]=true
        
new ids[1]
        
ids[0]=id
        set_task
(1.0"reset_denythrow"55555+idids1)
      }
      return 
PLUGIN_CONTINUE
    
}
  }

  return 
PLUGIN_CONTINUE
}

public 
set_grabbed(idtargetid)
{
  
//client_cmd(id, "mp3 stop")
  
client_cmd(id"mp3 play ^"sound\ggdm\ggdm_grab.mp3^"")
  if(
task_exists(22222+targetid))
    
remove_task(22222+targetid)
  
grabbed[id]=targetid
  grablength
[id]=80
  entity_set_edict
(targetidEV_ENT_ownerid+33)
  new 
ids[1]
  
ids[0]=id
  set_task
(2.0"loop_grabbing_sound"33333+idids1)
}

public 
loop_grabbing_sound(ids[])
{
  
client_cmd(ids[0], "mp3 loop ^"sound\ggdm\ggdm_grabbing.mp3^"")
}

public 
reset_denythrow(ids[])
{
  
wait_denythrow[ids[0]]=false
}

public 
reset_denygrab(ids[])
{
  
wait_denygrab[ids[0]]=false
}

public 
reset_owner(entity[])
{
  
entity_set_edict(entity[0], EV_ENT_owner33)
}

public 
createSpawns() //taken from Bail's Root Plugin
{
  
SPAWNS 0
  
new ctbase_id
  
new tbase_id
  
new Float:base_origin_temp[3]
  new 
Float:ctbase_origin[3] = {0.0,...}
  new 
Float:tbase_origin[3] = {0.0,...}
  new 
Float:pspawncounter

  pspawncounter 
0.0
  ctbase_id 
find_entity(-1,"info_player_start")
  while (
ctbase_id 0)
  {
    
pspawncounter +=1.0
    entity_get_vector 
(ctbase_id,EV_VEC_origin,base_origin_temp)
    
ctbase_origin[0] += base_origin_temp[0]
    
ctbase_origin[1] += base_origin_temp[1]
    
ctbase_origin[2] += base_origin_temp[2]
    
ctbase_id find_entity(ctbase_id,"info_player_start")
  }

  
ctbase_origin[0] = ctbase_origin[0] / pspawncounter
  ctbase_origin
[1] = ctbase_origin[1] / pspawncounter
  ctbase_origin
[2] = ctbase_origin[2] / pspawncounter

  pspawncounter 
0.0
  tbase_id 
find_entity(-1,"info_player_deathmatch")
  while (
tbase_id 0)
  {
    
pspawncounter +=1.0
    entity_get_vector 
(tbase_id,EV_VEC_origin,base_origin_temp)
    
tbase_origin[0] += base_origin_temp[0]
    
tbase_origin[1] += base_origin_temp[1]
    
tbase_origin[2] += base_origin_temp[2]
    
tbase_id find_entity(tbase_id,"info_player_deathmatch")
  }

  
tbase_origin[0] = tbase_origin[0] / pspawncounter
  tbase_origin
[1] = tbase_origin[1] / pspawncounter
  tbase_origin
[2] = tbase_origin[2] / pspawncounter


  
new Float:ia[3]
  new 
Float:square_o1[3]
  new 
Float:square_o2[3]
  if(
tbase_origin[0]>ctbase_origin[0])
  {
    
square_o1[0] = tbase_origin[0]+BEHINDBASESIZE
    square_o2
[0] = ctbase_origin[0]-BEHINDBASESIZE
  
}
  else
  {
    
square_o1[0] = ctbase_origin[0]+BEHINDBASESIZE
    square_o2
[0] = tbase_origin[0]-BEHINDBASESIZE
  
}
  if(
tbase_origin[1]>ctbase_origin[1])
  {
    
square_o1[1] = tbase_origin[1]+BEHINDBASESIZE
    square_o2
[1] = ctbase_origin[1]-BEHINDBASESIZE
  
}
  else
  {
    
square_o1[1] = ctbase_origin[1]+BEHINDBASESIZE
    square_o2
[1] = tbase_origin[1]-BEHINDBASESIZE
  
}
  if(
tbase_origin[2]>ctbase_origin[2])
  {
    
square_o1[2] = tbase_origin[2]+1000
    square_o2
[2] = ctbase_origin[2]-1000
  
}
  else
  {
    
square_o1[2] = ctbase_origin[2]+1000
    square_o2
[2] = tbase_origin[2]-1000
  
}


  new 
bool:xyused[11][11]
  new 
Float:xadd = (square_o1[0]-square_o2[0]) / 9.0
  
new Float:yadd = (square_o1[1]-square_o2[1]) / 9.0
  
new Float:zadd = (square_o1[2]-square_o2[2]) / 9.0

  
new bool:baseswitcher true
  
new countery 0
  
for(ia[1]=square_o2[1];ia[1] <=square_o1[1] && SPAWNS<MAX_SPAWNS;ia[1]+=yadd)
  {
    new 
counterx 0
    countery
++
    for(
ia[0]=square_o2[0];ia[0] <=square_o1[0] && SPAWNS<MAX_SPAWNS;ia[0]+=xadd)
    {
      
counterx++
      if(
baseswitcher)
      {
        
ia[2] = ctbase_origin[2]+16.0
        baseswitcher 
false
      
}
      else
      {
        
ia[2] = tbase_origin[2]+16.0
        baseswitcher 
true
      
}
      
ia[0] = float(floatround(ia[0]) + random(130)-65)
      
ia[1] = float(floatround(ia[1]) + random(130)-65)
      
ia[2] = float(floatround(ia[2]))
      if( 
PointContents(ia) == CONTENTS_EMPTY && !xyused[counterx][countery])
      {
        
xyused[counterx][countery] = true
        SPAWNS
++
        
SPAWN[SPAWNS][0] = floatround(ia[0])
        
SPAWN[SPAWNS][1] = floatround(ia[1])
        
SPAWN[SPAWNS][2] = floatround(ia[2])
      }
    }
  }


  for(
ia[2]=(ctbase_origin[2] + tbase_origin[2] ) /2.0;ia[2] <=square_o1[2] && SPAWNS<MAX_SPAWNS;ia[2]+=zadd)
  {

    
countery 0
    
for(ia[1]=square_o2[1];ia[1] <=square_o1[1] && SPAWNS<MAX_SPAWNS;ia[1]+=yadd)
    {
      new 
counterx 0
      countery
++
      for(
ia[0]=square_o2[0];ia[0] <=square_o1[0] && SPAWNS<MAX_SPAWNS;ia[0]+=xadd)
      {
        
counterx++
        
ia[0] = float(floatround(ia[0]) + random(130)-65)
        
ia[1] = float(floatround(ia[1]) + random(130)-65)
        
ia[2] = float(floatround(ia[2]))

        if( 
PointContents(ia) == CONTENTS_EMPTY && !xyused[counterx][countery])
        {
          
xyused[counterx][countery] = true
          SPAWNS
++
          
SPAWN[SPAWNS][0] = floatround(ia[0])
          
SPAWN[SPAWNS][1] = floatround(ia[1])
          
SPAWN[SPAWNS][2] = floatround(ia[2])
        }

      }
    }
  }

  for(
ia[2]=(ctbase_origin[2] + tbase_origin[2] ) /2.0;ia[2] >=square_o2[1] && SPAWNS<MAX_SPAWNS;ia[2]-=zadd)
  {

    
countery 0
    
for(ia[1]=square_o2[1];ia[1] <=square_o1[1] && SPAWNS<MAX_SPAWNS;ia[1]+=yadd)
    {
      new 
counterx 0
      countery
++
      for(
ia[0]=square_o2[0];ia[0] <=square_o1[0] && SPAWNS<MAX_SPAWNS;ia[0]+=xadd)
      {
        
counterx++
        
ia[0] = float(floatround(ia[0]) + random(130)-65)
        
ia[1] = float(floatround(ia[1]) + random(130)-65)
        
ia[2] = float(floatround(ia[2]))

        if( 
PointContents(ia) == CONTENTS_EMPTY && !xyused[counterx][countery])
        {
          
xyused[counterx][countery] = true
          SPAWNS
++
          
SPAWN[SPAWNS][0] = floatround(ia[0])
          
SPAWN[SPAWNS][1] = floatround(ia[1])
          
SPAWN[SPAWNS][2] = floatround(ia[2])
        }

      }
    }
  }

  if(
SPAWNS 0)
    
SPAWNS_ENABLED 1
  
else
    
SPAWNS_ENABLED 0

  
return PLUGIN_CONTINUE
}

public 
plugin_precache()
{
  
g_ObjectsNum 0
  
new ggdm_config[64]
  
get_basedir(ggdm_config63)
  
format(ggdm_config63"%s/config/ggdm_objects.cfg"ggdm_config)

  if(
file_exists(ggdm_config))
  {
    new 
text[256], Xmin[12], Ymin[12], Zmin[12], Xmax[12], Ymax[12], Zmax[12]
    new 
lenpos=0

    
while(g_ObjectsNum MAX_SPAWNS && read_file(ggdm_config,pos++,text,255,len))
    {
      if(
text[0] == ';') continue
      if(
parse(textg_Model[g_ObjectsNum], 63g_ModelName[g_ObjectsNum], 31,
      
Xmin11Ymin11Zmin11Xmax11Ymax11Zmax11) < ) continue
      
g_MinX[g_ObjectsNum]=strtonum(Xmin)
      
g_MinY[g_ObjectsNum]=strtonum(Ymin)
      
g_MinZ[g_ObjectsNum]=strtonum(Zmin)
      
g_MaxX[g_ObjectsNum]=strtonum(Xmax)
      
g_MaxY[g_ObjectsNum]=strtonum(Ymax)
      
g_MaxZ[g_ObjectsNum]=strtonum(Zmax)
      
format(g_Model[g_ObjectsNum], 63"%s"g_Model[g_ObjectsNum])
      
precache_model(g_Model[g_ObjectsNum])
      ++
g_ObjectsNum
    
}
  }

  if(
g_ObjectsNum 0)
    
OBJECTS_ENABLED 1
  
else
    
OBJECTS_ENABLED 0

  precache_model
(GRAVGUN_VMODEL)
  
precache_model(GRAVGUN_PMODEL)
  
precache_sound("player/headshot1.wav")

  
precache_sound("ggdm/ggdm_throw.mp3")
  
precache_sound("ggdm/ggdm_grab.mp3")
  
precache_sound("ggdm/ggdm_grabbing.mp3")
  
precache_sound("ggdm/ggdm_denythrow.mp3")
  
precache_sound("ggdm/ggdm_denygrab.mp3")



Przeczytaj cały wpis

Odnośnik do komentarza
Udostępnij na innych stronach

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

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...