SRL Archive - Reflection Development

Inventory and new Reflection Setup!


Drakan

2010-05-28 18:22:49

Hello everyone! I've been very busy today working on our new Inventory.simba! Most of the functions I was able to just write in notepad during study hall today becuase I forgot my flashdrive :P But none-the-less, I finished Inventory.simba up and committed it to the SVN.

I have also changed Reflection.simba. Now it will run the SetupSRL and check if the hooks are outdated. It's now easier to add reflection to your script than before! Here is a test script to show you how simple it is:


program Test;
{$i srl/srl/reflection/Reflection.simba}

begin
SetupReflection;

R_DropItemsButPartName('pickaxe');
end.

Drop by the SVN and check these new files out! For those of you too lazy, here's Inventory.simba:

type
TInvItem = record
ID, StackSize, Slot: integer;
Name: String;
Actions: TStringArray;
end;

TInvItemArray = array of TInvItem;

{*******************************************************************************
function NullInvItem: TInvItem;
By: Drags111
Description: Returns a "null" inventory item.
*******************************************************************************}
function NullInvItem: TInvItem;
begin
Result.ID := 0;
Result.StackSize := 0;
Result.Name := '';
Result.Actions := [];
end;

{*******************************************************************************
function TrimInvName(Name: string): String;
By: Drags111
Description: Gets rid of the <col=42c3df> crap from the names of items.
*******************************************************************************}
function TrimInvName(Name: string): String;
begin
Result := (Copy(Name, Pos('>', Name)+1, Length(Name) - Pos('>', Name)+1));
end;

{*******************************************************************************
function GetActionList(Itm, Actions: integer): TStringArray;
By: Drags111
Description: Returns the list of actions you can do with specific items.
(Does not return "Use").
*******************************************************************************}
function GetActionList(Itm, Actions: integer): TStringArray;
var
i, l, temp: integer;
str: string;
begin
l := (SmartGetFieldArraySize(Actions, '', 1));
for i := 0 to l-1 do
begin
temp := SmartGetFieldArrayObject(Itm, hook_interface_GetActions, i);
str := GetJavaString(temp, 255);
if not(str = '')then
begin
SetLength(Result, Length(Result)+1);
Result[High(Result)] := str;
end;
end;
end;

{*******************************************************************************
function GetInvItemAt(slot: integer): TInvItem;
By: Drags111
Description: Returns a TInvItem from the specific slot. If slot is empty, it
returns NullInvItem;
*******************************************************************************}
function GetInvItemAt(slot: integer): TInvItem;
var
Inv, Itm, Name, acts: integer;
begin
if not ValidInterface(149)then exit;
GameTab(25);
Inv := GetInterface(149, 0);
Itm := SmartGetFieldArrayObject(Inv, hook_interface_GetChildren, slot-1);
Result.ID := SmartGetFieldInt(Itm, hook_interface_GetID);
if(Result.ID > 0)then
begin
Result.StackSize := SmartGetFieldInt(Itm, hook_interface_GetStack);
Result.Slot := slot;
Name := SmartGetFieldObject(Itm, hook_interface_GetName);
Result.Name := TrimInvName(GetJavaString(Name, 255));
acts := SmartGetFieldObject(Itm, hook_interface_GetActions);
Result.Actions := GetActionList(Itm, acts);
end else
Result := NullInvItem;
SmartFreeObject(Inv);
SmartFreeObject(Itm);
SmartFreeObject(Name);
SmartFreeObject(Acts);
end;

{*******************************************************************************
function GetInventoryItems: TInvItemArray;
By: Drags111
Description: Returns an array of all of the inv items in the inventory.
*******************************************************************************}
function GetInventoryItems: TInvItemArray;
var
i: integer;
begin
for i := 1 to 28 do
if not(GetInvItemAt(i) = NullInvItem)then
begin
SetLength(Result, Length(Result)+1);
Result[High(Result)] := GetInvItemAt(i);
end;
end;

{*******************************************************************************
function GetItemStackSizeAt(slot: integer): integer;
By: Drags111
Description: Gets the stack size at the specific slot.
*******************************************************************************}
function GetItemStackSizeAt(slot: integer): integer;
var
Temp: TInvItem;
begin
Temp := GetInvItemAt(slot);
Result := Temp.StackSize;
end;

{*******************************************************************************
function GetItemIDAt(slot: integer): integer;
By: Drags111
Description: Gets the ID of an item at a specific slot.
*******************************************************************************}
function GetItemIDAt(slot: integer): integer;
var
Temp: TInvItem;
begin
Temp := GetInvItemAt(slot);
Result := Temp.ID;
end;

{*******************************************************************************
function GetItemNameAt(slot: integer): String;
By: Drags111
Description: Gets the name of an item at a specific slot.
*******************************************************************************}
function GetItemNameAt(slot: integer): String;
var
Temp: TInvItem;
begin
Temp := GetInvItemAt(slot);
Result := Temp.Name;
end;

{*******************************************************************************
function R_InvCount: integer;
By: Drags111
Description: Counts the number of items in the inventory.
*******************************************************************************}
function R_InvCount: integer;
begin
Result := Length(GetInventoryItems);
end;

{*******************************************************************************
function R_ItemIDExists(ID: Integer): boolean;
By: Drags111
Description: Returns true if the ID is found at least once in the inventory.
*******************************************************************************}
function R_ItemIDExists(ID: Integer): boolean;
var
i: integer;
Temp: TInvItem;
begin
Result := true;
for i := 1 to 28 do
begin
Temp := GetInvItemAt(i);
if(Temp.ID = ID)then
exit;
end;
Result := false;
end;

{*******************************************************************************
function R_ItemNameExists(Name: String): boolean;
By: Drags111
Description: Returns true if the name is found at least once in the inventory.
*******************************************************************************}
function R_ItemNameExists(Name: String): boolean;
var
i: integer;
Temp: TInvItem;
begin
Result := true;
for i := 1 to 28 do
begin
Temp := GetInvItemAt(i);
if(Lowercase(Temp.Name) = Lowercase(Name))then
exit;
end;
Result := false;
end;

{*******************************************************************************
function R_ItemPartNameExists(PartName: String): boolean;
By: Drags111
Description: Returns true if a partial name is found in the inventory.
EXAMPLE: R_ItemPartNameExists('pickaxe') will search for any item
that has the word 'pickaxe' in it's name. (iron pickaxe, bronze
pickaxe, etc.)
*******************************************************************************}
function R_ItemPartNameExists(PartName: String): boolean;
var
i: integer;
Temp: TInvItem;
begin
Result := true;
for i := 1 to 28 do
begin
Temp := GetInvItemAt(i);
if(Pos(lowercase(PartName), lowercase(Temp.Name)) > 0)then
Exit;
end;
Result := false;
end;

{*******************************************************************************
function R_ItemExists(Slot: integer): boolean;
By: Drags111
Description: Returns true if an item exists at the specified slot.
*******************************************************************************}
function R_ItemExists(Slot: integer): boolean;
var
Temp: TInvItem;
begin
Temp := GetInvItemAt(slot);
Result := not(Temp = NullInvItem);
end;

{*******************************************************************************
function R_ClickItemID(ID: Integer; Left: Boolean; Action: String): boolean;
By: Drags111
Description: Clicks the first item in the inventory with the ID, and if left is
set to true, Left clicks and performs the action. Otherwise, right
clicks. Ex: R_ClickItemID(123, false, 'Wield');
OR
R_ClickItemID(123, true, ''); //Left clicks (use).
*******************************************************************************}
function R_ClickItem(Slot: Integer; Left: Boolean; Action: String): boolean;
var
i: integer;
item: TInvItem;
begin
Result := false;
Item := GetInvItemAt(i);
if(Item = NullInvItem)then Exit;
case Left of
true: begin
MouseItem(i, true);
Result := True;
end;
false: begin
MouseItem(i, false);
Result := R_ChooseOption(Action);
end;
end;
end;

{*******************************************************************************
function R_ClickItemID(ID: Integer; Left: Boolean; Action: String): boolean;
By: Drags111
Description: Clicks the first item in the inventory with the ID, and if left is
set to true, Left clicks and performs the action. Otherwise, right
clicks. Ex: R_ClickItemID(123, false, 'Wield');
OR
R_ClickItemID(123, true, ''); //Left clicks (use).
*******************************************************************************}
function R_ClickItemID(ID: Integer; Left: Boolean; Action: String): boolean;
var
i: integer;
item: TInvItem;
begin
for i := 1 to 28 do
begin
Item := GetInvItemAt(i);
if(Item.ID = ID)then
begin
case Left of
true: begin
MouseItem(i, true);
Result := True;
Exit;
end;
false: begin
MouseItem(i, false);
Result := R_ChooseOption(Action);
if Result then Exit;
end;
end;
end;
end;
end;

{*******************************************************************************
function R_ClickItemName(Name: String; Left: boolean; Action: String): boolean;
By: Drags111
Description: Clicks the first item in the inventory with the Name, and if left is
set to true, Left clicks and performs the action. Otherwise, right
clicks. Ex: R_ClickItemName('iron ore', false, 'drop');
OR
R_ClickItemName(bucket, true, ''); //Left clicks (use).
*******************************************************************************}
function R_ClickItemName(Name: String; Left: boolean; Action: String): boolean;
var
i: integer;
item: TInvItem;
begin
for i := 1 to 28 do
begin
Item := GetInvItemAt(i);
if(Lowercase(Item.Name) = lowercase(name))then
begin
case Left of
true: begin
MouseItem(i, true);
Result := True;
Exit;
end;
false: begin
MouseItem(i, false);
Result := R_ChooseOption(Action);
if Result then Exit;
end;
end
end;
end;
end;

{*******************************************************************************
procedure R_DropItem(Slot: integer);
By: Drags111
Description: Drops the item at the slot.
*******************************************************************************}
procedure R_DropItem(Slot: integer);
var
mt, t: integer;
begin
MarkTime(mt);
while(R_ItemExists(slot) and (TimeFromMark(mt) < 5000))do
begin
MouseItem(slot, false);
R_ChooseOption('drop');
MarkTime(t);
while(R_ItemExists(slot) and (TimeFromMark(t) < 1500))do
wait(25+Random(25));
end;
end;

{*******************************************************************************
procedure R_DropAllItems;
By: Drags111
Description: Drops all items in the inventory.
*******************************************************************************}
procedure R_DropAllItems;
var
i: integer;
begin
for i := 1 to 28 do
R_DropItem(i);
end;

{*******************************************************************************
procedure R_DropAllItemsID(id: integer);
By: Drags111
Description: Drops all items in the inventory with the specified ID.
*******************************************************************************}
procedure R_DropAllItemsID(id: integer);
var
i: integer;
item: TInvItem;
begin
for i := 1 to 28 do
begin
item := GetInvItemAt(i);
if(item.ID = ID)then
R_DropItem(i);
end;
end;

{*******************************************************************************
procedure R_DropAllItemsName(Name: String);
By: Drags111
Description: Drops all items in the inventory with the specified name.
*******************************************************************************}
procedure R_DropAllItemsName(Name: String);
var
i: integer;
item: TInvItem;
begin
for i := 1 to 28 do
begin
item := GetInvItemAt(i);
if(lowercase(item.Name) = lowercase(Name))then
R_DropItem(i);
end;
end;

{*******************************************************************************
procedure R_DropAllItemsPartName(PartName: String);
By: Drags111
Description: Drops all items in the inventory that contain the specified name.
Example: R_DropAllItemsPartName('ore');
*******************************************************************************}
procedure R_DropAllItemsPartName(PartName: String);
var
i: integer;
item: TInvItem;
begin
for i := 1 to 28 do
begin
item := GetInvItemAt(i);
if(Pos(lowercase(PartName), lowercase(item.Name)) > 0)then
R_DropItem(i);
end;
end;

{*******************************************************************************
procedure R_DropItemsButSlotEx(slots: TIntegerArray);
By: Drags111
Description: Drops all items in the inventory except those in the specified slots.
*******************************************************************************}
procedure R_DropItemsButSlotEx(slots: TIntegerArray);
var
i: integer;
begin
for i := 1 to 28 do
begin
if(InIntArray(slots, i))then
continue;
R_DropItem(i);
end;
end;

{*******************************************************************************
procedure R_DropItemsButSlot(slot: integer);
By: Drags111
Description: Drops all items in the inventory except the one in the specified slot.
*******************************************************************************}
procedure R_DropItemsButSlot(slot: integer);
begin
R_DropItemsButSlotEx([slot]);
end;

{*******************************************************************************
procedure R_DropItemsButIDEx(ids: TIntegerArray);
By: Drags111
Description: Drops all items in the inventory except those w/ the specified IDs.
*******************************************************************************}
procedure R_DropItemsButIDEx(ids: TIntegerArray);
var
i: integer;
item: TInvItem;
begin
for i := 1 to 28 do
begin
Item := GetInvItemAt(i);
if(InIntArray(IDs, Item.ID))then
continue;
R_DropItem(i);
end;
end;

{*******************************************************************************
procedure R_DropItemsButID(id: integer);
By: Drags111
Description: Drops all items in the inventory except those w/ the specified ID.
*******************************************************************************}
procedure R_DropItemsButID(id: integer);
begin
R_DropItemsButIDEx([id]);
end;

{*******************************************************************************
procedure R_DropItemsButNameEx(Names: TStringArray);
By: Drags111
Description: Drops all items in the inventory except those w/ the specified Names.
*******************************************************************************}
procedure R_DropItemsButNameEx(Names: TStringArray);
var
i: integer;
item: TInvItem;
begin
for i := 1 to 28 do
begin
Item := GetInvItemAt(i);
if(InStrArr(Item.Name, Names, false))then
continue;
R_DropItem(i);
end;
end;

{*******************************************************************************
procedure R_DropItemsButName(Name: String);
By: Drags111
Description: Drops all items in the inventory except those w/ the specified Name.
*******************************************************************************}
procedure R_DropItemsButName(Name: String);
begin
R_DropItemsButNameEx([Name]);
end;

{*******************************************************************************
procedure R_DropItemsButPartNameEx(PartNames: TStringArray);
By: Drags111
Description: Drops all items in the inventory except those w/ the specified
partial names. Example: R_DropItemsButPartNameEx('pickaxe');
*******************************************************************************}
procedure R_DropItemsButPartNameEx(PartNames: TStringArray);
var
i, z: integer;
Item: TInvItem;
Cont: boolean;
begin
for i := 1 to 28 do
begin
Item := GetInvItemAt(i);
cont := false;
for z := 0 to High(PartNames) do
if(Pos(PartNames[z], Item.Name)> 0)then
cont := true;
if cont then
continue;
R_DropItem(i);
end;
end;

{*******************************************************************************
procedure R_DropItemsButPartName(PartName: String);
By: Drags111
Description: Drops all items in the inventory except those w/ the specified
partial name. Example: R_DropItemsButPartNameEx('pickaxe');
*******************************************************************************}
procedure R_DropItemsButPartName(PartName: String);
begin
R_DropItemsButPartNameEx([PartName]);
end;

{*******************************************************************************
procedure R_DumpItems(Items: TInvItemArray);
By: Drags111
Description: Prints out the TInvItemArray nice and neatly.
*******************************************************************************}
procedure R_DumpItems(Items: TInvItemArray);
var
i: integer;
begin
for i := 0 to High(Items)do
begin
Writeln('Slot: '+ToStr(Items[i].Slot));
Writeln(' '+Items[i].Name);
Writeln(' ID:'+ToStr(Items[i].ID));
Writeln(' Stack Size:'+ToStr(Items[i].ID));
Writeln(' Actions:'+ToStr(Items[i].Actions));
end;
end;

i luffs yeww

2010-05-28 19:52:08

Why not do TrimInvName by default?
R_ItemIDExists, R_ItemNameExists, R_ItemPartNameExists.. Why set Result to true at the beginning? As far as I know, it's best to set it to false to start with. It's better to assume it's not there, in my opinion.
R_ItemPartNameExists only returns True.

And a few of them don't even set result to begin with. It's good practice.

:) Other than those few things (which probably wouldn't matter, but it's better to be safe than sorry, amirite?), it looks nice. :3

mormonman

2010-05-28 20:27:23

function R_GetSelectedInventoryItem: TInvItem;

Drakan

2010-05-28 20:34:41

From: i luffs yeww
Why not do TrimInvName by default?
R_ItemIDExists, R_ItemNameExists, R_ItemPartNameExists.. Why set Result to true at the beginning? As far as I know, it's best to set it to false to start with. It's better to assume it's not there, in my opinion.
R_ItemPartNameExists only returns True.

And a few of them don't even set result to begin with. It's good practice.

:) Other than those few things (which probably wouldn't matter, but it's better to be safe than sorry, amirite?), it looks nice. :3


it does trim it by default….
and for R_ItemPartNameExists: Thanks, didn't notice this.

And I set result to true so I can exit if it finds it, then result to false if it doesnt. It works either way.

Drakan

2010-05-28 20:35:42

From: mormonman
function R_GetSelectedInventoryItem: TInvItem;


Can inventory items be selected?

i luffs yeww

2010-05-28 20:40:57

Yes. By clicking on them. :)

Drakan

2010-05-28 21:20:32

oh right, when you use them. Eh, I don't play this dumb game nemore :P

mormonman

2010-05-28 21:56:29

From: drags111
oh right, when you use them. Eh, I don't play this dumb game nemore :P


It has something to do with pixelwidth… i don't know how you will find that though haha

Drakan

2010-05-28 22:14:52

From: mormonman
It has something to do with pixelwidth… i don't know how you will find that though haha


Ah, well I can do that. But not atm, I'm working on Equipment :)

marpis

2010-05-29 04:37:01

Good job, but you should remove the "PartName"- things and just use pos() in the namethings. That's how it's done in all SRL, like objects.scar.

TRiLeZ

2010-05-29 04:48:14

Good job. You now need to make functions to interact with multiple items / change the functions. Ex: procedure R_DropAllItemsID(id: TIntegerArray);

To get the selected item name, you can get it from the hook: "gu.i" (can't verify if the hook is correct though). Please note that the hook is also for the selected spell name.

Gu3st...

2010-05-29 05:45:44

function R_ClickItem(Slot: Integer; Left: Boolean; Action: String): boolean;
var
i: integer;
item: TInvItem;
begin
Result := false;
Item := GetInvItemAt(i);
if(Item = NullInvItem)then Exit;
case Left of
true: begin
MouseItem(i, true);
Result := True;
end;
false: begin
MouseItem(i, false);
Result := R_ChooseOption(Action);
end;
end;
end;
This wouldn't work…
Try this:
function R_ClickItem(Slot: Integer; Left: Boolean; Action: String): boolean;
var
item: TInvItem;
begin
Result := false;
Item := GetInvItemAt(Slot);
if(Item = NullInvItem)then Exit;
case Left of
true: begin
MouseItem(Slot, true);
Result := True;
end;
false: begin
MouseItem(Slot, false);
Result := R_ChooseOption(Action);
end;
end;
end;

Drakan

2010-05-29 07:55:39

From: Zyt3x
function R_ClickItem(Slot: Integer; Left: Boolean; Action: String): boolean;
var
i: integer;
item: TInvItem;
begin
Result := false;
Item := GetInvItemAt(i);
if(Item = NullInvItem)then Exit;
case Left of
true: begin
MouseItem(i, true);
Result := True;
end;
false: begin
MouseItem(i, false);
Result := R_ChooseOption(Action);
end;
end;
end;
This wouldn't work…
Try this:
function R_ClickItem(Slot: Integer; Left: Boolean; Action: String): boolean;
var
item: TInvItem;
begin
Result := false;
Item := GetInvItemAt(Slot);
if(Item = NullInvItem)then Exit;
case Left of
true: begin
MouseItem(Slot, true);
Result := True;
end;
false: begin
MouseItem(Slot, false);
Result := R_ChooseOption(Action);
end;
end;
end;


Oh hey, thanks I didn't notice I did that lol.

Coh3n

2010-05-29 09:52:48

From: drags111
Oh hey, thanks I didn't notice I did that lol.

Why are you using a case for a boolean?

i luffs yeww

2010-05-29 10:00:11

Did you look at the params, etc.? :) It's fine how it is, I think. An if then would also work, but wouldn't really make it any shorter.

Coh3n

2010-05-29 10:04:53

How do the parameters make a difference? It's faster to use if statements then cases when there's only two options. It doesn't matter to me what's used, I'm just saying.

i luffs yeww

2010-05-29 10:37:44

^ I shouldn't think right now. :3 Disregard me.

Sir R. M8gic1an

2010-05-29 11:37:21

I'd say leave SetupSRL outside of SetupReflection… People might want to have the choice of using reflection or not, and that would only make things harder.

Other than that, GJ a usual.

edit:

setupSRL;
{$IFDEF Ref}
SetupRef;
{$ENDIF}

{$IFNDEF REF}
SetupSRL;
{$ELSE}
SetupRef;
{$ENDIF}

You can be a hybrid and not want to include it. Broken hooks would screw up the script with just the SetupRef;

~RM

Narcle

2010-05-29 14:08:19

From: Rasta Magician
I'd say leave SetupSRL outside of SetupReflection… People might want to have the choice of using reflection or not, and that would only make things harder.

Other than that, GJ a usual.

edit:

setupSRL;
{$IFDEF Ref}
SetupRef;
{$ENDIF}

{$IFNDEF REF}
SetupSRL;
{$ELSE}
SetupRef;
{$ENDIF}

You can be a hybrid and not want to include it. Broken hooks would screw up the script with just the SetupRef;

~RM


Aye. Specially down the road when we have "addon functionality" with Simba so when someone opens a script they know what addons it requires to run by looking at the top of the script. Reflection will of course be one of the addons.

Nava2

2010-05-29 14:54:01

Better question, why are you using booleans for clicking? :s

Use the Mouse constants.

Coh3n

2010-05-29 19:36:14

From: Nava2
Better question, why are you using booleans for clicking? :s

Use the Mouse constants.

I'm assuming it's because M/Mouse use a boolean.

Nava2

2010-05-29 19:46:31

Oh right, this is SRL 4… :<

Perhaps reflection should be made in the ideals of SRL5?

i luffs yeww

2010-05-29 19:47:11

^ I'd suggest so.

Coh3n

2010-05-29 19:48:36

From: Nava2
Oh right, this is SRL 4… :<

Perhaps reflection should be made in the ideals of SRL5?

Yeah would agree, but no one has access to the forums so it'd be hard for them to know what to follow.

i luffs yeww

2010-05-29 19:52:00

^ I don't see why the main developers of reflection shouldn't. Or maybe just Drags. Ben has access, I assume, so if Drags took the small amount of time to change a few things i wouldn't be too hard. :) Or anyone else with access can easily convert it to SRL5.

Coh3n

2010-05-29 19:56:48

From: i luffs yeww
^ I don't see why the main developers of reflection shouldn't. Or maybe just Drags. Ben has access, I assume, so if Drags took the small amount of time to change a few things i wouldn't be too hard. :) Or anyone else with access can easily convert it to SRL5.

I'd concentrate on getting reflection 100% back with SRL 4. After all, who knows when SRL 5 is going to be released. That's why we're continuing to develop MSI in SRL 4. Plus there isn't much point in making it SRL 5 compatible when SRL 5 isn't even in a working stage.

i luffs yeww

2010-05-29 20:00:39

Well you wouldn't have to release it to be at par with SRL5. :) But I don't see why someone can't take the small amount of time to make it work with 5. It's not that much different, and it'd save time when SRL5 is released. And it's not like it'd be urgent to convert it or anything, so it's not a big deal if someone takes a week to change a function with the MouseType constants and what not. ^^

Coh3n

2010-05-29 20:09:48

From: i luffs yeww
Well you wouldn't have to release it to be at par with SRL5. :) But I don't see why someone can't take the small amount of time to make it work with 5. It's not that much different, and it'd save time when SRL5 is released. And it's not like it'd be urgent to convert it or anything, so it's not a big deal if someone takes a week to change a function with the MouseType constants and what not. ^^

You can't make it work with SRL 5 because SRL 5 doesn't work.

i luffs yeww

2010-05-29 20:12:20

I know it doesn't work (and it's sad that not much has been done for it, from what I've seen), but it can be slowly changed. Things like what N2 pointed out, for example, can be changed.

Coh3n

2010-05-29 20:14:26

From: i luffs yeww
I know it doesn't work (and it's sad that not much has been done for it, from what I've seen), but it can be slowly changed. Things like what N2 pointed out, for example, can be changed.

No it can't…

If you change the reflection files to what SRL 5 does, reflection isn't going to work. You'd have to start adding the SRL 5 features to SRL 4, which isn't going to happen.

Nava2

2010-05-29 20:22:38

I meant more or less SRL5 standards… :<

i luffs yeww

2010-05-29 20:24:23

^ Which is what I'm attempting to say D:

Coh3n

2010-05-29 20:50:02

From: Nava2
I meant more or less SRL5 standards… :<

That makes more sense.

@ian - Why didn't you just say that, then? You were making it sound like you wanted reflection to be written with the SRL 5 features.

i luffs yeww

2010-05-29 20:54:19

I dunno, lol. >_> I'm confus.

Coh3n

2010-05-29 20:55:51

From: i luffs yeww
I dunno, lol. >_> I'm confus.

Lol we'll just leave it at that. ^^

Drakan

2010-05-30 00:25:49

ANYWAY…. I'm back from my date, so I'll work on some more stuff. I'm going to do what coh3n said, and that is to just get reflection to srl4, then when 5 comes out, I'll deal with it then. It won't be hard to convert.

Sir R. M8gic1an

2010-05-30 08:25:07

I'll be copying a MSI Standards threads into the ref devs forums soon. Standards are pretty similar to SRL 5. Should make life easier on everyone.

~RM