Making weapons respawn in mp map ?

Have questions about CoD2 mapping that aren't covered in the tutorials section? Post here!

Moderator: Core Staff

User avatar
<LT>YosemiteSam[NL]
Core Staff
Core Staff
Posts: 2155
Joined: December 7th, 2004, 2:07 am
Location: Netherlands
Contact:

Post by <LT>YosemiteSam[NL] » September 18th, 2007, 8:25 am

aha, ok. I'll check it out when I get home from work today.
I'll get back to ya, thx.

=EDIT=

Tried it but it doesn't work.

User avatar
<LT>YosemiteSam[NL]
Core Staff
Core Staff
Posts: 2155
Joined: December 7th, 2004, 2:07 am
Location: Netherlands
Contact:

Post by <LT>YosemiteSam[NL] » September 24th, 2007, 3:28 pm

Hee drof. I tried the delete(); thing but it doesn't work.
Any other sugestions ?

User avatar
Drofder2004
Core Staff
Core Staff
Posts: 13313
Joined: April 13th, 2005, 8:22 pm
Location: UK, London

Post by Drofder2004 » September 24th, 2007, 6:42 pm

post up your full code (including the delete command) and I will see if I can find where things go wrong.
Image
Virgin Media 20Mb Broadband:
"Perfect for families going online at the same time, downloading movies, online gaming and more."
Borked internet since: 22-07-2010

User avatar
<LT>YosemiteSam[NL]
Core Staff
Core Staff
Posts: 2155
Joined: December 7th, 2004, 2:07 am
Location: Netherlands
Contact:

Post by <LT>YosemiteSam[NL] » September 24th, 2007, 11:44 pm

Code: Select all

main()
{

maps\mp\_load::main();
thread spin();
thread spin2();
thread spin3();
thread spin4();
thread spin5();
thread spin6();
thread spin7();
thread spin8();

WeaponRespawner("weapons", 50);
ambientPlay("ambient_mp_FEI");

game["allies"] = "british"; 
game["axis"] = "german"; 

game["british_soldiertype"] = "airborne"; 
game["british_soldiervariation"] = "normal"; 
game["german_soldiertype"] = "fallschirmjagergrey"; 
game["german_soldiervariation"] = "normal"; 

game["attackers"] = "allies"; 
game["defenders"] = "axis"; 
} 

spin() 
{ 
door = getent("door","targetname");
door1 = getent("door1","targetname");
trigger = getent("door_trig","targetname");
while(1) 
{
trigger waittill ("trigger");
door rotateyaw(90,2);
door1 rotateyaw(-90,2);
door playsound ("doorsound");
door1 waittill("rotatedone");
wait 2;
door rotateto((0, 0, 0), 2);
door1 rotateto((0, 0, 0), 2);
door playsound ("doorsound");
door1 waittill("rotatedone");
}
}

spin2() 
{ 
door = getent("door","targetname");
door1 = getent("door1","targetname");
trigger = getent("doorinside_trig","targetname");
while(1) 
{
trigger waittill ("trigger");
door rotateyaw(-90,2);
door1 rotateyaw(90,2);
door playsound ("doorsound");
door1 waittill("rotatedone");
wait 2;
door rotateto((0, 0, 0), 2);
door1 rotateto((0, 0, 0), 2);
door playsound ("doorsound");
door1 waittill("rotatedone");
}
}

spin3() 
{ 
door2 = getent("door2","targetname");
trigger = getent("door2_trig","targetname");
while(1) 
{
trigger waittill ("trigger");
door2 rotateyaw(-90,2);
door2 playsound ("doorsound");
door2 waittill("rotatedone");
wait 2;
door2 rotateto((0, 0, 0), 2);
door2 playsound ("doorsound");
door2 waittill("rotatedone");
}
}

spin4() 
{ 
door2 = getent("door2","targetname");
trigger = getent("door2inside_trig","targetname");
while(1) 
{
trigger waittill ("trigger");
door2 rotateyaw(90,2);
door2 playsound ("doorsound");
door2 waittill("rotatedone");
wait 2;
door2 rotateto((0, 0, 0), 2);
door2 playsound ("doorsound");
door2 waittill("rotatedone");
}
}

spin5() 
{ 
door3roof = getent("door3roof","targetname");
trigger = getent("door3roof_trig","targetname");
while(1) 
{
trigger waittill ("trigger");
door3roof rotateyaw(-90,2);
door3roof playsound ("doorsound");
door3roof waittill("rotatedone");
wait 2;
door3roof rotateto((0, 0, 0), 2);
door3roof playsound ("doorsound");
door3roof waittill("rotatedone");
}
}

spin6() 
{ 
door3roof = getent("door3roof","targetname");
trigger = getent("door3roofinside_trig","targetname");
while(1) 
{
trigger waittill ("trigger");
door3roof rotateyaw(90,2);
door3roof playsound ("doorsound");
door3roof waittill("rotatedone");
wait 2;
door3roof rotateto((0, 0, 0), 2);
door3roof playsound ("doorsound");
door3roof waittill("rotatedone");
}
}

spin7() 
{ 
door4 = getent("door4","targetname");
door5 = getent("door5","targetname");
trigger = getent("door45_trig","targetname");
while(1) 
{
trigger waittill ("trigger");
door4 rotateyaw(90,2);
door5 rotateyaw(-90,2);
door4 playsound ("doorsound");
door5 waittill("rotatedone");
wait 2;
door4 rotateto((0, 0, 0), 2);
door5 rotateto((0, 0, 0), 2);
door4 playsound ("doorsound");
door5 waittill("rotatedone");
}
}

spin8() 
{ 
door4 = getent("door4","targetname");
door5 = getent("door5","targetname");
trigger = getent("door45inside_trig","targetname");
while(1) 
{
trigger waittill ("trigger");
door4 rotateyaw(-90,2);
door5 rotateyaw(90,2);
door4 playsound ("doorsound");
door5 waittill("rotatedone");
wait 2;
door4 rotateto((0, 0, 0), 2);
door5 rotateto((0, 0, 0), 2);
door4 playsound ("doorsound");
door5 waittill("rotatedone");
}
}

WeaponRespawner(targetname, defaultrespawndelay)
{
weapons = getentarray(targetname, "targetname");
if(weapons.size > 0)
{
for(i=0; i < weapons.size; i++) 
{
if(!isdefined(weapons[i].script_timescale))
weapons[i].script_timescale = defaultrespawndelay;

// kick off a thread to listen for when the item gets picked up
weapons[i] thread weapon_think(weapons[i].script_timescale);
}
}
}

// self = weapon reference
weapon_think(delaytime)
{
// capture important weapon data first to allow us to respawn them
classname = self.classname;
model = self.model;
count = self.count;
org = self.origin;
angles = self.angles;

targetname = self.targetname;

// Wait till the weapon gets picked up
self waittill("trigger");

// Wait the delay before respawn
wait delaytime;

entity delete();

// respawn the weapon
weapon = spawn(classname, org);
weapon.angles = angles;
weapon.count = count;
weapon setmodel(model); 
weapon.script_timescale = delaytime;
weapon.targetname = targetname;

// Kick off a new thread with the new weapon and kill the old one
weapon thread weapon_think(delaytime);
}
Too much maybe :wink:

To recap; I want the weapon, which the player leaves after picking up the spawnable one, to be deleted before respawning the spawnable one.

User avatar
Drofder2004
Core Staff
Core Staff
Posts: 13313
Joined: April 13th, 2005, 8:22 pm
Location: UK, London

Post by Drofder2004 » September 25th, 2007, 12:14 am

Ok, theres a couple of things which I will point out but not solve yet as I need to look into it a bit further...

First.

Code: Select all

WeaponRespawner("weapons", 50);
As far as I am aware, "weapons" is not a valid targetname. Every weapon in the game, has its own targetname, and I am not sure 'weapons' can be used, but again, I need to look into it further.

Second.

Code: Select all

entity delete();
entity must refer to a entity, not literally be called entity. At the moment, the game will not understand what entity is. Entity must be directly related to something.

---
Could you please give me the name of the mod/map that contains the GSC so I can look at the full text and how they used it, it will certainly help me understand exactly how they reference the weapons.
---
Image
Virgin Media 20Mb Broadband:
"Perfect for families going online at the same time, downloading movies, online gaming and more."
Borked internet since: 22-07-2010

User avatar
<LT>YosemiteSam[NL]
Core Staff
Core Staff
Posts: 2155
Joined: December 7th, 2004, 2:07 am
Location: Netherlands
Contact:

Post by <LT>YosemiteSam[NL] » September 25th, 2007, 4:55 pm

entity must refer to a entity, not literally be called entity. At the moment, the game will not understand what entity is. Entity must be directly related to something.
That seems to be the problem, it has to refer to the weapon dropped by the player who picks up the spawnable weapon.

Code: Select all

WeaponRespawner("weapons", 50);
This works fine, weapon is respawned every 50 sec. And I used targetname weapon.

The map which uses this code is called "Fargo"

Here is the gsc of that map;

Code: Select all

main() 
{
	setExpFog(.00015, 0.03, .03, .03, 0);

	maps\mp\mp_fargo_fx::main(); 
	maps\mp\_load::main();

//Set background ambient noise
	ambientPlay("ambient_mp_fargo"); 

//Soldier Settings 
	game["allies"] = "american"; 
	game["axis"] = "german"; 
	game["attackers"] = "allies"; 
	game["defenders"] = "axis"; 
	game["american_soldiertype"] = "africa"; 
	game["german_soldiertype"] = "africa";

//Initialize the weapon respawner.
	WeaponRespawner("weapons", 60);
	WeaponRespawner("weapons_gunroom", 60);

	thread theDOORS(2);

}
	

theDOORS(howoften)
{
// set howoften to 2 for a 50/50 display or higher number for less often. 
   while(1)
   {
   for(d=0; d < 2; d++)
      {
      if(d == 0){
         doors = getentarray("door_move_x", "targetname");
         dir = "movex";
      }else{
         doors = getentarray("door_move_y", "targetname");
         dir = "movey";
      }
         if(doors.size > 0)
         {
            for(i=0; i < doors.size; i++)
            {
               this_num = randomint(howoften);
               if(this_num == 0)
               {
                  if(!isdefined(doors[i].isopen))
                  {
                     doors[i].isopen = "true";
                  }
                  if(doors[i].isopen == "true")
                  {
                     closedoor(doors[i], dir, 44);
                  }
                  else
                  {
                     opendoor(doors[i], dir, 44);
                  }
               }
            }
         }
      }
//   this_wait = randomint(4);
//   this_wait = (this_wait + 1) * 30;
//   iprintlnbold(this_wait);
//   wait (this_wait);
//   causes a random delay of 30, 60, 90, or 120 seconds
     wait (30);
   }
}

closedoor(door, dir, wid){
   if(dir == "movex")
	{
		door movex(wid, 2, .5, .5);
	}else{
		door movey(wid, 2, .5, .5);
	}
	door.isopen = "false";
}

opendoor(door, dir, wid){
	if(dir == "movex")
	{
		door movex(0-wid, 2, .5, .5);
	}else{
		door movey(0-wid, 2, .5, .5);
	}
	door.isopen = "true";
}


	
// Create multiplayer weapons in Radiant as follows:
// Create weapons in the 2d window with right click "weapons" and select a weapon with _mp at the end which is available in mp
// Set the targetname to a value of your choice, e.g. "weapons" and use the same value to kick off your respawners
// Optional: Set count to the number of weapons that spawn at a time, e.g. 3 for three grenades at once
// Optional: set script_timescale to the time in seconds between respawns

// In your main script include the below functions and place an initial call to the WeaponRespawner in the main routine of your map
// A typically call would be: "WeaponRespawner("weapons", 5);" that will manage all entities with targetname weapons and a default respawn delay of 5 seconds

WeaponRespawner(targetname, defaultrespawndelay)
{
// by sentchy
  weapons = getentarray(targetname, "targetname");
  if(weapons.size > 0)
  {
    for(i=0; i < weapons.size; i++)
    {
    if(!isdefined(weapons[i].script_timescale))
    weapons[i].script_timescale = defaultrespawndelay;
    // kick off a thread to listen for when the item gets picked up
    weapons[i] thread weapon_think(weapons[i].script_timescale);
    }
  }
}

// self = weapon reference
weapon_think(delaytime)
{
  // capture important weapon data first to allow us to respawn them
  classname = self.classname;
  model = self.model;
  count = self.count;
  org = self.origin;
  angles = self.angles;

  targetname = self.targetname;

  // Wait till the weapon gets picked up
  self waittill("trigger");

  // Wait the delay before respawn
  wait delaytime;

  // respawn the weapon
  weapon = spawn(classname, org);
  weapon.angles = angles;
  weapon.count = count;
  weapon setmodel(model);
  weapon.script_timescale = delaytime;
  weapon.targetname = targetname;

  // Kick off a new thread with the new weapon and kill the old one
  weapon thread weapon_think(delaytime);
}

All-Killer
CJ Worshipper
CJ Worshipper
Posts: 383
Joined: December 16th, 2005, 6:38 pm

Post by All-Killer » September 25th, 2007, 8:00 pm

There is a discription added to the GSC of that map, you tried that ?
Image

User avatar
<LT>YosemiteSam[NL]
Core Staff
Core Staff
Posts: 2155
Joined: December 7th, 2004, 2:07 am
Location: Netherlands
Contact:

Post by <LT>YosemiteSam[NL] » September 26th, 2007, 10:57 am

you mean the discription in the gsc ?
I understand the discription but there is nothing in there (to my knowledge) for my problem

Post Reply

Who is online

Users browsing this forum: No registered users and 32 guests