Hi, I'm new to mapping and I am currently working on my first map. However, I wanted to add in the springfield using the prefab weapon_upgrade_springfield but I receive a script runtime error. Any way to fix this?
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
Its trying to get the hintstring of the weapon but it doesn't exist. My guess is that in the _zombiemode_weapons include_weapons function, the hint isn't being passed correctly.
Mind posting the contents of include_weapons in _zombiemode_weapons and what weapon your trying to add?
Its trying to get the hintstring of the weapon but it doesn't exist. My guess is that in the _zombiemode_weapons include_weapons function, the hint isn't being passed correctly.
Mind posting the contents of include_weapons in _zombiemode_weapons and what weapon your trying to add?
Here is the code. I've been trying to add in the springfield and I also think that the sawed double barrel gives that error too.
default_tesla_weighting_func() { num_to_add = 1; if( isDefined( level.pulls_since_last_tesla_gun ) ) { // player has dropped the tesla for another weapon, so we set all future polls to 20% if( isDefined(level.player_drops_tesla_gun) && level.player_drops_tesla_gun == true ) { num_to_add += int(.2 * level.zombie_include_weapons.size); }
// player has not seen tesla gun in late rounds if( !isDefined(level.player_seen_tesla_gun) || level.player_seen_tesla_gun == false ) { // after round 10 the Tesla gun percentage increases to 20% if( level.round_number > 10 ) { num_to_add += int(.2 * level.zombie_include_weapons.size); } // after round 5 the Tesla gun percentage increases to 15% else if( level.round_number > 5 ) { // calculate the number of times we have to add it to the array to get the desired percent num_to_add += int(.15 * level.zombie_include_weapons.size); } } } return num_to_add; }
default_ray_gun_weighting_func() { if( level.box_moved == true ) { num_to_add = 1; // increase the percentage of ray gun if( isDefined( level.pulls_since_last_ray_gun ) ) { // after 12 pulls the ray gun percentage increases to 15% if( level.pulls_since_last_ray_gun > 11 ) { num_to_add += int(level.zombie_include_weapons.size*0.15); } // after 8 pulls the Ray Gun percentage increases to 10% else if( level.pulls_since_last_ray_gun > 7 ) { num_to_add += int(.1 * level.zombie_include_weapons.size); } } return num_to_add; } else { return 0; } }
// // Slightly elevate the chance to get it until someone has it, then make it even default_cymbal_monkey_weighting_func() { players = get_players(); count = 0; for( i = 0; i < players.size; i++ ) { if( players[i] has_weapon_or_upgrade( "zombie_cymbal_monkey" ) ) { count++; } } if ( count > 0 ) { return 1; } else { if( level.round_number < 10 ) { return 3; } else { return 5; } } }
if(level.script != "nazi_zombie_prototype") { Precachemodel("zombie_teddybear"); } // ONLY 1 OF THE BELOW SHOULD BE ALLOWED add_limited_weapon( "m2_flamethrower_zombie", 1 ); add_limited_weapon( "tesla_gun", 1); }
//remove this function and whenever it's call for production. this is only for testing purpose. add_limited_tesla_gun() {
weapon_spawns[i] thread weapon_spawn_think(); model = getent( weapon_spawns[i].target, "targetname" ); model hide(); } }
// weapon cabinets which open on use init_weapon_cabinet() { // the triggers which are targeted at doors weapon_cabs = GetEntArray( "weapon_cabinet_use", "targetname" );
// returns the trigger hint string for the given weapon get_weapon_hint( weapon_name ) { AssertEx( IsDefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." );
return level.zombie_weapons[weapon_name].hint; }
get_weapon_cost( weapon_name ) { AssertEx( IsDefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." );
return level.zombie_weapons[weapon_name].cost; }
get_ammo_cost( weapon_name ) { AssertEx( IsDefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." );
get_is_in_box( weapon_name ) { AssertEx( IsDefined( level.zombie_weapons[weapon_name] ), weapon_name + " was not included or is not part of the zombie weapon list." );
if(level.script == "nazi_zombie_sumpf" || level.script == "nazi_zombie_factory" || level.script == "nazi_zombie_coast") { // Anchor target will grab the weapon spawn point inside the box, so the fx will be centered on it too anchor = GetEnt(level.chests[level.chest_index].target, "targetname"); anchorTarget = GetEnt(anchor.target, "targetname");
level.pandora_light = Spawn( "script_model", anchorTarget.origin ); level.pandora_light.angles = anchorTarget.angles + (-90, 0, 0); //temp_fx_origin rotateto((-90, (box_origin.angles[1] * -1), 0), 0.05); level.pandora_light SetModel( "tag_origin" ); playfxontag(level._effect["lght_marker"], level.pandora_light, "tag_origin"); } // DCS: we need a smaller light in the catacombs for paris, the generic one fills the area under the tower. else if(level.script == "nazi_zombie_paris") { // Anchor target will grab the weapon spawn point inside the box, so the fx will be centered on it too anchor = GetEnt(level.chests[level.chest_index].target, "targetname"); anchorTarget = GetEnt(anchor.target, "targetname");
//PI CHANGE - altered to allow for more than one piece of rubble rubble = getentarray( level.chests[index].script_noteworthy + "_rubble", "script_noteworthy" ); if ( IsDefined( rubble ) ) { for ( x = 0; x < rubble.size; x++ ) { rubble[x] hide(); } //END PI CHANGE } else { println( "^3Warning: No rubble found for magic box" ); } }
// PI_CHANGE_BEGIN - JMA - we want to play another effect on swamp anchor = GetEnt(self.target, "targetname"); anchorTarget = GetEnt(anchor.target, "targetname");
// waittill someuses uses this user = undefined; while( 1 ) { self waittill( "trigger", user );
if( user in_revive_trigger() ) { wait( 0.1 ); continue; }
// make sure the user is a player, and that they can afford it if( is_player_valid( user ) && user.score >= cost ) { user maps\_zombiemode_score::minus_to_player_score( cost ); break; } else if ( user.score < cost ) { user thread maps\_zombiemode_perks::play_no_money_perk_dialog(); continue; }
wait 0.05; }
// trigger_use->script_brushmodel lid->script_origin in radiant lid = getent( self.target, "targetname" ); weapon_spawn_org = getent( lid.target, "targetname" );
//open the lid lid thread treasure_chest_lid_open();
// SRS 9/3/2008: added to help other functions know if we timed out on grabbing the item self.timedOut = false;
// mario kart style weapon spawning weapon_spawn_org thread treasure_chest_weapon_spawn( self, user );
// the glowfx weapon_spawn_org thread treasure_chest_glowfx();
// take away usability until model is done randomizing self disable_trigger();
if (flag("moving_chest_now")) { user thread treasure_chest_move_vo(); self treasure_chest_move(lid);
} else { // Let the player grab the weapon and re-enable the box // self.grab_weapon_hint = true; self.chest_user = user; self sethintstring( &"ZOMBIE_TRADE_WEAPONS" ); self setCursorHint( "HINT_NOICON" ); self setvisibletoplayer( user );
// Limit its visibility to the player who bought the box self enable_trigger(); self thread treasure_chest_timeout();
// make sure the guy that spent the money gets the item // SRS 9/3/2008: ...or item goes back into the box if we time out while( 1 ) { self waittill( "trigger", grabber );
if( grabber == user || grabber == level ) {
if( grabber == user && is_player_valid( user ) && user GetCurrentWeapon() != "mine_bouncing_betty" ) { bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type magic_accept", user.playername, user.score, level.round_number, cost, weapon_spawn_org.weapon_string, self.origin ); self notify( "user_grabbed_weapon" ); user thread treasure_chest_give_weapon( weapon_spawn_org.weapon_string ); break; } else if( grabber == level ) { // it timed out self.timedOut = true; bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type magic_reject", user.playername, user.score, level.round_number, cost, weapon_spawn_org.weapon_string, self.origin ); break; } }
// // Disable trigger if can't buy weapon and also if someone else is using the chest decide_hide_show_chest_hint( endon_notify ) { if( isDefined( endon_notify ) ) { self endon( endon_notify ); }
while( true ) { players = get_players(); for( i = 0; i < players.size; i++ ) { // chest_user defined if someone bought a weapon spin, false when chest closed if ( (IsDefined(self.chest_user) && players[i] != self.chest_user ) || !players[i] can_buy_weapon() ) { self SetInvisibleToPlayer( players[i], true ); } else { self SetInvisibleToPlayer( players[i], false ); } } wait( 0.1 ); } }
//This keeps multiple voice overs from playing on the same player (both killstreaks and headshots). if (level.player_is_speaking != 1 && isDefined(sound)) { level.player_is_speaking = 1; self playsound(sound, "sound_done"); self waittill("sound_done"); level.player_is_speaking = 0; }
//TUEY - Play the 'disappear' sound playsoundatposition ("box_poof", soundpoint.origin); for(i=0;i<fake_pieces.size;i++) { fake_pieces[i] delete(); }
//gzheng-Show the rubble //PI CHANGE - allow for more than one object of rubble per box rubble = getentarray(self.script_noteworthy + "_rubble", "script_noteworthy");
if ( IsDefined( rubble ) ) { for (i = 0; i < rubble.size; i++) { rubble[i] show(); } } else { println( "^3Warning: No rubble found for magic box" ); }
wait(0.1); anchor delete(); soundpoint delete();
old_chest_index = level.chest_index;
wait(5);
//chest moving logic //PI CHANGE - for sumpf, this doesn't work because chest_index is always incremented twice (here and line 724) - while this would work with an odd number of chests, // with an even number it skips half of the chest locations in the map
level.verify_chest = false; //wait(3); //make sure level is asylum, factory, or sumpf and make magic box only appear in location player have open, it's off by default //also make sure box doesn't respawn in old location. //PI WJB: removed check on "magic_box_explore_only" dvar because it is only ever used here and when it is set in _zombiemode.gsc line 446 // where it is declared and set to 0, causing this while loop to never happen because the check was to see if it was equal to 1 if( level.script == "nazi_zombie_asylum" || level.script == "nazi_zombie_factory" || level.script == "nazi_zombie_sumpf" || level.script == "nazi_zombie_paris" || level.script == "nazi_zombie_coast" || level.script == "nazi_zombie_theater" || level.script == "nazi_zombie_tunnel") { level.chest_index++;
if (level.chest_index >= level.chests.size) { //PI CHANGE - this way the chests won't move in the same order the second time around temp_chest_name = level.chests[level.chest_index - 1].script_noteworthy; level.chest_index = 0; level.chests = array_randomize(level.chests); //in case it happens to randomize in such a way that the chest_index now points to the same location // JMA - want to avoid an infinite loop, so we use an if statement if (temp_chest_name == level.chests[level.chest_index].script_noteworthy) { level.chest_index++; } //END PI CHANGE }
//turn off magic box light. level notify("magic_box_light_switch"); //PI CHANGE - altered to allow for more than one object of rubble per box unhide_magic_box( level.chest_index );
} //verify if that magic box is open to players or not. verify_chest_is_open() {
//for(i = 0; i < 5; i++) //PI CHANGE - altered so that there can be more than 5 valid chest locations for (i = 0; i < level.open_chest_location.size; i++) { if(isdefined(level.open_chest_location[i])) { if(level.open_chest_location[i] == level.chests[level.chest_index].script_noteworthy) { level.verify_chest = true; return; } }
// Check the pack a punch machines to see if they are holding what we're looking for for ( k=0; k<pap_triggers.size; k++ ) { if ( IsDefined(pap_triggers[k].current_weapon) && pap_triggers[k].current_weapon == keys2[q] ) { count++; } }
// Check the pack a punch machines to see if they are holding what we're looking for for ( k=0; k<pap_triggers.size; k++ ) { if ( IsDefined(pap_triggers[k].current_weapon) && pap_triggers[k].current_weapon == keys2[q] ) { count++; } }
//increase the chance of joker appearing from 0-100 based on amount of the time chest has been opened. if(level.script != "nazi_zombie_prototype" && getdvar("magic_chest_movable") == "1") {
if(level.chest_accessed < level.chest_min_move_usage) { // PI_CHANGE_BEGIN - JMA - RandomInt(100) can return a number between 0-99. If it's zero and chance_of_joker is zero // we can possibly have a teddy bear one after another. chance_of_joker = -1; // PI_CHANGE_END } else { chance_of_joker = level.chest_accessed + 20;
// make sure teddy bear appears on the 8th pull if it hasn't moved from the initial spot if( (!isDefined(level.magic_box_first_move) || level.magic_box_first_move == false ) && level.chest_accessed >= 8) { chance_of_joker = 100; }
// pulls 4 thru 8, there is a 15% chance of getting the teddy bear // NOTE: this happens in all cases if( level.chest_accessed >= 4 && level.chest_accessed < 8 ) { if( random < 15 ) { chance_of_joker = 100; } else { chance_of_joker = -1; } }
// after the first magic box move the teddy bear percentages changes if( isDefined(level.magic_box_first_move) && level.magic_box_first_move == true ) { // between pulls 8 thru 12, the teddy bear percent is 30% if( level.chest_accessed >= 8 && level.chest_accessed < 13 ) { if( random < 30 ) { chance_of_joker = 100; } else { chance_of_joker = -1; } }
// after 12th pull, the teddy bear percent is 50% if( level.chest_accessed >= 13 ) { if( random < 50 ) { chance_of_joker = 100; } else { chance_of_joker = -1; } } } }
if (random <= chance_of_joker) { model SetModel("zombie_teddybear"); // model rotateto(level.chests[level.chest_index].angles, 0.01); //wait(1); model.angles = self.angles; wait 1; flag_set("moving_chest_now"); self notify( "move_imminent" ); level.chest_accessed = 0;
player maps\_zombiemode_score::add_to_player_score( 950 );
//allow power weapon to be accessed. level.box_moved = true; } }
self notify( "randomization_done" );
if (flag("moving_chest_now")) { wait .5; // we need a wait here before this notify level notify("weapon_fly_away_start"); wait 2; model MoveZ(500, 4, 3); model waittill("movedone"); model delete(); self notify( "box_moving" ); level notify("weapon_fly_away_end"); } else {
//turn off power weapon, since player just got one if( rand == "tesla_gun" || rand == "ray_gun" ) { // PI_CHANGE_BEGIN - JMA - reset the counters for tesla gun and ray gun pulls if( isDefined( level.script ) && (level.script == "nazi_zombie_sumpf" || level.script == "nazi_zombie_factory") ) { if( rand == "ray_gun" ) { level.box_moved = false; level.pulls_since_last_ray_gun = 0; }
model thread timer_til_despawn(floatHeight); self waittill( "weapon_grabbed" );
if( !chest.timedOut ) { model Delete(); }
} } timer_til_despawn(floatHeight) {
// SRS 9/3/2008: if we timed out, move the weapon back into the box instead of deleting it putBackTime = 12; self MoveTo( self.origin - ( 0, 0, floatHeight ), putBackTime, ( putBackTime * 0.5 ) ); wait( putBackTime );
// self is the player string comes from the randomization function treasure_chest_give_weapon( weapon_string ) { primaryWeapons = self GetWeaponsListPrimaries(); current_weapon = undefined;
// This should never be true for the first time. if( primaryWeapons.size >= 2 ) // he has two weapons { current_weapon = self getCurrentWeapon(); // get hiss current weapon
if( weapon_string == "molotov" || weapon_string == "molotov_zombie" ) { // PI_CHANGE_BEGIN // JMA 051409 sanity check to see if we have the weapon before we remove it has_weapon = self HasWeapon( "zombie_cymbal_monkey" ); if( isDefined(has_weapon) && has_weapon ) { self TakeWeapon( "zombie_cymbal_monkey" ); } // PI_CHANGE_END } if( weapon_string == "zombie_cymbal_monkey" ) { // PI_CHANGE_BEGIN // JMA 051409 sanity check to see if we have the weapon before we remove it has_weapon = self HasWeapon( "molotov" ); if( isDefined(has_weapon) && has_weapon ) { self TakeWeapon( "molotov" ); }
//PI ESM - added for bouncing betties fx weapon/bouncing_betty/fx_explosion_betty_generic fx weapon/bouncing_betty/fx_betty_trail
//ESM - added for electrical trap fx misc/fx_zombie_electric_trap fx env/electrical/fx_elec_sparking_oneshot fx misc/fx_zombie_zapper_powerbox_on fx misc/fx_zombie_zapper_wall_control_on fx maps/zombie/fx_zombie_light_glow_green fx maps/zombie/fx_zombie_light_glow_red fx misc/fx_zombie_elec_trail_oneshot fx env/electrical/fx_elec_wire_spark_dl_oneshot fx env/electrical/fx_elec_player_md fx env/electrical/fx_elec_player_sm fx env/electrical/fx_elec_player_torso fx misc/fx_zombie_elec_gen_on fx misc/fx_zombie_elec_gen_idle xmodel zombie_zapper_cagelight_red xmodel zombie_zapper_cagelight_green
// PI ESM - added for PC running //xmodel exploding_barrel_test_d xmodel zombie_teddybear
// Scripted effects fx env/dirt/fx_dust_ceiling_impact_lg_mdbrown fx env/electrical/fx_elec_wire_spark_burst fx misc/fx_zombie_couch_effect fx destructibles/fx_dest_fire_vert fx bio/player/fx_footstep_dust fx bio/player/fx_footstep_water fx bio/player/fx_footstep_sand fx bio/player/fx_footstep_mud
fx weapon/bouncing_betty/fx_explosion_betty_generic fx weapon/bouncing_betty/fx_betty_trail
// Perks-a-cola effects fx misc/fx_zombie_cola_on fx misc/fx_zombie_cola_dtap_on fx misc/fx_zombie_cola_jugg_on fx misc/fx_zombie_cola_revive_on
// CreateFX effects fx env/fire/fx_embers_falling_sm
fx maps/mp_maps/fx_mp_ray_moon_lg_1sd fx maps/mp_maps/fx_mp_ray_fire_ribbon fx maps/mp_maps/fx_mp_ray_fire_ribbon_med fx maps/mp_maps/fx_mp_ray_moon_lg fx maps/mp_maps/fx_mp_ray_moon_md //fx maps/mp_maps/fx_mp_flare_med //fx maps/mp_maps/fx_mp_flare_md fx maps/mp_maps/fx_mp_ray_moon_sm //fx maps/mp_maps/fx_mp_ray_moon_xsm
fx maps/mp_maps/fx_mp_light_glow_indoor_short_loop fx maps/mp_maps/fx_mp_light_glow_outdoor_long_loop fx maps/mp_maps/fx_mp_insects_lantern fx maps/mp_maps/fx_mp_light_lamp fx maps/mp_maps/fx_mp_fire_torch_noglow fx maps/zombie/fx_zombie_moon_eclipse fx maps/zombie/fx_zombie_clock_hand fx maps/mp_maps/fx_mp_elec_broken_light_1shot fx "maps/mp_maps/fx_mp_light_lamp_no_eo "
fx maps/zombie/fx_zombie_packapunch
// CreateFX Exploders fx maps/zombie/fx_transporter_beam fx maps/zombie/fx_transporter_pad_start fx maps/zombie/fx_transporter_start fx maps/zombie/fx_transporter_ambient fx maps/zombie/fx_zombie_wire_spark fx maps/zombie/fx_zombie_mainframe_link_single fx maps/zombie/fx_zombie_mainframe_link_all fx maps/zombie/fx_zombie_mainframe_linked fx maps/zombie/fx_zombie_mainframe_beam fx maps/zombie/fx_zombie_mainframe_flat fx maps/zombie/fx_zombie_mainframe_flat_start fx maps/zombie/fx_zombie_mainframe_beam_start fx maps/zombie/fx_zombie_flashback_american fx maps/zombie/fx_zombie_difference fx maps/zombie/fx_zombie_mainframe_steam fx maps/zombie/fx_zombie_heat_sink fx maps/mp_maps/fx_mp_elec_spark_fast_random fx misc/fx_zombie_elec_gen_idle fx maps/zombie/fx_zombie_elec_pole_terminal
// Fog Sky and vision rawfile maps/createart/nazi_zombie_factory_art.gsc rawfile vision/zombie_factory.vision
// Pandora Box fx maps/zombie/fx_zombie_factory_marker fx maps/zombie/fx_zombie_factory_marker_fl fx maps/zombie/fx_zombie_factory_marker_sm
// dogs fx maps/zombie/fx_zombie_dog_eyes fx maps/zombie/fx_zombie_dog_explosion fx maps/zombie/fx_zombie_dog_fire_trail fx maps/zombie/fx_zombie_dog_ash_trail fx maps/zombie/fx_zombie_dog_breath
// Teleporter fx maps/zombie/fx_transporter_pad_start fx maps/zombie/fx_transporter_start fx maps/zombie/fx_transporter_beam
// Pause Screen Map material menu_map_nazi_zombie_factory
// Animtrees rawfile animtrees/zombie_factory.atr
// extra anims xanim o_zombie_lattice_gate_full xanim o_zombie_lattice_gate_half xanim o_zombie_difference_engine_ani
// Server Scripts rawfile maps/nazi_zombie_tunnel.gsc rawfile maps/createfx/nazi_zombie_tunnel_fx.gsc
// Fog Sky and Vision rawfile maps/createart/nazi_zombie_tunnel_art.gsc " // -- Keep This" But Can Change Values Inside File rawfile vision/zombie_factory.vision
////////////////////////////////////////////////////////////////// FX AREA /////////////////////////////////////////////////////////////////
// Scripted Effects fx env/dirt/fx_dust_ceiling_impact_lg_mdbrown fx env/electrical/fx_elec_wire_spark_burst fx misc/fx_zombie_couch_effect fx destructibles/fx_dest_fire_vert fx bio/player/fx_footstep_dust fx bio/player/fx_footstep_water fx bio/player/fx_footstep_sand fx bio/player/fx_footstep_mud fx env/weather/fx_snow_blizzard_intense
// CreateFX Effects fx maps/mp_maps/fx_mp_ray_moon_lg_1sd fx maps/mp_maps/fx_mp_ray_fire_ribbon fx maps/mp_maps/fx_mp_ray_fire_ribbon_med fx maps/mp_maps/fx_mp_ray_moon_lg fx maps/mp_maps/fx_mp_ray_moon_md fx maps/mp_maps/fx_mp_ray_moon_sm
fx maps/mp_maps/fx_mp_light_glow_indoor_short_loop fx maps/mp_maps/fx_mp_light_glow_outdoor_long_loop fx maps/mp_maps/fx_mp_insects_lantern fx maps/mp_maps/fx_mp_light_lamp fx maps/mp_maps/fx_mp_fire_torch_noglow fx maps/zombie/fx_zombie_moon_eclipse fx maps/zombie/fx_zombie_clock_hand fx maps/mp_maps/fx_mp_elec_broken_light_1shot fx maps/mp_maps/fx_mp_light_lamp_no_eo
My map patch .csv:
Code Snippet
Plaintext
// Materials material zombie_electric_shock_overlay material zombie_transporter_overlay
I've noticed that there is no "zombie_springfield" in root\raw\weapons\sp. Could this be the source of the problem? After adding any of the other springfield files in that folder because there wasn't a zombie_springfield, I receive the error "Unknown item 'zombie_colt". Here is the console log.
I've noticed that there is no "zombie_springfield" in root\raw\weapons\sp. Could this be the source of the problem? After adding any of the other springfield files in that folder because there wasn't a zombie_springfield, I receive the error "Unknown item 'zombie_colt". Here is the console log. (Image removed from quote.)
Maybe it just wasn't meant to be?
Thanks.
P.S. What's with the Nicolas Cage background?
that would "also" be a problem yes
it should be in raw/weapon/sp/
would need to copy it to your mod as well
Last Edit: April 01, 2016, 07:22:49 pm by Harry Bo21
Welp, maybe it's time to give up now. I can't find a copy of mod tools that has zombie_springfield. I think I can get by without adding one of the worst guns. Thanks for taking the time to help a Fresh Corpse.
Welp, maybe it's time to give up now. I can't find a copy of mod tools that has zombie_springfield. I think I can get by without adding one of the worst guns. Thanks for taking the time to help a Fresh Corpse.
These are the Springfield weaponfiles:
Located in root/raw/weaponfiles/sp/, just like Harry said