UGX-Mods Login

or login with an authentication provider below
Sign In with Google
Sign In with Twitter
Sign In with Discord
Sign In with Steam
Sign In with Facebook
Sign In with Twitch

Weapon Script[helpmeObiwan]

broken avatar :(
Created 8 years ago
by azrealg
0 Members and 1 Guest are viewing this topic.
3,689 views
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 15 May 2016
Last active: 7 years ago
Posts
6
Respect
Forum Rank
Legless Crawler
Primary Group
Member
×
azrealg's Groups
azrealg's Contact & Social Links
My understand of CodWAW scripting is < 1  :derp:
I am trying to just simply get when a zombie is shot by a player and iprintln("Shot detected");
I am getting into using the fx editor and would like to start making some custom weapon scripts, but I can't seem to
detect even when a zombie has been shot by a player holding a specific gun, which is step one in the process.
Overall my questions to any of the more experienced coders or scripters here are as follows:

1.) I have seen from the thundergun and scavenger script and freezegun that the projectile impact
notify is used. Are there others (I haven't been able to find any in all the gsc I've searched through) that deal
with bullet, explosive, gas impact? or is basically every script weapon limited to using projectile_impact ?
2.) What logic can be used to solve my problem of collecting the zombie shot, the player who shot him, and the weapon used to doSomething(); perhaps I have the idea completely wrong but there is 0 documentation tutorials
or help on this subject.

The script below does not work. To clear out some of the basic responses I will get, I will say the weapon is added to dlc3 and _zombiemode_weapons properly, included in mod.csv and checked in the compiler. using the console the give crossbow command successfully gives my player a crossbow in game so I am pointing to the correct weapon.

Please help, coding gods of WAW, I want to make interesting shit here.

crossbow_rdy()
{
 for( ;; ){
 level waittill( "connecting", player );
 wait .1;
 ai = getaiarray("axis");
 for(i=0;i<ai.size;i++)
 player watch_for_crossbow(player, ai);
}}

watch_for_crossbow(player, ai) {
for(;;) {
self waittill("projectile_impact", weapon);
if(weapon == "crossbow")
iprintln("projectile detected. Hit " +ai.name );

}}
broken avatar :(
×
broken avatar :(
Location: esMadrid
Date Registered: 27 March 2015
Last active: 3 years ago
Posts
371
Respect
Forum Rank
Perk Hacker
Primary Group
Member
My Contact & Social Links
More
Personal Quote
JIGGLYPUFF used SING! YOU fell asleep!
Signature
×
Soy-Yo's Groups
Soy-Yo's Contact & Social LinksSoy-yoElCerdoRey
To get when and how a zombie is damaged:
Code Snippet
Plaintext
zombie waittill( "damage", amount, attacker, direction_vec, point, type );
I'm not sure what direction_vec is. Probably the direction of the bullet (?). I guess that point is the impact point. And type is the MOD (MOD_MELEE, MOD_BURNED, MOD_PISTOL_BULLET, etc.).
Don't know if it gives more info.
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 15 May 2016
Last active: 7 years ago
Posts
6
Respect
Forum Rank
Legless Crawler
Primary Group
Member
×
azrealg's Groups
azrealg's Contact & Social Links
Thank you very much for a fast reply I appreciate the help. I was able to get the script working and very well to the point that it is seamless in game at detecting zombie damage and type/ weapon. The waittill("death") can also be used instead if you only wanted to do something on death, but my purposes is setting up a basic weapon script which can be used to attach effects, damage events, physics etc to a specific group of weapons being fired.
I want to make a base template for lack of better words in which I can make several scripted weapons with different effects.

I will post the code I have, but I see already some downsides to using this notify as opposed to how let's say the scavenger script works. In the scavenger script the players are all threaded to waittill("projectile_impact")
this means even if your projectile hits not one zombie, the point, vector, player can be used for useful things, Like spawning effects, returning the lost ammo, etc. My original question was if anyone knows more about the different player notifications when shooting guns, I know projectile_impact is one but I can find no information on any of the others. I have tried bullet_impact and bullet_small_impact and they don't seem to work but perhaps they are in another format?

Code Snippet
Plaintext
get_weapon_strike() 
{
wait 6;
iprintln("script started");
while(1)
{
wait .1;
ai = getaiarray("axis");
for(i=0;i<ai.size;i++)
{
thread damage_check(ai[i]);
}
}
}

damage_check(zombie)
{
zombie waittill( "damage", amount, attacker, direction_vec, point, type);
weapon = attacker getCurrentWeapon();
if(type == "MOD_MELEE")
iprintln(amount + " Melee damage detected");
else if(type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH")
iprintln(amount + " Grenade damage detected");
else if(weapon == "zombie_colt")
iprintln(amount+ " of the COLT Damage detected THAT's what we're looking for");
else
iprintln(amount+ " "+weapon+" damage detected Not what we wanted");
}

broken avatar :(
×
broken avatar :(
Location: esMadrid
Date Registered: 27 March 2015
Last active: 3 years ago
Posts
371
Respect
Forum Rank
Perk Hacker
Primary Group
Member
My Contact & Social Links
More
Personal Quote
JIGGLYPUFF used SING! YOU fell asleep!
×
Soy-Yo's Groups
Soy-Yo's Contact & Social LinksSoy-yoElCerdoRey
Thank you very much for a fast reply I appreciate the help. I was able to get the script working and very well to the point that it is seamless in game at detecting zombie damage and type/ weapon. The waittill("death") can also be used instead if you only wanted to do something on death, but my purposes is setting up a basic weapon script which can be used to attach effects, damage events, physics etc to a specific group of weapons being fired.
I want to make a base template for lack of better words in which I can make several scripted weapons with different effects.

I will post the code I have, but I see already some downsides to using this notify as opposed to how let's say the scavenger script works. In the scavenger script the players are all threaded to waittill("projectile_impact")
this means even if your projectile hits not one zombie, the point, vector, player can be used for useful things, Like spawning effects, returning the lost ammo, etc. My original question was if anyone knows more about the different player notifications when shooting guns, I know projectile_impact is one but I can find no information on any of the others. I have tried bullet_impact and bullet_small_impact and they don't seem to work but perhaps they are in another format?

Code Snippet
Plaintext
get_weapon_strike() 
{
wait 6;
iprintln("script started");
while(1)
{
wait .1;
ai = getaiarray("axis");
for(i=0;i<ai.size;i++)
{
thread damage_check(ai[i]);
}
}
}

damage_check(zombie)
{
zombie waittill( "damage", amount, attacker, direction_vec, point, type);
weapon = attacker getCurrentWeapon();
if(type == "MOD_MELEE")
iprintln(amount + " Melee damage detected");
else if(type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH")
iprintln(amount + " Grenade damage detected");
else if(weapon == "zombie_colt")
iprintln(amount+ " of the COLT Damage detected THAT's what we're looking for");
else
iprintln(amount+ " "+weapon+" damage detected Not what we wanted");
}
There is a "weapon_fired" notify on the player every time he fires his weapon.
And "grenade_fired" for any grenade thrown:
Code Snippet
Plaintext
self waittill( "grenade_fire", grenade, weapon_name );
If I'm not wrong grenade is the actual grenade model.
There must some more notifies but these are the only ones I can think of right now.

And as for your script, your getting all zombies every 0.1 seconds and threading the function for zombies that has already been "used" (can express it better in English lol, but I think you can understand me).
I would recommend you moving the damage_check() function to where zombies are spawned in _zombiemode.gsc:
Code Snippet
Plaintext
ai = spawn_zombie( spawn_point ); 
if( IsDefined( ai ) )
{
level.zombie_total--;
ai thread round_spawn_failsafe();
count++;
}
So the function is only called once for each zombie. Or maybe adding a boolean attribute to the zombies and check it before threading the function.

Another thing is that you can thread the function on an entity, so you don't have to pass the zombie as a parameter.
You can use:
Code Snippet
Plaintext
ai[i] thread damage_check();
And then get the ai in the other function as self:
Code Snippet
Plaintext
self waittill( "damage", amount, attacker, direction_vec, point, type);
broken avatar :(
×
broken avatar :(
Location: nlApeldoorn
Date Registered: 17 December 2013
Last active: 1 year ago
Posts
1,187
Respect
1,404Add +1
Forum Rank
Zombie Colossus
Primary Group
Community Scripter Elite
My Groups
More
My Contact & Social Links
More
Personal Quote
It aint much, if it aint Dutch
Signature
×
BluntStuffy's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Community Scripter Elite Has shown excellence and experience in the area of custom scripting in the UGX-Mods community.
Oil Rig Beta Access
Oil Rig Beta Access
BluntStuffy's Contact & Social LinksBluntstuffy@BluntZombieBluntStuffyStuffyZombie
1.) I have seen from the thundergun and scavenger script and freezegun that the projectile impact
notify is used. Are there others (I haven't been able to find any in all the gsc I've searched through) that deal
with bullet, explosive, gas impact? or is basically every script weapon limited to using projectile_impact ?

Code Snippet
Plaintext
		self waittill( "grenade_fire", grenade, weapName );
for grenade-weapons, returns the actual grenade, and the weaponfile-name


Code Snippet
Plaintext
		self waittill("projectile_impact", weapName, impact);
for projectile weapons, returns the impact point of the projectile and the weaponfile-name


Code Snippet
Plaintext
		player waittill( "weapon_fired" ); 
currentweapon = player GetCurrentWeapon();
for any weapon that's using the 'fire-button'. doesn't return anything ( pretty sure ), you can use the getcurrentweapon() function right after it in most cases..


Code Snippet
Plaintext
		self waittill( "damage", amount, attacker, direction_vec, point, type );
And then there's obv the waittilll damage on zombies themselfs like you allready used:



There are one or two other notify's for grenades ( pullback and explode i think ) but nothing that's really usefull beside's these ones..

Quote
2.) What logic can be used to solve my problem of collecting the zombie shot, the player who shot him, and the weapon used to doSomething(); perhaps I have the idea completely wrong but there is 0 documentation tutorials

And like Soy-Yo mentioned, you want to thread that in another way on zombies, because this way you are threading it on every zombie in the map, also if it's allready been threaded in the previous loop. You could simply add a var to solve that as well:

Code Snippet
Plaintext
get_weapon_strike() 
{
wait 6;
iprintln("script started");
while(1)
{
wait .1;
ai = getaiarray("axis");
for(i=0;i<ai.size;i++)
{
if( !isdefined( ai.weapon_strike_checked ) )
{
ai.weapon_strike_checked = true;
thread damage_check(ai[i]);
}
}
}
}



broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 15 May 2016
Last active: 7 years ago
Posts
6
Respect
Forum Rank
Legless Crawler
Primary Group
Member
×
azrealg's Groups
azrealg's Contact & Social Links
Alright cool, very useful info and I'm sure someone in the future will find all of this helpful too.
I will try to get this worked into _zombiemode from what I can see though, the function
will need to keep checking. If I only thread it one time when the zombie spawns. It will only thread one time per zombie which would use alot less processing, but not the desired effect.

How about it guys? Is it easier to simply have a seperate script constantly checking zombies
or to write a looping function in _zombiemode which keeps looping until the zombie dies?
broken avatar :(
×
broken avatar :(
Location: usNUKETOWN
Date Registered: 19 February 2014
Last active: 7 years ago
Posts
177
Respect
Forum Rank
Pack-a-Puncher
Primary Group
Donator ♥
My Groups
More
My Contact & Social Links
More
Personal Quote
Zombie Specialist
Signature
×
thezombieproject's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Oil Rig Beta Access
Oil Rig Beta Access
What logic can be used to solve my problem of collecting the zombie shot, the player who shot him, and the weapon used to doSomething(); perhaps I have the idea completely wrong but there is 0 documentation tutorials
or help on this subject.

cant you simply use zombiemode spawner for this?

go to _zombiemode_spawner.gsc

find FUNCTION...

zombie_gib_on_damage()

add this line
Code Snippet
Plaintext
self thread zombie_damage_check(amount , attacker , type);
under
      if( !IsDefined( self ) )
      {
         return;
      }

So it looks like this. (IMAGE)
https://gyazo.com/9b8984463fbb0b5f339eab2046168676

next add this to the bottom of the script (change and add whatever checks to this fuction you need )
Code Snippet
Plaintext
zombie_damage_check(amount , attacker , type)
{
weapon = self.damageWeapon;
iprintlnBold("damage weapon "+weapon);
iprintlnBold("damage type "+type);
iprintlnBold("damage amount "+amount);

}

self.damageWeapon - is the weapon used to damage zombie
amount - is the amount of damage caused by weapon
attacker - is the player who caused damage
type - is the type of damage used to damage zombie


Last Edit: August 06, 2016, 10:35:33 pm by thezombieproject
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 15 May 2016
Last active: 7 years ago
Posts
6
Respect
Forum Rank
Legless Crawler
Primary Group
Member
×
azrealg's Groups
azrealg's Contact & Social Links
Tzp I tried your suggestion worked better than what I had before thanks for the advice, but basically It looks like
it is still better for functional reasons that I run a separate while loop outside of the main gscs.
Also after making a teleport crossbow weapon and teleing around to test the scripts reliability
After hours of testing, what I can see is that if I insert at the gib, death checks and weapons which do not deal damage besides a killing blow or force enemies to start ragdoll sometimes will not return a println and no teleport. There is complications with Harrybo21s newest perk system pack a punch, I think it has to do with his custom trigger script which keeps returning errors with setting hint string for individual players. Regardless when elements of that fail it will sometimes not check at gib or even tagged from spawn like I had the code before with blunty's assistance, for the rest of the game until restart. Which means there is a random chance that any script I do could glitch and not work for the rest of the game. Instead of making checks I decided to go back to a small loop outside of the main script with a small wait. Reliability wise I think that works the best although it may not be as efficient?

Or maybe I'm wrong?, I appreciate the input thanks all.
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 15 May 2016
Last active: 7 years ago
Posts
6
Respect
Forum Rank
Legless Crawler
Primary Group
Member
×
azrealg's Groups
azrealg's Contact & Social Links
I should mention, that before writing the above message, I tried a function which grabbed enemies damaged, and rethreaded self when still alive. It has the same issues but the added issue of lag. Some guns fire so fast, the script will actually not rethread sometimes and again that means for the entire rest of the game.  Also when 6 bullets strike you may get only 3-5 executions of the script if it didn't glitch.

 
Loading ...