Page 1 of 2 12 LastLast
Results 1 to 10 of 13

Thread: Player nade control (Spearhead)

  1. #1
    Senior Member nene81's Avatar
    Join Date
    Nov 2014
    Location
    Seville, SPAIN
    Posts
    193

    Default Player nade control (Spearhead)

    Hi mates,

    I have a little mod which spawns nades along the map.

    BUT some player belong to "nade collectors"...

    I want to control this behaviour, through a NadeControl.scr


    Code:
    NadeControl:
    
    	level waitTill spawn
    
    	wait 10
    
    	while(1)
    
    	{
    		for ( local.i = 1 ; local.i <= $player.size ; local.i++ )
    		{
    			local.player = $player[local.i]
    
    			if ( local.player != NULL && local.player != NIL && isAlive(local.player) )
    			{
    				local.player.numberNades =  COMMAND???	// I have to find out how many nades player has in his inventory... weaponcommand ??
    								                               // Although player has selected nades or not...
    
    				if ( local.player.numberNades >= 2 ) 		// I TAKE ALL HIS NADES AND I GIVE HIM ONLY 1
    				{
    					if ( local.player.dmteam == "allies" )
    					{
    						local.player take models/weapons/m2frag_grenade.tik		// Will it work? Maybe not
    						local.player take models/weapons/Russian_F1_grenade.tik		// russian model
    						local.player take models/weapons/mills_grenade.tik		// english model	
    						waitframe
    						local.player give models/weapons/m2frag_grenade.tik
    
    						I have to give 1 unit of nade, COMMAND???		// dmrealism additionalstartammo "grenade" 1 ??
    					}
    
    					else if ( local.player.dmteam == "axis" )
    					{
    						local.player take models/weapons/steilhandgranate.tik	// Will it work? Maybe not
    						waitframe
    						local.player give models/weapons/steilhandgranate.tik
    
    						I have to give 1 unit of nade, COMMAND???		// dmrealism additionalstartammo "grenade" 1 ??
    					}			
    				}
    			}
    		}
    		wait 5
    	}
    
    end
    Some idea?

    Thanks in advance!

  2. #2

    Default

    this what I use just add the coord here local.trig.origin = ( ) // position it It will just take all the nades and give them 1 so even if they sit there all day they'll only get 1 nade.

    Code:
    main:
    
    thread give_nades
    
    end
    
    give_nades:
    
    local.trig = spawn trigger_multiple 
    local.trig.origin = (  )   // position it
    local.trig setsize ( -10 -10 -10 ) ( 10 10 10 ) // give it some size
    local.trig setthread nade
    local.trig wait 15 // How often the trig acts
    local.trig delay .2 // How long before trig acts
     
    local.nade = spawn script_model
    local.nade model "items/item_grenade_ammobox.tik" 
    local.nade.origin = ( )
    local.nade.scale = 1.0
    // local.nade light 0 1 0 50
    
    local.trig2 = spawn trigger_multiple 
    local.trig2.origin = (  )   // position it
    local.trig2 setsize ( -10 -10 -10 ) ( 10 10 10 ) // give it some size
    local.trig2 setthread nade
    local.trig2 wait 15 // How often the trig acts
    local.trig2 delay .2 // How long before trig acts
     
    local.nade2 = spawn script_model
    local.nade2 model "items/item_grenade_ammobox.tik" 
    local.nade2.origin = (  )
    local.nade2.scale = 1.0
    // local.nade2 light 0 1 0 50
    
    nade:
    local.player=parm.other
    if(local.player.dmteam == "allies") 
    {
    local.player take "models/weapons/m2frag_grenade.tik"
    local.player take "models/weapons/Russian_F1_grenade.tik"
    local.player take "models/weapons/mills_grenade.tik"
    local.player take "models/weapons/steilhandgranate.tik"
    
    }
     
    if(local.player.dmteam == "axis") 
    
    {
    local.player take "models/weapons/m2frag_grenade.tik"
    local.player take "models/weapons/Russian_F1_grenade.tik"
    local.player take "models/weapons/mills_grenade.tik"
    local.player take "models/weapons/steilhandgranate.tik"
    }
    wait 1
    local.player=parm.other
    if(local.player.dmteam == "allies")
     {
    local.player give "models/weapons/steilhandgranate.tik"
    }
    if(local.player.dmteam == "axis") 
    {
    
    local.player give "models/weapons/steilhandgranate.tik"
    }
    
    if(local.player.dmteam == "spectator") 
    {
    
    end
    }
    end
    Last edited by easymeat; November 18th, 2015 at 06:00 AM.

  3. #3

  4. #4
    Senior Member nene81's Avatar
    Join Date
    Nov 2014
    Location
    Seville, SPAIN
    Posts
    193

    Default

    Thanks Easymeat,

    That never worked, so I need nade control...

    Code:
    give_nades: //BAZAAR EXAMPLE
    
    		local.AmmoBoxGrenade = spawn items/item_grenade_ammobox.tik //THIS WILL GIVE 6 NADES (AMMOBOX)...
    
    		local.AmmoBoxGrenade.origin = ( -474 1422 -52 )
    		local.AmmoBoxGrenade.angles = ( 0 0 0 )
    		local.AmmoBoxGrenade.scale = 1
    // ok, ammo spawns
    
    		local.trig = spawn trigger_multiple
    		local.trig.origin = local.AmmoBoxGrenade.origin
    		local.trig setsize ( -10 -10 -10 ) ( 10 10 10 )
    		local.trig solid //for testing
    		local.trig setthread nade
    		local.trig wait 1	// How often the trig acts
    		local.trig delay 0.1		// How long before trig acts
    // ok, trigger spawns
    
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    
    nade:
    	local.player = parm.other
    
    	if ( local.player.dmteam == "allies" ) 
    	{
    		local.player take "models/weapons/m2frag_grenade.tik"
    		local.player take "models/weapons/Russian_F1_grenade.tik"
    		local.player take "models/weapons/mills_grenade.tik"
    		local.player take "models/weapons/steilhandgranate.tik"
    	}
    
    	if ( local.player.dmteam == "axis" ) 
    	{
    		local.player take "models/weapons/m2frag_grenade.tik"
    		local.player take "models/weapons/Russian_F1_grenade.tik"
    		local.player take "models/weapons/mills_grenade.tik"
    		local.player take "models/weapons/steilhandgranate.tik"
    	}
    
    	wait 0.5
    
    	local.player = parm.other
    
    	if ( local.player.dmteam == "allies" )
    	{
    		local.player give "models/weapons/m2frag_grenade.tik"
    	}
    
    	if ( local.player.dmteam == "axis" ) 
    	{
    		local.player give "models/weapons/steilhandgranate.tik"  //THIS GIVES 6 NADES (AMMOBOX) TO PLAYER, AND VERY STRANGE THINGS... DON'T WORK CORERCTLY IN SPEARHEAD
    	}
    
    	if ( local.player.dmteam == "spectator" ) 
    	{
    		end
    	}
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    If you try this .scr, you will see the result...

  5. #5
    Purple Developer Purple Elephant1au's Avatar
    Join Date
    Feb 2012
    Location
    Australia
    Posts
    1,269

    Default

    With the above example, the reason it gives the player 6 is because that is what you have the dmstartammo for the grenade set to.
    Since there is no way to get the amount of ammo or grenades a player has (AFAIK anyway ) you are best to take and give them so to avoid them picking up heaps.

    It also could be coded better because those if statements hold the same data inside...
    Code:
    nade:
        local.player = parm.other
    
        if ( local.player.dmteam != "spectator" ) 
        {
            local.player take "models/weapons/m2frag_grenade.tik"
            local.player take "models/weapons/Russian_F1_grenade.tik"
            local.player take "models/weapons/mills_grenade.tik"
            local.player take "models/weapons/steilhandgranate.tik"
            
            wait 0.5
            
            if ( local.player.dmteam == "allies" )
            local.player give "models/weapons/m2frag_grenade.tik"
    
            if ( local.player.dmteam == "axis" ) 
            local.player give "models/weapons/steilhandgranate.tik" 
    
        }
    
    end

    Purple's Playground
    OBJ :
    103.29.85.127:12203
    xfire: purpleelephant1au
    email: purpleelephant1au@gmail.com
    skydrive: PurpleElephantSkydrive




  6. #6

    Default

    You have to set the nade amount in the" models/items/item_grenade_ammobox.tik " folder to how many you want to give. And you have to change all the ammo amounts for the weapons. And you can't swap weapons for any weapon where players have any stock AA skins on. If you do you get the nade amount for both weapons

    local.player take "models/weapons/m1_garand.tik"

    wait whatever

    local.player give "models/weapons/enfield.tik"

    you would get nade for both weapons.

    this is the item_grenade_ammobox.tik

    Code:
    TIKI
    setup
    {
    	scale 0.52
    	path models/items/ammo_boxes
    	skelmodel grenade_box.skd
    	surface all shader grenade_box
    }
    
    init
    {
    	server
    	{
    		classname AmmoEntity
    		name grenade
    		amount 1
    		dmamount 1
    	}
    }
    
    animations
    {
    	idle grenade_box.skc
    }
    
    /*QUAKED item_ammobox_grenade (0 0 0) (0 0 0) (0 0 0)
    Mark II Frag
    Stielhandgranate
    */
    m1 will give you

    Code:
    	// Additional DM Loadout
    		dm additionalstartammo "grenade" 4
    		dm additionalstartammo "smokegrenade" 2
    		dm startitem "items/binoculars.tik"
    
    		// Additional DM Realism Loadout
    		dmrealism additionalstartammo "grenade" 4
    		dmrealism additionalstartammo "smokegrenade" 2
    		dmrealism startitem "items/binoculars.tik"
    enfield give you

    Code:
    		// Additional DM Loadout
    		dm additionalstartammo "grenade" 4
    		dm additionalstartammo "smokegrenade" 2
    		dm startitem "items/binoculars.tik"
    
    		// Additional DM Realism Loadout
    		dmrealism additionalstartammo "grenade" 4
    		dmrealism additionalstartammo "smokegrenade" 2
    		dmrealism startitem "items/binoculars.tik"
    so that would be 6 nade if you swap weapons be cause you can only have 6 max.

    so either don't swap any weapons or force a skin on players so they will only be able to use a skin for the player model of the weapon your swapping to.

    so like purple say it's best to just take them all from the start and give them back later on.
    Last edited by easymeat; November 19th, 2015 at 12:14 PM.

  7. #7
    Senior Member nene81's Avatar
    Join Date
    Nov 2014
    Location
    Seville, SPAIN
    Posts
    193

    Default

    Thanks guys, by steps:

    The reasons of this topic is that the player become a "collector" and experienced player can take advantage of a known BUG of spawing nadebox,
    simply pushing "use" beside the nadebox (the trigger can avoid this...)

    1) all my weapon.tik already had:
    Code:
    		dm additionalstartammo "grenade" 0
    		dm additionalstartammo "smokegrenade" 1
    		dm startitem "items/binoculars.tik"
    
    		// Additional DM Realism Loadout
    		dmrealism additionalstartammo "grenade" 0
    		dmrealism additionalstartammo "smokegrenade" 1
    2) My item_grenade_ammobox.tik was fixed to:
    Code:
    	server
    	{
    		classname AmmoEntity
    		name grenade
    		amount 1
    		dmamount 1
    	}
    My last entire script ( THE SOLUTION IS REMOVE THE TRIGGER AND NADEBOX, I THINK)

    Code:
    // dm/mp_bazaar_dm
    // mp_bazaar_dm
    // Bazaar
    
    main:
    	thread spawnNades
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    
    spawnNades:
    
    	level.resnade = int(getcvar "respawnade_time")
    	if ( level.resnade == 0 || level.resnade == "" || level.resnade == NIL || level.resnade == NULL)
    	{	level.resnade = 60}
    
    	local.diameter = int(getcvar "respawnade_diameter")
    	if (local.diameter == 0 || local.diameter == "" || local.diameter == NIL || local.diameter == NULL)
    	{	local.diameter = 70}
    
    	level.restartNades = 0
    	level.Nnades = 6
    
    	for ( local.i = 0 ; local.i <= level.Nnades ; local.i++ )
    	{
    		level.AmmoBoxGrenade[local.i] = spawn items/item_grenade_ammobox.tik //   FIXED TO 1
    		level.AmmoBoxGrenade[local.i].angles = ( -90 0 0 )
    		level.AmmoBoxGrenade[local.i].scale = 1
    		level.AmmoBoxGrenade[local.i] light 0 1 0 local.diameter
    		level.AmmoBoxGrenade[local.i] set_respawn_time level.resnade 
    		level.AmmoBoxGrenade[local.i] svflags "+broadcast"
    	}
    
    	level.AmmoBoxGrenade[0].origin = ( -474 1422 -52 )
    	level.AmmoBoxGrenade[1].origin = ( 722 1033 -52 )
    	level.AmmoBoxGrenade[2].origin = ( 200 430 -244 )
    	level.AmmoBoxGrenade[3].origin = ( 279 -437 -116 )
    	level.AmmoBoxGrenade[4].origin = ( -971 -497 -244 )
    	level.AmmoBoxGrenade[5].origin = ( 267 2173 11 )
    	level.AmmoBoxGrenade[6].origin = ( -501 -1252 -244 )
    
    	for ( local.i = 0 ; local.i <= level.Nnades ; local.i++ )
    	{
    		level.trig[local.i] = spawn trigger_multiple
    		level.trig[local.i].origin = level.AmmoBoxGrenade[local.i].origin
    		level.trig[local.i] setsize ( -10 -10 -10 ) ( 10 10 10 )
    //		level.trig[local.i] solid // FOR TESTING
    		level.trig[local.i] setthread controlNade
    		level.trig[local.i] wait 2	// How often the trig acts. TESTING
    		level.trig[local.i] delay 1	// How long before trig acts. TESTING
    	}
    
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    
    controlNade:
    
    	local.player = parm.other
    
    	if (  local.player.dmteam == "allies" || local.player.dmteam == "axis"  ) 
    	{
    		local.player take "models/weapons/m2frag_grenade.tik"
    		local.player take "models/weapons/Russian_F1_grenade.tik"
    		local.player take "models/weapons/mills_grenade.tik"
    		local.player take "models/weapons/steilhandgranate.tik"
            
    		wait 0.25
            
    		if ( local.player.dmteam == "allies" )
    		{	local.player give "models/weapons/m2frag_grenade.tik" }
    
    		if ( local.player.dmteam == "axis" ) 
    		{	local.player give "models/weapons/steilhandgranate.tik" }
    	}
    	
    	// thread removeNade // I NEED TO KNOW WHAT NUMBER OF TRIG IS...
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    
    removeNade:
    
    	level.AmmoBoxGrenade[local.i] remove 	//This command removes an object so that it no longer exists in the game.
    	level.trig[local.i] remove 
    
    	level.restartNades++
    
    	if ( level.restartNades == level.Nnades ) // I WILL REMOVE ALL FOR SECURITY AFTER LAS NADE IS PICKED UP... AND THEN LAUNCH SPAWNADE AGAIN
    	{
    		for ( local.i = 0 ; local.i <= level.Nnades ; local.i++ )
    		{
    			level.AmmoBoxGrenade[local.i] remove
    			level.trig[local.i] remove 
    		}
    
    		level.restartNades = 0
    		wait 5
    		goto spawnNades
    	}
    
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    Sorry for my clumsiness AND THANKS AGAIN

  8. #8
    Purple Developer Purple Elephant1au's Avatar
    Join Date
    Feb 2012
    Location
    Australia
    Posts
    1,269

    Default

    You can always just allow the user to only use the nadebox once per round or something.

    just set a local.player variable once they recieve a nade, and check the next time they try.

    if(local.player.got_nade)
    {
    //give nade
    local.player got_nade = 1;
    }
    else
    {
    // "sorry got nade already
    }

    Purple's Playground
    OBJ :
    103.29.85.127:12203
    xfire: purpleelephant1au
    email: purpleelephant1au@gmail.com
    skydrive: PurpleElephantSkydrive




  9. #9

    Default

    well you could change the wait time before nade respawns then add a no camping trigger set it to kill player if they stay there too long...lol That would fix their arse

  10. #10

    Default

    Nene i made a way to get the number of grenades and the player cant get more than one grenade.

    I have adapt to your code:


    MP_Bazaar_DM.scr

    Code:
    // dm/mp_bazaar_dm
    // mp_bazaar_dm
    // Bazaar
    
    main:
    	thread spawnNades
            thread check_player_dead
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    
    spawnNades:
    
    	level.resnade = int(getcvar "respawnade_time")
    	if ( level.resnade == 0 || level.resnade == "" || level.resnade == NIL || level.resnade == NULL)
    	{	level.resnade = 60}
    
    	local.diameter = int(getcvar "respawnade_diameter")
    	if (local.diameter == 0 || local.diameter == "" || local.diameter == NIL || local.diameter == NULL)
    	{	local.diameter = 70}
    
    	level.restartNades = 0
    	level.Nnades = 6
    
    	for ( local.i = 0 ; local.i <= level.Nnades ; local.i++ )
    	{
    		level.AmmoBoxGrenade[local.i] = spawn items/item_grenade_ammobox.tik //   FIXED TO 1
    		level.AmmoBoxGrenade[local.i].angles = ( -90 0 0 )
    		level.AmmoBoxGrenade[local.i].scale = 1
    		level.AmmoBoxGrenade[local.i] light 0 1 0 local.diameter
    		level.AmmoBoxGrenade[local.i] set_respawn_time level.resnade 
    		level.AmmoBoxGrenade[local.i] svflags "+broadcast"
    	}
    
    	level.AmmoBoxGrenade[0].origin = ( -474 1422 -52 )
    	level.AmmoBoxGrenade[1].origin = ( 722 1033 -52 )
    	level.AmmoBoxGrenade[2].origin = ( 200 430 -244 )
    	level.AmmoBoxGrenade[3].origin = ( 279 -437 -116 )
    	level.AmmoBoxGrenade[4].origin = ( -971 -497 -244 )
    	level.AmmoBoxGrenade[5].origin = ( 267 2173 11 )
    	level.AmmoBoxGrenade[6].origin = ( -501 -1252 -244 )
    
    	for ( local.i = 0 ; local.i <= level.Nnades ; local.i++ )
    	{
    		level.trig[local.i] = spawn trigger_multiple
    		level.trig[local.i].origin = level.AmmoBoxGrenade[local.i].origin
    		level.trig[local.i] setsize ( -10 -10 -10 ) ( 10 10 10 )
    //		level.trig[local.i] solid // FOR TESTING
    		level.trig[local.i] setthread controlNade
    		level.trig[local.i] wait 2	// How often the trig acts. TESTING
    		level.trig[local.i] delay 1	// How long before trig acts. TESTING
    	}
    
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    
    controlNade:
    
    	local.player = parm.other
    
    if(local.player.ng > 0)
    {
    
    local.player iprint "You cant get more than 1 grenade"
    
    }
    else
    {
    	if (  local.player.dmteam == "allies" || local.player.dmteam == "axis"  ) 
    	{
    		local.player take "models/weapons/m2frag_grenade.tik"
    		local.player take "models/weapons/Russian_F1_grenade.tik"
    		local.player take "models/weapons/mills_grenade.tik"
    		local.player take "models/weapons/steilhandgranate.tik"
            
    		wait 0.25
            
    		if ( local.player.dmteam == "allies" )
    		{	local.player give "models/weapons/m2frag_grenade.tik" }
    
    		if ( local.player.dmteam == "axis" ) 
    		{	local.player give "models/weapons/steilhandgranate.tik" }
    	}
    
    if(local.player.ng == NIL || local.player.ng == 0)
    {
    local.player.ng = 1
    }
    }	
    	// thread removeNade // I NEED TO KNOW WHAT NUMBER OF TRIG IS...
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    
    removeNade:
    
    	level.AmmoBoxGrenade[local.i] remove 	//This command removes an object so that it no longer exists in the game.
    	level.trig[local.i] remove 
    
    	level.restartNades++
    
    	if ( level.restartNades == level.Nnades ) // I WILL REMOVE ALL FOR SECURITY AFTER LAS NADE IS PICKED UP... AND THEN LAUNCH SPAWNADE AGAIN
    	{
    		for ( local.i = 0 ; local.i <= level.Nnades ; local.i++ )
    		{
    			level.AmmoBoxGrenade[local.i] remove
    			level.trig[local.i] remove 
    		}
    
    		level.restartNades = 0
    		wait 5
    		goto spawnNades
    	}
    
    end
    
    check_player_dead:
    
    while(1)
    {
    wait 0.02
    
        for(local.i =1;local.i <= $player.size;local.i++)
        {
            local.player = $player[local.i]
    
            if(!isalive local.player)
             {
             local.player.ng = 0
             }
        }
    }
    
    end
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////

    mike_torso
    :

    Code:
    state CHARGE_ATTACK_GRENADE
    {
    	movetype legs
    
    	entrycommands
    	{
    		viewmodelanim charge
    		exec global/remove_onegrenade_counter.scr
    	}
    remove_onegrenade_counter.scr:

    Code:
    if(self.ng > 0)
    {
    self.ng--
    }
    Last edited by DoubleKill; November 24th, 2015 at 09:20 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •