AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   give items to killer for kill (https://forums.alliedmods.net/showthread.php?t=184213)

simple_user 05-02-2012 09:42

give items to killer for kill
 
Hi! I'm noob in scripting, and this one, I think, is easy for you - smart guys. Basically I want to add a function to this super player code. I want to give bonus grenades for killer, if one kills the super player.


Code:

public super_kill()
{   

    new victim = read_data(2)
   
    if ( victim != gSuperPlayerCT || victim != gSuperPlayerT  ) return

    {
       
    new killer = read_data(1)
    give_item(killer,"weapon_hegrenade")
    cs_set_user_bpammo(killer,CSW_HEGRENADE,2)
   
    give_item(killer,"weapon_flashbang")
    cs_set_user_bpammo(killer,CSW_FLASHBANG,1)
    client_print(killer, print_center, "You've got a grenade bonus for killing superplayer!")
   
    }
}

So:

if ( victim != gSuperPlayerCT || victim != gSuperPlayerT ) return // this has no effect at all

And if I change it to:

if ( victim == gSuperPlayerCT || victim == gSuperPlayerT ) // after I kill the special player, game kicks me out and I get text in console:

Code:

SZ_GetSpace: overflow on netchan->message
WARNING: reliable overflow for me.
me. overflowed
Reliable channel over

Or:

// Maybe I'm registering event incorrectly:

register_event("DeathMsg", "super_kill", "a", "1>0")

Bilal Pro 05-02-2012 09:56

Re: give items to killer if victim == special player
 
This is how i would do it

PHP Code:

register_event("DeathMsg""eDeath""a"

PHP Code:

public eDeath(id)
{
new 
ikiller read_data (1)
new 
ivictim read_data (2)

if (
ivictim == gSuperPlayerCT)
{
    
give_item(ikiller"weapon_hegrenade")
    
cs_set_user_bpammo(ikiller,CSW_HEGRENADE,2)



Liverwiz 05-02-2012 10:57

Re: give items to killer if victim == special player
 
Quote:

Originally Posted by simple_user (Post 1700426)
Hi! I'm noob in scripting, and this one, I think, is easy for you - smart guys. Basically I want to add a function to this super player code. I want to give bonus grenades for killer, if one kills the super player.


Code:

public super_kill()
{   

    new victim = read_data(2)
   
    if ( victim != gSuperPlayerCT || victim != gSuperPlayerT  ) return

    {
       
    new killer = read_data(1)
    give_item(killer,"weapon_hegrenade")
    cs_set_user_bpammo(killer,CSW_HEGRENADE,2)
   
    give_item(killer,"weapon_flashbang")
    cs_set_user_bpammo(killer,CSW_FLASHBANG,1)
    client_print(killer, print_center, "You've got a grenade bonus for killing superplayer!")
   
    }
}


So:

if ( victim != gSuperPlayerCT || victim != gSuperPlayerT ) return // this has no effect at all

And if I change it to:

if ( victim == gSuperPlayerCT || victim == gSuperPlayerT ) // after I kill the special player, game kicks me out and I get text in console:

Code:

SZ_GetSpace: overflow on netchan->message
WARNING: reliable overflow for me.
me. overflowed
Reliable channel over

Or:

// Maybe I'm registering event incorrectly:

register_event("DeathMsg", "super_kill", "a", "1>0")

Use hamsandwich. Its a little easier.
Code:

register_event("DeathMsg", "super_kill", "a", "1>0")
:arrow:
PHP Code:

RegisterHam("Ham_Killed""player""super_kill"1

This will directly give you the person who died, and the attacker

Code:

public super_kill()
:arrow:
PHP Code:

public super_kill(victimIDkillerIDshouldgib

Then inside we're gonna switch it up a bit....

PHP Code:

if(victimID != gSuperPlayerCT || victimID != gSuperPlayerT || !is_user_alive(killerID))
    return 
HAM_HANDLED

give_item
(killerID,"weapon_hegrenade")
cs_set_user_bpammo(killerID,CSW_HEGRENADE,2)
    
give_item(killerID,"weapon_flashbang")
cs_set_user_bpammo(killerID,CSW_FLASHBANG,1)
client_print(killerIDprint_center"You've got a grenade bonus for killing superplayer!")

return 
HAM_HANDLED 

I changed the if statement to check to see if the victim is NOT a super_player, as well as if the killer is dead. This way it returns out of the function quicker, less hopping around code, and i feel it looks cleaner. I added !is_user_alive because there's no sense giving grenades to a dead client, is there?

The variables were changed to reflect the new header

shouldgib isn't used. Ignore that variable.

simple_user 05-02-2012 11:43

Re: give items to killer if victim == special player
 
Looks fine to me, but now it doesn't compile.

HTML Code:

error 035: argument type mismatch <argument 1>
1 error

in line 79:
HTML Code:

RegisterHam("Ham_Killed", "player", "super_kill", 1)

mottzi 05-02-2012 11:59

Re: give items to killer if victim == special player
 
RegisterHam("Ham_Killed", "player", "super_kill", 1)
->
RegisterHam(Ham_Killed, "player", "super_kill", 1)

simple_user 05-02-2012 12:44

Re: give items to killer if victim == special player
 
no errors in compiling. no grenades if super player killed, either.

ok. I made a conditional statement:

Code:

if(victimID == gSuperPlayerCT || victimID == gSuperPlayerT )
still no results

Liverwiz 05-02-2012 13:08

Re: give items to killer if victim == special player
 
what data type is gSuperPlayerCT/T? Make sure they are, in fact, IDs for the player you wish them to be. Try this as a means of debug....it'll print the name of the player that killed you, if that method is even called.

PHP Code:

//function header of super_kill
new sz_attacker[32], sz_victim[32]
get_user_name(attackerIDsz_attacker31)
get_user_name(victimIDsz_victim31)
        
// say if the function was even called
client_print(0print_chat"[Debug] %s killed %s"sz_attackersz_victim)    
if(
victimID != gSuperPlayerCT || victimID != gSuperPlayerT || !is_user_alive(killerID)) 
{
        
// confirm gSuperPlayer is improperly used
    
client_print(attackerIDprint_chat"[Debug] %s was not a SuperPlayer"sz_victim)    
    return 
HAM_HANDLED 
}
        
// giving the grenades isn't done right
client_print(attackerIDprint_chat"[Debug] %s was, in fact, a SuperPlayer"sz_victim)    

give_item(killerID,"weapon_hegrenade"
cs_set_user_bpammo(killerID,CSW_HEGRENADE,2
     
give_item(killerID,"weapon_flashbang"
cs_set_user_bpammo(killerID,CSW_FLASHBANG,1
client_print(killerIDprint_center"You've got a grenade bonus for killing superplayer!"

return 
HAM_HANDLED 


simple_user 05-02-2012 13:21

Re: give items to killer if victim == special player
 
new gSuperPlayerT
new gSuperPlayerCT

these are variables.

do I need to make id equal to gSuperPlayer, like in this code? :

Code:

    if ( id )
    {
        if ( get_user_team(id) == 1 )
        {
            if ( gSuperPlayerT == id ) return
           
            SetAbilities(id)
            gSuperPlayerT = id
        }
       
        else
        {
            event_choose_terrorist()


Liverwiz 05-02-2012 13:29

Re: give items to killer if victim == special player
 
if(id) {
will NEVER proceed. There is no condition in that statement.

but, yes, that's what you have to do to set that, assuming the context is right.

simple_user 05-02-2012 13:32

Re: give items to killer if victim == special player
 
function is called.


All times are GMT -4. The time now is 07:45.

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