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