Massassi Forums Logo

This is the static archive of the Massassi Forums. The forums are closed indefinitely. Thanks for all the memories!

You can also download Super Old Archived Message Boards from when Massassi first started.

"View" counts are as of the day the forums were archived, and will no longer increase.

ForumsCog Forum → come on now
come on now
2000-11-02, 9:24 AM #1
Yo. I know someone knows how to fix this problem, so please!!!! help!!! I've been working on this level for 8 months... i want to release it soon!! In my mp level, the kyle.cog looks like this.
Code:
# Jedi Knight Cog Script
#
# KYLE.COG
#
# Main script for the player. Handles things like saber info,
# saber blocking animations, invulnerability at respawn, etc.
#
# [YB & CYW]
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved

symbols

thing       player                           local

int         nextBlock=0                      local
int         bin                              local
int         rank                             local

int         force_blinding=0                 local
int         blindingEffectHandle=-1          local
int         PulledWeapon                     local

int         playersector                     local
vector      playerpos                        local
int         bub                              local

template    tpl=+FPBryarPistol               local
template    tpl1=+FPBryarPistol              local
template    tpl2=+FPBryarPistol              local
template    tpl3=+FPSTrifle                  local
template    tpl4=+FPDetonator                local
template    tpl5=+FPCrossbow                 local
template    tpl6=+FPRepeaterGun              local
template    tpl7=+FPRailGun                  local
template    tpl8=+FPSeqCharge                local
template    tpl9=+FPConcRifle                local

template    smoke_tpl=+heavysmoke            local
int         smoke                            local

template    teleport_particles=+telesparks   local
sound       teleportsnd=ForceThrow01.WAV     local

template    bubble_tpl=bubble                local
template    bubble_tpl2=bubble2              local
template    bubble_tpl3=bubble3              local

template    splash_tpl=+watersplash          local
template    splash_tpl2=+watersplash2        local
int         a_splash                         local
int         sender                           local
int         source                           local

keyframe    povBlockAnim0=SabVblk0.key       local
keyframe    povBlockAnim1=SabVblk1.key       local
keyframe    povBlockAnim2=SabVblk2.key       local

keyframe    blockAnim0=KYblock0.key          local
keyframe    blockAnim1=KYblock1.key          local
keyframe    blockAnim2=KYblock2.key          local

int         dummy=0                          local
int         blockPOVTrack=-1                 local
int         blockTrack=-1                    local

int         griptrackID=-1                   local

message     startup
message     killed
message     newplayer
message     timer
message     blocked
message     skill
message     damaged
message     splash
message     user0

end

# ========================================================================================

code

startup:
   player = GetLocalPlayerThing();

   if(!IsMulti()) call init_kyle;

   // Bubbles
   if(IsMulti())
      SetTimerEx(4 + 5 * rand(), 2, 0, 0);
   else
      SetTimerEx(2 + 5 * rand(), 2, 0, 0);

   Return;

# ........................................................................................

killed:
   if(player != GetSenderRef()) Return;

   if(IsMulti())
   {
      CreateBackpack(player);
      ClearActorFlags(player, 0x2000);
   }

   // clean up force powers stuff
   if(blindingEffectHandle!=-1)
   {
      freeColorEffect(blindingEffectHandle);
      blindingEffectHandle = -1;
   }
   ClearActorFlags(player, 0x800);
   KillTimerEx(27);
   force_blinding = 0;

   ClearActorFlags(player, 0x40000);

   if(griptrackID != -1)
   {
      StopKey(player, griptrackID, 0.1);
      griptrackID = -1;
   }
   
   Return;

# ........................................................................................

damaged:
   if(GetParam(1) == 32) call make_bubbles;

   ReturnEx(GetParam(0));
   Return;

# ........................................................................................

make_bubbles:
   playersector = GetThingSector(player);
   playerpos    = VectorAdd(GetThingPos(player), '0 0 0.075');

   for(bub = 1; bub < 1 + 3 * rand(); bub = bub + 1)
   {
      CreateThingAtPosNR(bubble_tpl[3 * rand()], playersector, VectorAdd(playerpos, VectorScale(VectorNorm(VectorSet(rand()-0.5, rand()-0.5, rand()-0.5)), 0.05)), '0 0 0');
      Sleep(0.05);

      // Don't create too many bubbles over the network...
      if(!IsMulti())
      {
         CreateThingAtPos(bubble_tpl3, playersector, VectorAdd(playerpos, VectorScale(VectorNorm(VectorSet(rand()-0.5, rand()-0.5, rand()-0.5)), 0.05)), '0 0 0');
         Sleep(0.05);
      }
   }

   Return;

# ........................................................................................

newplayer:

   call init_kyle;

   // If it's multiplayer
   if(IsMulti()) call init_multi_kyle;

   // Start Bubbles
   SetTimerEx(2 + 5 * rand(), 2, 0, 0);

   Return;

# ........................................................................................

timer:
   if(GetSenderId() == 1)                    // Invulnerable for a while
   {
      // jkSetInvulnerable(GetParam(0), 0);
      ClearActorFlags(GetParam(0), 8);
      Return;
   }
   else
   if(GetSenderId() == 2)                    // Bubbles check
   {
      if(GetThingHealth(player) < 1) Return;

      if((GetThingFlags(player) & 0x2000000) && !(GetPhysicsFlags(player) & 0x100000))
         call make_bubbles;

      if(IsMulti())
         SetTimerEx(4 + 5 * rand(), 2, 0, 0);
      else
         SetTimerEx(2 + 5 * rand(), 2, 0, 0);

      Return;
   }
   else
   if(GetSenderId() == 24)
   {
      // A pulled weapon must be made takeable again
      SetCollideType(GetParam(0), 1);
      Return;
   }
   else
   if(GetSenderId() == 27)
   {
      if(blindingEffectHandle!=-1)
      {
         freeColorEffect(blindingEffectHandle);
         blindingEffectHandle = -1;
      }
      // Get the effect ramping down
      AddDynamicTint(player, 200 + 8 * rank, 210 + 10 * rank, 200 + 8 * rank);
      ClearActorFlags(player, 0x800);
      force_blinding = 0;
      Return;
   }
   else
   if(GetSenderId() == 31)
   {
      if(griptrackID != -1)
      {
         StopKey(player, griptrackID, 0.1);
         griptrackID = -1;
      }
      ClearActorFlags(player, 0x40000);
      Return;
   }

   Return;

# ........................................................................................

blocked:
   if(player != GetSenderRef()) Return;

   if (blockPOVTrack != -1)
   {
      jkStopPOVKey( player, blockPOVTrack, 0.1 );
      blockPOVTrack = -1;
   }
   if (blockTrack != -1)
   {
      StopKey( player, blockTrack, 0.1 );
      blockTrack = -1;
   }

   // PlaySoundThing(hitSound14, player, 1.0, -1, -1, 0);
   blockPOVTrack = jkPlayPOVKey(player, povBlockAnim0[nextBlock], 2, 0x1a);
   blockTrack = PlayKey(player, blockAnim0[nextBlock], 2, 0x1a);

   nextBlock = nextBlock + 1;
   if(nextBlock > 2)
      nextBlock = 0;

   Return;

# ........................................................................................

// This message is sent from the weap_saber.cog
user0:
   if (blockPOVTrack != -1)
   {
      jkStopPOVKey( player, blockPOVTrack, 0.1 );
      blockPOVTrack = -1;
   }
   if (blockTrack != -1)
   {
      StopKey( player, blockTrack, 0.1 );
      blockTrack = -1;
   }
   Return;

# ........................................................................................

skill:

   // player might be dead when skill: arrives over the net...
   if(GetThingHealth(player) <= 0) Return;

   // Handle multiplayer force power effects
   bin = GetParam(0);
   rank = GetParam(1);

   if(bin == 24)                             // Force Pull
   {
      ReturnEx(0);
      if(!IsInvActivated(player, 28))        // Absorb makes player immune to Pull
      {
         if((GetCurWeapon(player) != 1) && (GetCurWeapon(player) != 10))
         {
            // Create a powerup corresponding to the current weapon
            PulledWeapon = CreateThingAtPos(tpl[GetCurWeapon(player)], GetThingSector(player), GetThingPos(player), '0 0 0');

            // Make the powerup collide later
            SetTimerEx(0.2, 24, PulledWeapon, 0);

            // Duplicate for internet games
            SetTimerEx(0.25, 24, PulledWeapon, 0);

            // Throw the powerup at the player
            ApplyForce(PulledWeapon, VectorScale(VectorNorm(VectorSub(GetThingPos(GetSourceRef()), GetThingPos(player))), 30));

            // Remove the weapon from the player
            ChangeInv(player, GetCurWeapon(player), -1);

            // Switch to fists
            SelectWeapon(player, 1);

            ReturnEx(1);
         }
      }

      Return;
   }
   else
   if (bin == 27)                            // Force Blinding
   {
      if((!force_blinding) && (!IsInvActivated(player, 23)))   // Seeing makes player immune to Blinding
      {
         force_blinding = 1;
         blindingEffectHandle = newColorEffect(0, 0, 0, 0, 0, 0, 200 + 8 * rank, 210 + 10 * rank, 200 + 8 * rank, 1.0);
         SetActorFlags(player, 0x800);
         SetTimerEx(4 * rank, 27, player, 0);
         ReturnEx(1);
      }
      else
      {
         ReturnEx(0);
      }

      Return;
   }
   else
   if (bin == 31)                            // Force Grip
   {
      if(!IsInvActivated(player, 29))        // Protection makes player immune to Grip
      {
         griptrackID = PlayMode(player, 25);
         SetActorFlags(player, 0x40000);

         // Print("You are taking Grip damage");
         jkPrintUNIString(player, 300);
         DamageThing(player, 2 * rank, 0x8, GetSourceRef());
         SetTimerEx(0.5, 31, player, 0);
         ReturnEx(1);
      }
      else
      {
         ReturnEx(0);
      }

      Return;
   }
   else
   if (bin == 34)                            // Deadly Sight
   {
      // Print("You are taking Deadly Sight damage");
      jkPrintUNIString(player, 301);
      DamageThing(player, 4 * rank, 0x8, GetSourceRef());
      smoke = CreateThingAtPosNR(smoke_tpl, GetThingSector(player), GetThingPos(player), '0 0 0');
      // Raise the tint above the normal damage tint
      if(GetCurrentCamera() == 0)
         AddDynamicTint(player, 0.15, 0.0, 0.07);
      ReturnEx(1);
      Return;
   }

   ReturnEx(-1);
   Return;

# ........................................................................................

splash:
   // splash: messages are only sent to the local player's cogs
   // (class cog and capture cog) for performance reasons...

   sender = GetSenderRef();
   source = GetSourceRef();

   // actor or player ?
   if((GetThingType(sender) == 2) | | (GetThingType(sender) == 10))
   {
      // whatever source (i.e. enter or leave, don't care)
      a_splash = CreateThingAtPosNR(splash_tpl2, GetThingSector(sender), GetThingPos(sender), '0 0 0');
   }
   // these are mostly the projectiles...
   else
   {
      // on entering only
      if(source == 1)
         // not if player is submerged, but still do it if he's on the surface
         if(!(GetThingFlags(player) & 0x2000000) | | (GetPhysicsFlags(player) & 0x100000))
            a_splash = CreateThingNR(splash_tpl, sender);
   }

   Return;

# ........................................................................................

init_kyle:
   SetActorFlags(player, 8);
   SetTimerEx(1.50, 1, player, 0);

   // Set Health to full
   SetThingHealth(player, 100);

   // Set Mana to full
   SetInv(player, 14, GetInv(player, 20) * 50);

   // Set Shields to 100 minimum
   if(GetInv(player, 60) < 100) SetInv(player, 60, 100);

   // Set Battery to 100 minimum
   if(GetInv(player, 13) < 100) SetInv(player, 13, 100);

   // Set the power boost to 1.0
   SetInv(player, 63, 1.0);

   // When player starts, give him fists, and a bryar.
   SetInv(player, 1, 1.0);
   SetInv(player, 2, 1.0);

   // Give 50 energy minimum
   if(GetInv(player, 11) < 50) SetInv(player, 11, 50.0);

   // Bacta
   if(GetInv(player, 40) == 0)
      SetInvAvailable(player, 40, 0);
   else
      SetInvAvailable(player, 40, 1);

   // IR Goggles
   if(GetInv(player, 41))
      SetInvAvailable(player, 41, 1);
   else
      SetInvAvailable(player, 41, 0);
   SetInvActivated(player, 41, 0);

   // Field Light
   SetInv(player, 42, 1);
   SetInvAvailable(player, 42, 1);
   SetInvActivated(player, 42, 0);
   ClearActorFlags(player, 4);

   // No blue key
   SetInv(player, 47, 0);
   SetInvAvailable(player, 47, 0);

   jkEndTarget();

   Return;

# ........................................................................................

init_multi_kyle:

   // Set Weapons
   SetInv(player, 1, 1.0);
   SetInv(player, 2, 1.0);
   SetInv(player, 3, 0.0);
   SetInv(player, 4, 0.0);
   SetInv(player, 5, 0.0);
   SetInv(player, 6, 0.0);
   SetInv(player, 7, 0.0);
   SetInv(player, 8, 0.0);
   SetInv(player, 9, 0.0);
   SetInv(player, 10, 1.0);

   // Set Ammo
   SetInv(player, 11, 50.0);
   SetInv(player, 12, 0.0);
   SetInv(player, 15, 0.0);

   // Remove bacta tank and IR goggles
   SetInv(player, 40, 0);
   SetInv(player, 41, 0);
   SetInvAvailable(player, 40, 0);
   SetInvAvailable(player, 41, 0);    

   // No blue key
   SetInv(player, 47, 0);
   SetInvAvailable(player, 47, 0);

   // Set shields to 100
   SetInv(player, 60, 100);

   // Do respawn effects
   dummy = CreateThingAtPos(teleport_particles, GetThingSector(player), GetThingPos(player), '0 0 0');
   dummy = PlaySoundThing(teleportsnd, player, 1.0, -1, -1, 0x180);

   SetFireWait(player, -1);
   SetMountWait(player, 0);
   SetCurInvWeapon(player, 0);
   SelectWeapon(player, AutoSelectWeapon(player, 1));
   
   Return;

end

But there are still problems with the blue key (bin 47). When the host has the key, others can use it, even though they don't have it, and if host does not have it, players cannot use key. This has to be a very easy fix, I just don't know how. PLEASE HELP!!!

------------------
Last one to vote is a rotten egg!!
2000-11-02, 1:10 PM #2
It sounds as though the door cog you are using the key with is not MP compatible. It's got little to do with the kyle cog at all.

Post the door cog, and we'll show you where the problem is.

Cheers...

Raynar


------------------
... the Jedi I admire the most, met up with Darth Maul, now he's toast ...
Rbots - a project to develop a working Bot for Jedi Knight... download the latest development version here
Pagewizard_YKS: "making your own lightsaber doesn't make you a nerd... "
Raynar - the man with a 10.75" ePenis
2000-11-02, 5:35 PM #3
ok... this cog is not for a door, it's a stargate...
Code:
# Jedi Knight COG script
# stargate.cog
#
# An impassable wall turns into a HOMming, passable
# "stargate" when a console is activated, makes a 3do visable, then returns
# to normal after a delay
#
# Spec: JK_addict
# Author: Mohican, JK_addict
#
# Not supported by LEC
#
symbols

message startup
message activated
message timer
message gate_on
message gate_off

thing console linkid=1 # Switch thing
surface stargate # Stargate surface
flex delay # How long stargate stays active

sound onSound # Activation sound
sound offSound # Deactivation sound
sound stargateSound # Played while stargate is active

flex consoleSoundMaxDist = -1 # Max distance console sounds carry
flex stargateSoundMaxDist = -1 # Max distance stargate sound carries

int keyBin = -1 # Item bin number for the stargate key (optional)

thing surface # Surface of stargate

int channel1 local
int channel2 local
int channel3 local

flex consoleLoudDist local # Range within which console sounds play at loud volume
flex consoleMedDist local # Range within which console sounds play at medium volume
flex stargateLoudDist local # Range within which stargate sound plays at loud volume
flex stargateMedDist local # Range within which stargate sound plays at medium volume

#vector consolePos local # Position of console
vector stargateCenter local # Center of stargate surface

thing player local

end


code


startup:
	//Disable "render past adjoin" so the surface will HOM
	//when rendering is disabled
	ClearAdjoinFlags(stargate, 0x1);
	ClearThingFlags(surface, 0x1);
       call gate_off;

	//Calculate ranges at which sounds begin to "fade out"
	if(consoleSoundMaxDist > 0) {

		consoleLoudDist = consoleSoundMaxDist / 3;
		consoleMedDist = consoleLoudDist * 2;
	}
	if(stargateSoundMaxDist > 0) {

		stargateLoudDist = stargateSoundMaxDist / 3;
		stargateMedDist = stargateLoudDist * 2;
	}

	//Get the points from which sounds will originate
	//consolePos = GetThingPos(console);
	stargateCenter = SurfaceCenter(stargate);

	player = GetLocalPlayerThing();

	return;


activated:
	//Message not generated by console
	if(GetSenderId() != 1) {

		return;
	}

	//Console already activated
	if(GetFaceGeoMode(stargate) == 0) {

		return;
	}

	//Key required and not in player's possession
	if(keyBin != -1 && GetInv(player, keyBin) !=  1.0) {

		return;
	}

	//If a sound range has been specified for the console...
	if(consoleSoundMaxDist > 0) {

		//Play three copies of "on" sound w/decreasing volumes, audible
		//at successively greater distances from the source
		PlaySoundPos(onSound, stargateCenter, 1, -1, consoleLoudDist, 0);
		PlaySoundPos(onSound, stargateCenter, .66, consoleLoudDist, consoleMedDist, 0);
		PlaySoundPos(onSound, stargateCenter, .33, consoleMedDist, consoleSoundMaxDist, 0);
	}
	else {

		//Play one copy of the sound, audible everywhere
		PlaySoundPos(onSound, stargateCenter, 1, -1, -1, 0);
	}

	//If a sound range has been specified for the stargate...
	if(stargateSoundMaxDist > 0) {

		//Play three copies of stargate sound w/decreasing volumes, audible
		//at successively greater distances from the source, and make the
		//sound loop continuously
		channel1 = PlaySoundPos(stargateSound, stargateCenter, 1, -1, stargateLoudDist, 0x1);
		channel2 = PlaySoundPos(stargateSound, stargateCenter, .66, stargateLoudDist, stargateMedDist, 0x1);
		channel3 = PlaySoundPos(stargateSound, stargateCenter, .33, stargateMedDist, stargateSoundMaxDist, 0x1);
	}
	else {

		//Play one copy of the sound, audible everywhere, looping
		//continuously
		channel1 = PlaySoundPos(stargateSound, stargateCenter, 1, -1, -1, 0x1);
	}
	call gate_on;
	SetTimer(delay);

	return;


timer:

	//If a sound range has been specified for the console...
	if(consoleSoundMaxDist > 0) {

		//Play three copies of "off" sound w/decreasing volumes, audible
		//at successively greater distances from the source
		PlaySoundPos(offSound, stargateCenter, 1, -1, consoleLoudDist, 0);
		PlaySoundPos(offSound, stargateCenter, .66, consoleLoudDist, consoleMedDist, 0);
		PlaySoundPos(offSound, stargateCenter, .33, consoleMedDist, consoleSoundMaxDist, 0);
	}
	else {

		//Play one copy of the sound, audible everywhere
		PlaySoundPos(offSound, stargateCenter, 1, -1, -1, 0);
	}

	//Kill the stargate sound
	StopSound(channel1, 0);

	//If a sound range has been specified for the stargate, kill
	//the second and third copies of the sound as well
	if(stargateSoundMaxDist > 0) {

		StopSound(channel2, 0);
		StopSound(channel3, 0);
	}

	call gate_off;

	return;


gate_on:
	//Make surface passable
	SetAdjoinFlags(stargate, 0x2);
	//Make HOM
	SetFaceGeoMode(stargate, 0);
                  //Make 3do Visible and emit light
       ClearThingFlags(surface, 0x10);
       SetThingFlags(surface, 0x1);
	return;


gate_off:
	//Make surface impassable
	ClearAdjoinFlags(stargate, 0x2);
	//No HOM
	SetFaceGeoMode(stargate, 4);
       //Make 3do Invisible and dark
       SetThingFlags(surface, 0x10);
       ClearThingFlags(surface, 0x1);
	return;


end

do i still need the code in kyle.cog that takes away the key at player respawn? The gate works fine for everyone, the problem seems to be in the possession of the key, and who can use the key. May be wrong though.

------------------
Last one to vote is a rotten egg!!

↑ Up to the top!