Dynamic array

From Oldunreal-Wiki
Revision as of 06:53, 30 March 2011 by Ibnonbin (talk | contribs)
Jump to navigation Jump to search

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 { }


227f:

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.
{
	local int I;

	I = GetArraySize(arrayproperty'Laden'); // Get array size and add 1 more.
	Laden[I] = S;
	SaveConfig();
}

exec function ClearLaden() // Clear all messages.
{
	RemoveArrayIdx( arrayproperty'Laden', GetArraySize(arrayproperty'Laden') ); 
	SaveConfig();
}

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

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

exec function AddMultiLaden() // Add 10 "HI's" more.
{
	local int I;
	
	for(I=GetArraySize(arrayproperty'Laden');I<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<GetArraySize(arrayproperty'Laden');I++)
		Laden[I] = "HI3";
	SaveConfig();
}

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

exec function RemoveMultiLaden() // Remove 10 messages (last).
{
	RemoveArrayIdx( arrayproperty'Laden', 10 ); // Remove 10 messages (last).
	SaveConfig();
}

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

	 foreach allactors(class'Nali',N)
	 {
	 	I = GetArraySize(arrayproperty'Laden'); // Get array size and add 1 more.
	 	Laden[I] = string(N);
	 }
	 SaveConfig();
}

Send to client (227f):

var array<string> ClientLaden;

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

simulated function SendAllLaden() // Send all messages to client.
{
	local int I;
	
	for(I=0;I<GetArraySize(arrayproperty'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.
{
	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<GetArraySize(arrayproperty'Laden');I++)
	{
		s = ReturnLaden[I];
		Pawn(Owner).ClientMessage(S);
	}
}
	
defaultproperties
{
	bAlwaysRelevant=False
	RemoteRole=Role_SimulatedProxy
}