Difference between revisions of "Dynamic array"

From Oldunreal-Wiki
Jump to navigation Jump to search
m (Jumping through hoops.)
(Update to 227i)
 
Line 148: Line 148:




227f:
227i:


  class Luden expands Inventory
  class Luden expands Inventory
Line 158: Line 158:
  exec function AddLaden(string s) // Add 1 more message.
  exec function AddLaden(string s) // Add 1 more message.
  {
  {
  local int I;
  Laden[Array_Size(Laden)] = S;
I = GetArraySize(arrayproperty'Laden'); // Get array size and add 1 more.
Laden[I] = S;
  SaveConfig();
  SaveConfig();
  }
  }
Line 167: Line 164:
  exec function ClearLaden() // Clear all messages.
  exec function ClearLaden() // Clear all messages.
  {
  {
  RemoveArrayIdx( arrayproperty'Laden', GetArraySize(arrayproperty'Laden') );  
  Array_Remove(Laden,Array_Size(Laden) );  
  SaveConfig();
  SaveConfig();
  }
  }
Line 175: Line 172:
  local int I;
  local int I;
   
   
  for(I=0;I<GetArraySize(arrayproperty'Laden');I++)
  for(I=0;I<Array_Size(Laden);I++)
  Pawn(Owner).ClientMessage(I@Laden[I]);
  Pawn(Owner).ClientMessage(I@Laden[I]);
  }
  }
Line 183: Line 180:
  local int I;
  local int I;
 
 
  for(I=GetArraySize(arrayproperty'Laden');I<10;I++)
  for( I=Array_Size(Laden); I<(Array_Size(Laden)+10); I++)
  Laden[I] = "HI";
  Laden[I] = "HI";
  SaveConfig();
  SaveConfig();
Line 201: Line 198:
  local int I;
  local int I;
   
   
  for(I=0;I<GetArraySize(arrayproperty'Laden');I++)
  for(I=0;I<Array_Size(Laden);I++)
  Laden[I] = "HI3";
  Laden[I] = "HI3";
  SaveConfig();
  SaveConfig();
Line 208: Line 205:
  exec function RemoveLaden() // Remove 1 message (last).
  exec function RemoveLaden() // Remove 1 message (last).
  {
  {
  RemoveArrayIdx( arrayproperty'Laden', 1 );
  Array_Remove(Laden, 1 );
  SaveConfig();
  SaveConfig();
  }
  }
Line 214: Line 211:
  exec function RemoveMultiLaden() // Remove 10 messages (last).
  exec function RemoveMultiLaden() // Remove 10 messages (last).
  {
  {
  RemoveArrayIdx( arrayproperty'Laden', 10 ); // Remove 10 messages (last).
  Array_Remove(Laden, Array_Size(Laden)-10, 10 ); // Remove 10 messages (last).
  SaveConfig();
  SaveConfig();
  }
  }
Line 221: Line 218:
  {
  {
  local Nali N;
  local Nali N;
local int I;
   
   
  foreach allactors(class'Nali',N)
  foreach allactors(class'Nali',N)
{
  Laden[Array_Size(Laden)] = string(N);
  I = GetArraySize(arrayproperty'Laden'); // Get array size and add 1 more.
Laden[I] = string(N);
}
  SaveConfig();
  SaveConfig();
  }
  }


Replicate (227f):
Replicate (227i):


  var array<string> ClientLaden;
  var array<string> ClientLaden;
Line 245: Line 238:
  local int I;
  local int I;
 
 
  for(I=0;I<GetArraySize(arrayproperty'Laden');I++)
  for(I=0;I<Array_Size(Laden);I++)
  SendLaden(I, Laden[I]); // To client.
  SendLaden(I, Laden[I]); // To client.
  }
  }
Line 254: Line 247:
  }
  }
   
   
  simulated function string ReturnLaden(int Slot) // Get from client.
  simulated function string ReturnLaden(int Slot) // Get from client. FIXME: This does not work like this.
  {
  {
  local string S;
  local string S;
Line 277: Line 270:
   
   
  // SendAllLaden();
  // SendAllLaden();
  for(I=0;I<GetArraySize(arrayproperty'Laden');I++)
  for(I=0;I<Array_Size(Laden);I++)
  {
  {
  SendLaden(I, Laden[I]);
  SendLaden(I, Laden[I]);

Latest revision as of 19:16, 25 November 2012

class KlondikeInventoryHandler extends KlondikeBaseModule;

struct PlayerInventory
{
var Pawn InvOwner;
var Array<Actor> InvList;
var int InvMax;
var int TravelHealth;
var class<actor> SelectedWeapon;
var class<actor> SelectedItem;
};
var PlayerInventory OriginalInventory[32];
function HandleInventory(Pawn P)
{
	local int i;
	local int x;
	local int Max;
	local pickup NewPickup;
	local weapon NewWeapon;
	local playerpawn PP;

	if (P == None || !p.IsA('PlayerPawn'))
		Return;
	PP=PlayerPawn(P);
	for(i=0; I<32; i++)
	{
		if(OriginalInventory[i].InvOwner != None && OriginalInventory[i].InvOwner == P)
		{
			//log("OMFGWTF"@OriginalInventory[i].InvList[0]);
			Max = OriginalInventory[i].InvMax;
			//x=Max; 
			while(OriginalInventory[i].InvList[x] != None)
			{
				if(OriginalInventory[i].InvList[x].isa('Pickup'))
				{
					NewPickup=Pickup(SpawnAct(OriginalInventory[i].InvList[x].Class,P.Location,P.Rotation,,P,P,OriginalInventory[i].InvList[x],true));
					if (NewPickup != None)
					{
						NewPickup.bHeldItem = true;
						NewPickup.GiveTo(PP);
						if(NewPickup.IsA('Translator'))
							PP.SelectedItem = NewPickup;
						NewPickup.PickupFunction(PP);
						NewPickup.TravelPreAccept();
						NewPickup.TravelPostAccept();
						if(NewPickup.isa('Ammo'))
						{
							Ammo(PP.FindInventoryType(NewPickup.Class)).AddAmmo(Ammo(NewPickup).AmmoAmount);
						}
					}
					else log("fUCK OMG"@OriginalInventory[i].InvList[x].Class@"failed");
				}
				else if(OriginalInventory[i].InvList[x].isa('weapon'))
				{
					NewWeapon=Weapon(SpawnAct(OriginalInventory[i].InvList[x].Class,P.Location,P.Rotation,,P,P,OriginalInventory[i].InvList[x],true));
					if (NewWeapon != None)
					{
						newWeapon.Instigator = PP;
						newWeapon.BecomeItem();
						PP.AddInventory(newWeapon);

						newWeapon.SetSwitchPriority(PP);
						newWeapon.WeaponSet(PP);
						NewWeapon.TravelPreAccept();
						NewWeapon.TravelPostAccept();
					}
					else log("fUCK OMG pickup"@OriginalInventory[i].InvList[x].Class@"failed");
				}
				x++;
				if (OriginalInventory[i].InvList[x] == None)
				{

					PP.PendingWeapon = Weapon(PP.FindInventoryType(OriginalInventory[i].SelectedWeapon));
					if (PP.Weapon != None)
						PP.Weapon.PutDown();
					PP.SelectedItem = Pickup(PP.FindInventoryType(OriginalInventory[i].SelectedItem));
					PP.Health = OriginalInventory[i].TravelHealth;
					Break;
				}
			}
		}
	}
}

function HandleModifyTravelList(Pawn Other,bool bDelete)
{
	local int i;
	local int x;
	local inventory inv;
	local array<Actor> TravelList;
	if (!bDelete)
	{
		for(i=0; I<32; i++)
		{
			if(OriginalInventory[i].InvOwner != None)
				Continue;
			else 
			{
				OriginalInventory[i].InvOwner = Other;
				if (Other.Inventory != None)
				for(inv=Other.Inventory; inv!=None; inv=inv.inventory)
				{
					if (x >= 1 && Inv == Other.Inventory)
						break;
					TravelList[x] = SpawnAct(inv.Class,Vect(65535,65535,65535),,,None,None,inv,true);
					
					TravelList[x].SetCollision(false,false,false);//If vect(0,0,0) is valid.. hide and make it noncollidable just in case.
					TravelList[x].bHidden = True;
					Inventory(TravelList[x]).Inventory = None; //Dereference inventory that will be deleted eventually anyway.
					
					if (TravelList[x].IsA('Weapon'))
						Weapon(TravelList[x]).PickupAmmoCount=0; //Fix ammo count crap.
						
					x++;
				}
				OriginalInventory[i].InvList = TravelList;
				OriginalInventory[i].InvMax = X;
				OriginalInventory[i].SelectedItem = Other.SelectedItem.Class;
				OriginalInventory[i].SelectedWeapon = Other.Weapon.Class;
				OriginalInventory[i].TravelHealth = Other.Health;
				break;
			}
		}
	}
	else if (bDelete)
	{
		if (Other != None && Other.isa('PlayerPawn'))
		{
			for(i=0; I<32; i++)
			{
				if(OriginalInventory[i].InvOwner == Other)
					OriginalInventory[i].InvOwner = None;
				while(OriginalInventory[i].InvList[x] != None)
				{
					OriginalInventory[i].InvList[x].Destroy();
					x++;
				}
				break;
			}
		}
	}
}

defaultproperties
{
}


227i:

class Luden expands Inventory
	config(Luden);

var() config string LadenS[15]; // Normal (static) array. Limits to 15.
var() config array<string> Laden; // Dynamic array. No limit.
 
exec function AddLaden(string s) // Add 1 more message.
{
	Laden[Array_Size(Laden)] = S;
	SaveConfig();
}

exec function ClearLaden() // Clear all messages.
{
	Array_Remove(Laden,Array_Size(Laden) ); 
	SaveConfig();
}

exec function ShowLaden() // Show all messages.
{
	local int I;

	for(I=0;I<Array_Size(Laden);I++)
		Pawn(Owner).ClientMessage(I@Laden[I]);
}

exec function AddMultiLaden() // Add 10 "HI's" more.
{
	local int I;
	
	for( I=Array_Size(Laden); I<(Array_Size(Laden)+10); I++)
		Laden[I] = "HI";
	SaveConfig();
}

exec function ReplaceMultiLaden() // Replace 10 first to "HI2".
{
	local int I;
	
	for(I=0;I<10;I++)
		Laden[I] = "HI2";
	SaveConfig();
}

exec function ReplaceAllLaden() // Replace all messages to "HI3".
{
	local int I;

	for(I=0;I<Array_Size(Laden);I++)
		Laden[I] = "HI3";
	SaveConfig();
}

exec function RemoveLaden() // Remove 1 message (last).
{
	Array_Remove(Laden, 1 );
	SaveConfig();
}

exec function RemoveMultiLaden() // Remove 10 messages (last).
{
	Array_Remove(Laden, Array_Size(Laden)-10, 10 ); // Remove 10 messages (last).
	SaveConfig();
}

exec function NalibinLaden() // Find all Nalis and add them to Laden array.
{	
	 local Nali N;

	 foreach allactors(class'Nali',N)
	 	Laden[Array_Size(Laden)] = string(N);
	 SaveConfig();
}

Replicate (227i):

var array<string> ClientLaden;

replication
{
	reliable if( Role==ROLE_Authority )
		SendLaden, SendAllLaden, ReturnLaden;
}

simulated function SendAllLaden() // Send all messages to client.
{
	local int I;
	
	for(I=0;I<Array_Size(Laden);I++)
		SendLaden(I, Laden[I]); // To client.
}

simulated function SendLaden(int Slot, string S) // Send single message to client.
{
	ClientLaden[Slot] = S;
}

simulated function string ReturnLaden(int Slot) // Get from client. FIXME: This does not work like this.
{
	local string S;
	
	S = ClientLaden[Slot];
	return S;
}

exec function GetLaden(int Slot) // Broadcast single message.
{
	local string S;

	SendLaden(Slot, Laden[Slot]);
	S = ReturnLaden(Slot);
	Pawn(Owner).ClientMessage(S);
}

exec function GetAllLaden() // Broadcast all messages.
{
	local int I;
	local string S;

	// SendAllLaden();
	for(I=0;I<Array_Size(Laden);I++)
	{
		SendLaden(I, Laden[I]);
		S = ReturnLaden[I];
		Pawn(Owner).ClientMessage(S);
	}
}
	
defaultproperties
{
	bAlwaysRelevant=False
	RemoteRole=Role_SimulatedProxy
}