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 storage locker (carries on between games) v1.2

HOT
broken avatar :(
Created 9 years ago
by death_reaper0
0 Members and 1 Guest are viewing this topic.
21,269 views
broken avatar :(
×
broken avatar :(
Location: aupotato
Date Registered: 27 September 2013
Last active: 3 years ago
Posts
588
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
Signature
respect the dead

donates greatly appreciated :) paypal.me/F3ARxReaper666
discord server:
https://discord.gg/tsGHW99
×
death_reaper0's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
Default is always 0
i managed to get a bank working with this, weapon locker though is still nonworking. i'll keep trying though
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 30 December 2012
Last active: 9 months ago
Posts
577
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
Signature
My preferred name is "xSanchez78".
Check me out here: www.steamcommunity.com/id/xSanchez78
×
alaurenc9's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
alaurenc9's Contact & Social LinksxSanchez78xSanchez78xSanchez78xSanchez78xSanchez78xSanchez78
i managed to get a bank working with this, weapon locker though is still nonworking. i'll keep trying though

this might be because you followed what Ray1235 told you to do, which was use level.zombie_weapons. level.zombie_weapons is not an array of integers, remember the array keys are all of the weapon names. That means if u use an integer to get something in that array like he told you to do, it will come up undefined. My best recommendation would be to list out all the weapons in an array of integers separately and use that. But if you want something easier,  this *MIGHT work.

Code Snippet
Plaintext
weapon = player GetCurrentWeapon();
keys = GetArrayKeys( level.zombie_weapons );
for( i = 0; i < keys.size; i ++ )
{
if( keys[i] == weapon )
{
player SetStat( 3005, i );
break;
}
}

Code Snippet
Plaintext
keys = GetArrayKeys( level.zombie_weapons );
weapon = keys[ player GetStat( 3005 ) ];
Last Edit: December 12, 2015, 06:39:13 pm by alaurenc9
broken avatar :(
×
broken avatar :(
Location: aupotato
Date Registered: 27 September 2013
Last active: 3 years ago
Posts
588
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
death_reaper0's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
this might be because you followed what Ray1235 told you to do, which was use level.zombie_weapons. level.zombie_weapons is not an array of integers, remember the array keys are all of the weapon names. That means if u use an integer to get something in that array like he told you to do, it will come up undefined. My best recommendation would be to list out all the weapons in an array of integers separately and use that. But if you want something easier,  this *MIGHT work.

Code Snippet
Plaintext
weapon = player GetCurrentWeapon();
keys = GetArrayKeys( level.zombie_weapons );
for( i = 0; i < keys.size; i ++ )
{
if( keys[i] == weapon )
{
player SetStat( 3005, i );
break;
}
}

Code Snippet
Plaintext
keys = GetArrayKeys( level.zombie_weapons );
weapon = keys[ player GetStat( 3005 ) ];
i'll try it out soon, thank you
broken avatar :(
  • DeletedUser
  • Deleted Member
×
broken avatar :(
DeletedUser
This user is deleted :(
level.zombie_weapons is an array of structs, so you can't just compare
Code Snippet
Plaintext
level.zombie_weapons[i]
with a weapon name :P
You have to do
Code Snippet
Plaintext
level.zombie_weapons[i].weapon_name == <weapon name>
broken avatar :(
×
broken avatar :(
Location: gbMilton Keynes
Date Registered: 17 January 2014
Last active: 4 years ago
Posts
6,877
Respect
1,004Add +1
Forum Rank
Immortal
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
Signature
If you want scripts / features made for you, then contact me by PM or email / skype etc
it will cost you tho so if you have no intention of reciprocating don't even waste my time ;)
×
Harry Bo21's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
Harry Bo21's Contact & Social Links[email protected]HarryBo21HarryBo000
level.zombie_weapons is an array of structs, so you can't just compare
Code Snippet
Plaintext
level.zombie_weapons[i]
with a weapon name :P
You have to do
Code Snippet
Plaintext
level.zombie_weapons[i].weapon_name == <weapon name>
its stored by string, and the string is the weapon name

level.zombie_weapons[weapon_name] = struct;

so using getKeys would have returned the weapon names

Code Snippet
Plaintext
keys = GetArrayKeys( level.zombie_weapons );
keys[i] == weapon

code is valid ;)


i can think of loads of cool stuff you could do with this setStat business lol
Last Edit: December 12, 2015, 07:02:54 pm by Harry Bo21
broken avatar :(
×
broken avatar :(
Location: aupotato
Date Registered: 27 September 2013
Last active: 3 years ago
Posts
588
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
death_reaper0's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
i got it to work using alaurenc9's method, im just gonna do a few tests, then i'll update the script
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 30 December 2012
Last active: 9 months ago
Posts
577
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
alaurenc9's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
alaurenc9's Contact & Social LinksxSanchez78xSanchez78xSanchez78xSanchez78xSanchez78xSanchez78
i got it to work using alaurenc9's method, im just gonna do a few tests, then i'll update the script


Nice ;) the only thing I was worried about with that method was if GetArrayKeys would return the weapons in the same order every time. I'm pretty sure it does though so no worries there. I think it orders the keys from like last defined to first defined, meaning it isn't random, so yes the system I posted should work 100%, and I'm glad as you say, it did.

A question for Ray1235, how would I find unused stat slots? 3005, 3006, 3007, and 3008 are unused? And until I make any edits to these, they will return 0?
Last Edit: December 12, 2015, 07:21:31 pm by alaurenc9
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
I think if we start making things with setStat, we all should save the number of the stat in a global variable, like:
Code Snippet
Plaintext
level.stats[ "weapon_storage_locker" ] = 3005;
So we can easily change them to avoid overwriting other things. Because if I wanted to add this and the bank to my map, I would have to find every line where setStat or getStat is written to change the number, but maybe someone with no idea in scripting wouldn't know that.
Just my opinion.
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 30 December 2012
Last active: 9 months ago
Posts
577
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
alaurenc9's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
alaurenc9's Contact & Social LinksxSanchez78xSanchez78xSanchez78xSanchez78xSanchez78xSanchez78
I think if we start making things with setStat, we all should save the number of the stat in a global variable, like:
Code Snippet
Plaintext
level.stats[ "weapon_storage_locker" ] = 3005;
So we can easily change them to avoid overwriting other things. Because if I wanted to add this and the bank to my map, I would have to find every line where setStat or getStat is written to change the number, but maybe someone with no idea in scripting wouldn't know that.
Just my opinion.

Well, for now, atleast death_reaper0 could you just change the bank one to use a different stat slot? So people would not get confused?
broken avatar :(
×
broken avatar :(
Location: aupotato
Date Registered: 27 September 2013
Last active: 3 years ago
Posts
588
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
death_reaper0's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
I think if we start making things with setStat, we all should save the number of the stat in a global variable, like:
Code Snippet
Plaintext
level.stats[ "weapon_storage_locker" ] = 3005;
So we can easily change them to avoid overwriting other things. Because if I wanted to add this and the bank to my map, I would have to find every line where setStat or getStat is written to change the number, but maybe someone with no idea in scripting wouldn't know that.
Just my opinion.
dont worry, the bank uses 3005 and this uses 3006-3009. it should only need to be changed if your using one of those for something else

anyway, its been updated, thank you everyone who helped!
Last Edit: December 12, 2015, 07:31:36 pm by death_reaper0
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
dont worry, the bank uses 3005 and this uses 3006-3009. it should only need to be changed if your using one of those for something else
Oh. Ok. Thought you were using 3005 for both. And yeah, for now there's no problem, but maybe more people start using this method and it would be nice to have everything organized at the top of the script so we'll know in one second which stats are in use.
As I said, it's just my opinion, you don't have to do it if you don't want.
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 30 December 2012
Last active: 9 months ago
Posts
577
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
alaurenc9's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
alaurenc9's Contact & Social LinksxSanchez78xSanchez78xSanchez78xSanchez78xSanchez78xSanchez78
I'm confused....

You defined literally every variable on the user. Only the stored information needs to be defined on the user. Everything else are just temporary variables that do not need to be this way. Here is how I would put the script together.

Code Snippet
Plaintext
weapon_locker_begin()
{
players = GetPlayers();
for( i = 0; i < players.size; i ++ )
{
players[i] thread get_stored_gun();
}
level thread weapon_locker();
}

get_stored_gun()
{
wait 1;
keys = GetArrayKeys( level.zombie_weapons );
self.stored_weapon = keys[ self GetStat( 3006 ) ];
self.stored_ammo_clip = self GetStat( 3007 );
self.stored_ammo_stock = self GetStat( 3008 );
self.has_stored_weapon = self GetStat( 3009 );
}

weapon_locker()
{
wait 2;
weapon_locker = GetEnt( "weapon_locker", "targetname" );
weapon_locker SetHintString( "Press & hold &&1 to Store Current Weapon" );
weapon_locker SetCursorHint( "HINT_NOICON" );
while( true )
{
weapon_locker waittill( "trigger", user );
if( is_player_valid( user ) )
{
weapon = user GetCurrentWeapon();
gun_ammo_clip = user GetWeaponAmmoClip( weapon );
gun_ammo_stock = user GetWeaponAmmoStock( weapon );
if( weapon == "colt" || weapon == "zombie_colt" || weapon == "zombie_colt_upgraded" || weapon == "tesla_gun" || weapon == "tesla_gun_upgraded" || weapon == "thundergun" || weapon == "thundergun_upgraded" || weapon == "ray_gun" || weapon == "ray_gun_upgraded" || weapon == "scavenger" || weapon == "scavenger_upgraded" || weapon == "vorkuta_knife" || weapon == "vorkuta_knife_upgraded" )
{
user IPrintLnBold( "^7You Cannot Store This Weapon" );
wait 2;
}
else if( weapon == "none" || weapon == "syrette" || weapon == "zombie_melee" || weapon == "zombie_perk_bottle_revive" || weapon == "zombie_perk_bottle_doubletap" || weapon == "zombie_perk_bottle_jugg" || weapon == "zombie_perk_bottle_sleight" || weapon == "zombie_perk_bottle_staminup" || weapon == "zombie_perk_bottle_phd" || weapon == "zombie_perk_bottle_mulekick" || weapon == "zombie_perk_bottle_deadshot" || weapon == "zombie_perk_bottle_cherry" || weapon == "zombie_perk_bottle_vulture" || weapon == "zombie_knuckle_crack" || weapon == "stielhandgranate" || weapon == "zombie_cymbal_monkey" || weapon == "zombie_bowie_flourish" )
{
user IPrintLnBold( "^7You Are Not Holding a Weapon" );
wait 2;
}
else
{
PrimaryWeapons = user GetWeaponsListPrimaries();
weapon_limit = 2;
if( user HasPerk( "specialty_extraammo" ) )
{
weapon_limit = 3;
}
if( IsDefined( PrimaryWeapons ) && PrimaryWeapons.size < weapon_limit && user.has_stored_weapon == 1 )
{
user GiveWeapon( user.stored_weapon );
user SetWeaponAmmoClip( user.stored_weapon, user.stored_ammo_clip );
user SetWeaponAmmoStock( user.stored_weapon, user.stored_ammo_stock );
user SwitchToWeapon( user.stored_weapon );
user.stored_weapon = "";
user.stored_ammo_clip = 0;
user.stored_ammo_stock = 0;
user.has_stored_weapon = 0;
}
else
{
user TakeWeapon( weapon );
    if( user.has_stored_weapon == 1 )
{
user GiveWeapon( user.stored_weapon );
user SetWeaponAmmoClip( user.stored_weapon, user.stored_ammo_clip );
user SetWeaponAmmoStock( user.stored_weapon, user.stored_ammo_stock );
user SwitchToWeapon( user.stored_weapon );
}
else if( IsDefined( PrimaryWeapons ) && PrimaryWeapons.size > 0 )
{
user SwitchToWeapon( PrimaryWeapons[0] );
}
user.stored_weapon = weapon;
user.stored_ammo_clip = gun_ammo_clip;
user.stored_ammo_stock = gun_ammo_stock;
user.has_stored_weapon = 1;
}
index = 0;
keys = GetArrayKeys( level.zombie_weapons );
for( i = 0; i < keys.size; i ++ )
{
if( keys[i] == user.stored_weapon )
{
index = i;
break;
}
}
user SetStat( 3006, index );
user SetStat( 3007, user.stored_ammo_clip );
user SetStat( 3008, user.stored_ammo_stock );
user SetStat( 3009, user.has_stored_weapon );
user PlayLocalSound( "cha_ching" );
wait 2;
}
}
}
}

I also made it where if you are under the weapon limit, and you have a stored weapon, you can simply take it out without trading your current weapon and have no stored weapon in the locker. Otherwise it will store your current weapon, and if you had a stored weapon, it will give you it. Of course if you feel that it is now more of my script than your script, you don't have to use it. But I don't mind you taking this script and calling it yours and using it etc. as long as credit is given.
Last Edit: December 12, 2015, 08:11:58 pm by alaurenc9
broken avatar :(
×
broken avatar :(
Location: aupotato
Date Registered: 27 September 2013
Last active: 3 years ago
Posts
588
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
death_reaper0's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
I'm confused....

You defined literally every variable on the user. Only the stored information needs to be defined on the user. Everything else are just temporary variables that do not need to be this way. Here is how I would put the script together.

Code Snippet
Plaintext
weapon_locker_begin()
{
players = GetPlayers();
for( i = 0; i < players.size; i ++ )
{
players[i] thread get_stored_gun();
}
level thread weapon_locker();
}

get_stored_gun()
{
wait 1;
keys = GetArrayKeys( level.zombie_weapons );
self.stored_weapon = keys[ self GetStat( 3006 ) ];
self.stored_ammo_clip = self GetStat( 3007 );
self.stored_ammo_stock = self GetStat( 3008 );
self.has_stored_weapon = self GetStat( 3009 );
}

weapon_locker()
{
wait 2;
weapon_locker = GetEnt( "weapon_locker", "targetname" );
weapon_locker SetHintString( "Press & hold &&1 to Store Current Weapon" );
weapon_locker SetCursorHint( "HINT_NOICON" );
while( true )
{
weapon_locker waittill( "trigger", user );
if( is_player_valid( user ) )
{
weapon = user GetCurrentWeapon();
gun_ammo_clip = user GetWeaponAmmoClip( weapon );
gun_ammo_stock = user GetWeaponAmmoStock( weapon );
if( weapon == "colt" || weapon == "zombie_colt" || weapon == "zombie_colt_upgraded" || weapon == "tesla_gun" || weapon == "tesla_gun_upgraded" || weapon == "thundergun" || weapon == "thundergun_upgraded" || weapon == "ray_gun" || weapon == "ray_gun_upgraded" || weapon == "scavenger" || weapon == "scavenger_upgraded" || weapon == "vorkuta_knife" || weapon == "vorkuta_knife_upgraded" )
{
user IPrintLnBold( "^7You Cannot Store This Weapon" );
wait 2;
}
else if( weapon == "none" || weapon == "syrette" || weapon == "zombie_melee" || weapon == "zombie_perk_bottle_revive" || weapon == "zombie_perk_bottle_doubletap" || weapon == "zombie_perk_bottle_jugg" || weapon == "zombie_perk_bottle_sleight" || weapon == "zombie_perk_bottle_staminup" || weapon == "zombie_perk_bottle_phd" || weapon == "zombie_perk_bottle_mulekick" || weapon == "zombie_perk_bottle_deadshot" || weapon == "zombie_perk_bottle_cherry" || weapon == "zombie_perk_bottle_vulture" || weapon == "zombie_knuckle_crack" || weapon == "stielhandgranate" || weapon == "zombie_cymbal_monkey" || weapon == "zombie_bowie_flourish" )
{
user IPrintLnBold( "^7You Are Not Holding a Weapon" );
wait 2;
}
else
{
PrimaryWeapons = user GetWeaponsListPrimaries();
weapon_limit = 2;
if( user HasPerk( "specialty_extraammo" ) )
{
weapon_limit = 3;
}
if( IsDefined( PrimaryWeapons ) && PrimaryWeapons.size < weapon_limit && user.has_stored_weapon == 1 )
{
user GiveWeapon( user.stored_weapon );
user SetWeaponAmmoClip( user.stored_weapon, user.stored_ammo_clip );
user SetWeaponAmmoStock( user.stored_weapon, user.stored_ammo_stock );
user SwitchToWeapon( user.stored_weapon );
user.stored_weapon = "";
user.stored_ammo_clip = 0;
user.stored_ammo_stock = 0;
user.has_stored_weapon = 0;
}
else
{
user TakeWeapon( weapon );
    if( user.has_stored_weapon == 1 )
{
user GiveWeapon( user.stored_weapon );
user SetWeaponAmmoClip( user.stored_weapon, user.stored_ammo_clip );
user SetWeaponAmmoStock( user.stored_weapon, user.stored_ammo_stock );
user SwitchToWeapon( user.stored_weapon );
}
else if( IsDefined( PrimaryWeapons ) && PrimaryWeapons.size > 0 )
{
user SwitchToWeapon( PrimaryWeapons[0] );
}
user.stored_weapon = weapon;
user.stored_ammo_clip = gun_ammo_clip;
user.stored_ammo_stock = gun_ammo_stock;
user.has_stored_weapon = 1;
}
index = 0;
keys = GetArrayKeys( level.zombie_weapons );
for( i = 0; i < keys.size; i ++ )
{
if( keys[i] == user.stored_weapon )
{
index = i;
break;
}
}
user SetStat( 3006, index );
user SetStat( 3007, user.stored_ammo_clip );
user SetStat( 3008, user.stored_ammo_stock );
user SetStat( 3009, user.has_stored_weapon );
user PlayLocalSound( "cha_ching" );
wait 2;
}
}
}
}

I also made it where if you are under the weapon limit, and you have a stored weapon, you can simply take it out without trading your current weapon and have no stored weapon in the locker. Otherwise it will store your current weapon, and if you had a stored weapon, it will give you it. Of course if you feel that it is now more of my script than your script, you don't have to use it. But I don't mind you taking this script and calling it yours and using it etc. as long as credit is given.

i used varriables cause i was just adapting my original script, its also a little chuncky, i'll probably make a better one later, and i didnt make it ake the weapon if you have a free slot since the bo2 one didnt (at least i dont think it did)
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 30 December 2012
Last active: 9 months ago
Posts
577
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
alaurenc9's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
alaurenc9's Contact & Social LinksxSanchez78xSanchez78xSanchez78xSanchez78xSanchez78xSanchez78
i used varriables cause i was just adapting my original script, its also a little chuncky, i'll probably make a better one later, and i didnt make it ake the weapon if you have a free slot since the bo2 one didnt (at least i dont think it did)


According to the bo2 script, yes you can take the weapon if you have a free slot and it clears the weapon locker data. So my script is accurate completely to bo2. Anyways let me know if you are going to use my script. If you aren't could you at least do me a favor and test it for me? Because if you don't use it, I want to release it in my own post, and I'll credit you for original script. Would you mind if I did that?
Last Edit: December 12, 2015, 08:24:26 pm by alaurenc9
broken avatar :(
×
broken avatar :(
Location: aupotato
Date Registered: 27 September 2013
Last active: 3 years ago
Posts
588
Respect
Forum Rank
Zombie Enslaver
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
×
death_reaper0's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
According to the bo2 script, yes you can take the weapon if you have a free slot and it clears the weapon locker data. So my script is accurate completely to bo2. Anyways let me know if you are going to use my script. If you aren't could you at least do me a favor and test it for me? Because if you don't use it, I want to release it in my own post, and I'll credit you for original script. Would you mind if I did that?
i just looked it up yeah it does use free slots like you said. i'll probably make an update later, im kinda a little busy to test right now so maybe in a few hours from now, i'll pm if it works, or what didnt work

 
Loading ...