SRL Archive - MSI Suggestions

Fighting!


Camaro'

2010-11-05 10:51:49

Fighting
Rawr


The idea of fighting.simba is


The idea is that once the actual functions are done, all that would need to be added is an object record for whatever monster you want to fight. Once it's added as an object, you would set it up in DeclarePlayers, and it would fight it.





New Feature: Bone Burying!




Fighting:

[INDENT]Completed[/INDENT]
[INDENT]Checks to see if the monster is in fight before fighting: [/INDENT]
[INDENT][INDENT]-Works[/INDENT][/INDENT]


Bone Burying:

[INDENT]Completed and tested.[/INDENT]


Bugs:

[INDENT]Not known.[/INDENT]


Monsters:

[INDENT]White Chicken(MONSTER_CHICKEN_WHITE)[/INDENT]
[INDENT]Brown Chicken(MONSTER_CHICKEN_BROWN)[/INDENT]
[INDENT]Giant Rat(MONSTER_RAT_GIANT)[/INDENT]
[INDENT]Every Cow(MONSTER_COW_SPOT, MONSTER_COW_DARK, MONSTER_COW_LIGHT, MONSTER_COW_LIGHT_CALF)[/INDENT]


Loot system:

[INDENT]Completed[/INDENT]
[INDENT][INDENT]-Tested and it works :)[/INDENT][/INDENT]
[INDENT]Chicken : Bones[/INDENT]
[INDENT]Rat: Bones[/INDENT]
[INDENT]Cows: Bones, Raw Beef, and Cow hide[/INDENT]


Progress Report:

[INDENT]Incomplete, I have no clue of how it works[/INDENT]


Eating:

[INDENT]Completed[/INDENT]
[INDENT][INDENT]-Not Tested[/INDENT][/INDENT]


Equipment:

[INDENT]Nothing started regarding equipment.[/INDENT]


Skills Const:

[INDENT]Only set to use attack right now[/INDENT]
[INDENT]I have some ideas I will work on later on.[/INDENT]


Setup Fighting:

[INDENT]Completed[/INDENT]
[INDENT][INDENT]Loads Monsters[/INDENT][/INDENT]


Code[1/26/11]
Rawr


Fighting.simba


{******************************************************************************}
{ Procedure MSI_EatFood(); }
{ By: Camaro' }
{ Date: January 26th, 2011 }
{ Description: Eats food, will run away if no food. }
{******************************************************************************}

function MSI_EatFood(): Boolean;
var
Slots: TIntegerArray;
I: Integer;
begin
if (HPPercent > 60) then
begin
Result := True;
Exit;
end;

MSI_Debug('Eating food!');

for I := FISH_COOKED_SHRIMP to FISH_COOKED_SWORDFISH do
begin
Slots := MSI_FindItemSlots(i);
if (Length(Slots) <= 0) then
Continue;

MSI_ClickItemSlot(Slots[I], ['Eat']);
Wait(500 + Random(500));

if (HPPercent > 60) then
begin
Result := True;
Exit;
end;
end;

SetRun(True);

with MSI_Players[CurrentPlayer] do
case Lowercase(Scripts[CurrentScript].RunDirection) of
'north':
begin
Mouse(MMCX, MMCY - 35, 10, 10, true); //North
MSI_Flag(0);
end;

'south':
begin
Mouse(MMCX, MMCY + 35, 10, 10, true); //South
MSI_Flag(0);
end;

'west':
begin
Mouse(MMCX + 35, MMCY, 10, 10, true); //West
MSI_Flag(0);
end;

'east':
begin
Mouse(MMCX - 35, MMCY, 10, 10, true); //East
MSI_Flag(0);
end;
end;

MSI_Debug('We are out of food!');
end;


{******************************************************************************}
{ Procedure MSI_InFight; }
{ By: Camaro' }
{ Date: 15 December 2010 }
{ Description: Returns true if you are in a fight }
{******************************************************************************}
function MSI_InFight: Boolean;
var
TP : TPoint;
begin
MSI_AddHeader('MSI_InFight');
Result := SRL_InFight;
MSI_CloseHeader('MSI_InFight: '+BoolToStr(Result));
end;

{******************************************************************************}
{ function MSI_WaitWhileFighting : Boolean; }
{ By: Camaro' }
{ Date: 11 December 2010 }
{ Description: Wait's until the monster is killed. }
{******************************************************************************}
function MSI_WaitWhileFighting : Boolean;
var
cts, t, MonColorCount: Integer;
Arr, tpArr: array of TPoint;
SearchBox: TBox;
begin
MSI_AddHeader('MSI_WaitWhileFighting');
MSI_AddHeader('Entering loop');
MSI_Flag(0);

MarkTime(T);
repeat
if not (MSI_EatFood) then
Break;
MSI_FindRandoms;

if (not(MSI_InFight)) then
begin
MSI_Debug('No more monster, exiting loop');
Break;
end;
Result := True;
MSI_AntiBan(RandomRange(0, 3000), ANTI_BAN_CHANCE);
Wait(20 + Random(20));

if (TimeFromMark(T) > 35000) then
begin
MSI_Debug('Took over 25 seconds while fighting, exiting loop');
Break;
end;
until(False);

MSI_CloseHeader('Out of loop');
MSI_CloseHeader('MSI_WaitWhileFighting : Exit');
end;

{******************************************************************************}
{ function MSI_MakeLootArray(monsterLoot: TIntegerArray): TIntegerArray; }
{ By: Camaro' }
{ Date: 25 January 2011 }
{ Description: Checks and verifys the users loot options. }
{******************************************************************************}
function MSI_MakeLootArray(monsterLoot: TIntegerArray): TIntegerArray;
var
I, J : Integer;
playerLoots : TIntegerArray;
begin
playerLoots := MSI_Players[CurrentPlayer].Scripts[CurrentScript].Loot;

for i := 0 to High(playerLoots) do // User Specified
for j := 0 to High(monsterLoot) do // Global Monster Loots
if (playerLoots[I] = monsterLoot[J]) then
begin
SetLength(Result, Length(Result) + 1);
Result[High(Result)] := playerLoots[J];
MSI_SubDebug('Player Loots['+Inttostr(i)+'] = '+IntToStr(playerLoots[i])+'');
Break;
end;
end;

{******************************************************************************}
{ Procedure MSI_PickLoot(Loots: TIntegerArray); }
{ By: Camaro' }
{ Date: 25 January 2011 }
{ Description: Picks loot from the ground. }
{******************************************************************************}

procedure MSI_PickLoot(Loots: TIntegerArray);
var
LootIndex : Integer;
TS : TStringArray;
//Loots : TIntegerArray;
begin

if (Length(Loots) < 1) then
Exit;

MSI_AddHeader('MSI_PickLoot');

if (MSI_FindObjects(Loots, LootIndex, ClickRight)) then
if (WaitOption(MSI_Objects[Loots[LootIndex]].Option, 100)) then
MSI_Flag(0)
else
begin
if (Random(5) = 2) then
MakeCompass(random(360));
end;

MSI_CloseHeader('MSI_PickLoot' + MSI_Objects[Loots[LootIndex]].Name);
end;

{******************************************************************************}
{ function MSI_LoadMonster(which : Integer): TMonster; }
{ By: Camaro' }
{ Date: 25 January 2011 }
{ Description: Loads the monster based on 'which'. }
{******************************************************************************}

function MSI_LoadMonster(which : Integer): TMonster;
begin
case which of

MONSTER_COW_SPOT, MONSTER_COW_DARK, MONSTER_COW_LIGHT, MONSTER_COW_LIGHT_CALF:
with Result do
begin
Name := 'Cow';
LootObjs := [BONES_NORMAL, RAW_BEEF, COWHIDE]; //objects
LootItems := [];// items
Constant := which;
ColorInfo := MSI_Objects[Constant];
end;
MONSTER_RAT_GIANT:
with Result do
begin
Name := 'Giant Rat';
LootObjs := [BONES_NORMAL]; //objects
LootItems := [];// items
Constant := which;
ColorInfo := MSI_Objects[Constant];
end;

MONSTER_CHICKEN_BROWN:
with Result do
begin
Name := 'Brown Chicken';
LootObjs := [BONES_NORMAL]; //objects
LootItems := [];// items
Constant := which;
ColorInfo := MSI_Objects[Constant];
end;
MONSTER_CHICKEN_WHITE:
with Result do
begin
Name := 'White Chicken';
LootObjs := [BONES_NORMAL]; //objects
LootItems := [];// items
Constant := which;
ColorInfo := MSI_Objects[Constant];
end;
end;
end;

{******************************************************************************}
{ function MSI_LoadAllMonsters(Start, Finish : Integer): Boolean; }
{ By: Camaro' }
{ Date: 25 January 2011 }
{ Description: Loads all monsters. }
{******************************************************************************}
function MSI_LoadAllMonsters(Start, Finish : Integer) : Boolean;
var
I : Integer;
begin
for I := Start to Finish do
MSI_Monsters[I] := MSI_LoadMonster(I);

Result := True;
end;

{******************************************************************************}
{ function MSI_SetupFighting: Boolean; }
{ By: Camaro' }
{ Date: 25 January 2011 }
{ Description: Sets up the fighting script. }
{******************************************************************************}
function MSI_SetupFighting: Boolean;
var
I: Integer;
begin
MSI_LoadAllMonsters(MONSTER_CHICKEN_WHITE, MONSTER_COW_LIGHT_CALF);

with MSI_Players[CurrentPlayer] do
for I := 0 to High(Scripts[CurrentScript].Monsters) do
MSI_Monsters[Scripts[CurrentScript].Monsters[I]].PossibleLoot := MSI_MakeLootArray(MSI_Monsters[Scripts[CurrentScript].Monsters[I]].LootObjs);

Result := True;
end;
{ //checks if ur kill count is over the amountToKill
function MSI_CheckKills(MonsterIndex: Integer) : Boolean;
var
maxKill : TIntegerArray;
begin
maxKill := MSI_Players[CurrentPlayer].Scripts[CurrentScript].MaxKills;
if (MSI_Players[CurrentPlayer].Scripts[CurrentScript].TotalKills > maxKill[MonsterIndex]) then
Result := True;

end;
}
{******************************************************************************}
{ function MSI_Fight: Boolean; }
{ By: Camaro' }
{ Date: 25 January 2011 }
{ Description: Fights the monster, returns true when it clicks 'attack'. }
{******************************************************************************}
function MSI_Fight: Boolean;
var
I, MonsterIndex, FS, TX, TY: Integer;
NMonsters : TIntegerArray;
TP : TPoint;
begin
if (MSI_InFight) then
begin
Result := True;
Exit;
end;

nMonsters := MSI_Players[CurrentPlayer].Scripts[CurrentScript].Monsters;
with MSI_Players[CurrentPlayer] do
if (not MSI_Scripts[Scripts[CurrentScript].Name].ClickClosest) then
nMonsters := MSI_RearrangeArray(nMonsters, Scripts[CurrentScript].Priority);

MSI_AddHeader('MSI_Fighting');

if (MSI_FindObjects(nMonsters, MonsterIndex, Nothing)) then
begin
TP := Point(MSI_Objects[nMonsters[MonsterIndex]].X, MSI_Objects[nMonsters[MonsterIndex]].Y);
if (not(IsFightAt(TP.X, TP.Y))) then
begin
if (TP.X > 0) and (TP.Y > 0) then
begin
MMouse(TP.X, TP.Y, 5, 5);
if (WaitUpText(MSI_Objects[nMonsters[MonsterIndex]].UpText, 100)) then
begin
GetMousePos(TX, TY);
Mouse(TX, TY, 0, 0, False);
if (WaitOption(MSI_Objects[nMonsters[MonsterIndex]].Option, 100)) then
begin
Result := True;
MSI_Flag(0);
end;
end;
end;
end;
end;
if (Random(8) = 2) then
MakeCompass(random(360));
Wait(500 + Random(500));
MSI_CloseHeader('Fighting'+MSI_Monsters[nMonsters[MonsterIndex]].Name);
end;

{******************************************************************************}
{ procedure MSI_BuryBones; }
{ By: Camaro' }
{ Date: 25 January 2011 }
{ Description: Burys bones. }
{******************************************************************************}
procedure MSI_BuryBones;
var
slots : TIntegerArray;
j : Integer;
begin
slots := MSI_FindItemSlots(LOOT_BONES_NORMAL);
for j := 0 to High(slots) do
begin
MSI_ClickItemSlot(slots[j], ['ury']);
Wait(RandomRange(1000, 1700));
MSI_FindRandoms;
end;
end;

{******************************************************************************}
{ function MSI_FightLoop: Boolean; }
{ By: Camaro' }
{ Date: 25 January 2011 }
{ Description: The loop which picks up loot, and fights until out of food. }
{******************************************************************************}
function MSI_FightLoop: Boolean;
var
I, MonsterIndex: Integer;
nMonsters : TIntegerArray;
begin
nMonsters := MSI_Players[CurrentPlayer].Scripts[CurrentScript].Monsters;
while (MSI_EatFood) do
begin
MSI_FindRandoms;
if (InvFull) then
begin
if (MSI_InFight) then
MSI_WaitWhileFighting;
if (MSI_Players[CurrentPlayer].Scripts[CurrentScript].Bury) then
MSI_BuryBones();
end;


MSI_Fight;

Wait(255 + Random(255));

if (MSI_WaitWhileFighting) then
begin
for I := 0 to High(MSI_Players[CurrentPlayer].Scripts[CurrentScript].Monsters) do
begin
if (not(InvFull)) then
MSI_PickLoot(MSI_Monsters[nMonsters[i]].PossibleLoot);
end;
end;

Wait(500 + Random(500));
end;
end;


Objects.simba



{ NPCs ======================================= ]
[============================================= }
MONSTER_COW_LIGHT://Lighter cow (light brownish). Full grown, has spots
with MSI_Objects[whichObject] do
begin
Name := 'Cow';
UpText := 'ack Cow';
Option := 'ttac';
Colors := [5860225];
Tol := 15;
Hue := 0.06;
Sat := 0.75;
FindAllColors := False;
W := 25;
H := 25;
Accuracy := 40;
ExcludeSelf := True;
RightClickOnly := False;
Tries := 5;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;
MONSTER_COW_LIGHT_CALF://Lighter cow (light brownish). Calf
with MSI_Objects[whichObject] do
begin
Name := 'Cow';
UpText := 'ack Cow';
Option := 'ttac';
Colors := [5994394];
Tol := 14;
Hue := 0.03;
Sat := 0.96;
FindAllColors := False;
W := 18;
H := 18;
Accuracy := 25;
ExcludeSelf := True;
RightClickOnly := False;
Tries := 5;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;

MONSTER_COW_DARK://Darker cow with no spots
with MSI_Objects[whichObject] do
begin
Name := 'Cow';
UpText := 'ack Cow';
Option := 'ttac';
Colors := [4541788];
Tol := 11;
Hue := 0.07;
Sat := 0.72;
FindAllColors := False;
W := 25;
H := 25;
Accuracy := 50;
ExcludeSelf := True;
RightClickOnly := False;
Tries := 5;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;

MONSTER_COW_SPOT://Dark cow with spots
with MSI_Objects[whichObject] do
begin
Name := 'Cow';
UpText := 'ack Cow';
Option := 'ttac';
Colors := [2440517];
Tol := 11;
Hue := 0.06;
Sat := 1.05;
FindAllColors := False;
W := 25;
H := 25;
Accuracy := 35;
ExcludeSelf := True;
RightClickOnly := False;
Tries := 5;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;

MONSTER_CHICKEN_BROWN://Brown
with MSI_Objects[whichObject] do
begin
Name := 'Chicken';
UpText := 'ack Chic';
Option := 'ttac';
Colors := [2444389];
Tol := 8;
Hue := 0.13;
Sat := 0.94;
FindAllColors := False;
W := 15;
H := 15;
Accuracy := 25;
ExcludeSelf := True;
RightClickOnly := False;
Tries := 5;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;

MONSTER_CHICKEN_WHITE:
with MSI_Objects[whichObject] do
begin
Name := 'Chicken';
UpText := 'ack Chic';
Option := 'ttac';
Colors := [7975366 ];
Tol := 20;
Hue := 0.03;
Sat := 1.57;
FindAllColors := False;
W := 15;
H := 15;
Accuracy := 15;
ExcludeSelf := True;
RightClickOnly := False;
Tries := 5;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;

MONSTER_RAT_GIANT:
with MSI_Objects[whichObject] do
begin
Name := 'Giant Rat';
UpText := 'ack Gian';
Option := 'ttac';
Colors := [4474440];
Tol := 25;
Hue := 0.00;
Sat := 0.00;
FindAllColors := False;
W := 13;
H := 13;
Accuracy := 7;
ExcludeSelf := True;
RightClickOnly := False;
Tries := 5;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;

NPC_STILES:
with MSI_Objects[whichObject] do
begin
Name := 'Stiles';
UpText := 'tiles';
Option := 'chan';
Colors := [3092273];
Tol := 7;
Hue := 0.08;
Sat := 0.17;
FindAllColors := False;
W := 25;
H := 40;
Accuracy := 10;
ExcludeSelf := False;
RightClickOnly := True;
Tries := 5;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;

{ Ground Items =============================== ]
[============================================= }


COWHIDE:
with MSI_Objects[whichObject] do
begin
Name := 'Cowhide';
UpText := 'ake';
Option := 'ake Co';
Colors := [14408937];
Tol := 8;
Hue := 0.20;
Sat := 2.09;
FindAllColors := False;
W := 11;
H := 11;
Accuracy := 15;
ExcludeSelf := False;
RightClickOnly := True;
Tries := 1;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;
RAW_BEEF:
with MSI_Objects[whichObject] do
begin
Name := 'Raw beef';
UpText := 'ake';
Option := 'ake Raw be';
Colors := [1714112];
Tol := 8;
Hue := 0.00;
Sat := 0.00;
FindAllColors := False;
W := 6;
H := 6;
Accuracy := 8;
ExcludeSelf := False;
RightClickOnly := True;
Tries := 3;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;
BONES_NORMAL:
with MSI_Objects[whichObject] do
begin
Name := 'Bones';
UpText := 'ake';
Option := 'ake Bon';
Colors := [13027286];
Tol := 11;
Hue := 0.09;
Sat := 0.94;
FindAllColors := False;
W := 10;
H := 10;
Accuracy := 22;
ExcludeSelf := False;
RightClickOnly := True;
Tries := 1;
Anim := False;
WaitToMove := True;
BadColors := [];
BadColorTolerance := 10;
AssociatedItems := [];
end;


Globals.simba


// Fighting
SCRIPT_FIGHTER = 81;

SCRIPT_ARRAY_LENGTH = 81; // Change to the highest script constant

////////
LOC_FIGHT = 124;

LOC_ARRAY_LENGTH = 124; // Change to the highest location constant
/////
LOOT_BONES_NORMAL = 174;
ITEM_ARRAY_LENGTH = 174; // Change to the highest item constant
/////
BONES_NORMAL = 101;
COWHIDE = 102;
RAW_BEEF = 103;

OBJ_ARRAY_LENGTH = 103; // Change to the highest object constant
/////
(**
* Constants representing all the different MSI NPCS
*)
const
// NPCs
NPC_STILES = 0;
MONSTER_CHICKEN_WHITE = 1;
MONSTER_CHICKEN_BROWN = 2;
MONSTER_RAT_GIANT = 3;
MONSTER_COW_SPOT = 4;
MONSTER_COW_DARK = 5;
MONSTER_COW_LIGHT = 6;
MONSTER_COW_LIGHT_CALF= 7;
NPC_ARRAY_LENGTH = 7; // Change to the highest NPC constant
/////
(**
* TMonster, used for fighting
*)
type
TMonster = record
Name : String;
Constant : Integer;
ColorInfo : TMSObject; // Would be set like ColorInfo := MSI_Objects[Constant];
LootObjs : TIntegerArray; // Mainscreen Objects
LootItems : TIntegerArray; // Inventory Items
WhileFighting : procedure; // Any EXTRA fighting procedure to call (CheckPoison, checkArrows)
PossibleLoot : TIntegerArray; // Not SPECIFIED BY USER! Holds all possible loot from monster
end;
/////
// Fighting
Monsters : TIntegerArray;
Loot : TIntegerArray;
RunDirection : String;
MaxKills : TIntegerArray;//not used yet
Bury : Boolean;
TotalKills : Integer; //NOT SPECIFIED BY USER //Not used yet.....
/////
MSI_Monsters : array[MONSTER_CHICKEN_WHITE..MONSTER_COW_LIGHT_CALF] of TMonster;


Scripts.simba


{ FIGHTER ================================ ]
[============================================= }

SCRIPT_FIGHTER:
with MSI_Scripts[whichScript] do
begin
Name := 'Combat Fighter';
Constant := SCRIPT_FIGHTER;
SkillName := 'Attack';
SkillConst := SKILL_ATTACK;
BankType := NoBank;
AutoObjects := @MSI_FightLoop;
PlayerSetup := @MSI_SetupFighting;

with Defaults do
begin
Monsters := [];
Loot := [];
RunDirection := 'north';
end;
end;

Setup.simba

{$include_once MSI/Skills/Fighting.simba}   

Items.simba

//GetItemColor
LOOT_BONES_NORMAL: Result := 11579576;
//GetDTMPoints
//Monster Loot
LOOT_BONES_NORMAL:
Result := [
Point(14, 11),
Point(21, 6),
Point(11, 21),
Point(2, 9),
Point(25, 15)
];
//LoadItem
{ Monster Loot =============================== ]
[ ============================================ }

LOOT_BONES_NORMAL:
with MSI_Items[whichItem] do
begin
Name := 'Bones';
UpText := ['ury Bo'];
Colors := [11579576];
Tol := 4;
Stackable := False;
end;


RunME.simba


//Location = LOC_FIGHT;
//This kills cows in falador (next to chickens) and collects bones, raw beef, and cowhide. It burys the bones.
Name := SCRIPT_FIGHTER; // The script constant
MONSTERS := [MONSTER_COW_SPOT, MONSTER_COW_DARK, MONSTER_COW_LIGHT, MONSTER_COW_LIGHT_CALF]; // Trees to cut
Loot := [BONES_NORMAL, RAW_BEEF, COWHIDE];
Bury := True; //Bury Bones

News: January 26th: Fixed up fighting, made it 1337, and added bone burying :D

Coh3n

2010-11-05 12:11:26

How about posting the code you've written so far for some feedback? :rolleyes: In your list, you should have the function name in brackets so we know exactly what the functions are.

[QUOTE=Camaro';747722]
[COLOR="Red"]
[LIST]
[*]Anything about equipment
[*]I also want to make it so it if it levels up lets say to level 40 attack, and you have a rune scimitar in your inventory, I want to make it recognize that and equip the rune scimitar :)
[/LIST]
[/COLOR][/QUOTE]
You can create a new function, MSI_EquipBestTool, and add it to Items.simba. This function would be called when the player levels up (see MSI_FindRandoms). It would look for the best tool (see MSI_FindTool), then equip it if possible.

Camaro'

2010-11-05 12:54:43

From: Coh3n
How about posting the code you've written so far for some feedback? :rolleyes: In your list, you should have the function name in brackets so we know exactly what the functions are.


You can create a new function, MSI_EquipBestTool, and add it to Items.simba. This function would be called when the player levels up (see MSI_FindRandoms). It would look for the best tool (see MSI_FindTool), then equip it if possible.


After some testing, I will do all that. Thanks for great comments :)

Cstrike

2010-11-05 12:57:12

A quick note:

If MSI is going to kill chickens in F2P, you're going to make the script have to be quite aggressive or the other like 2-3 bots per chicken will leave you with 10 exp/hour

Camaro'

2010-11-05 13:17:10

Its as fast as MSI will let it be. Also, the only chicken pen that is like that is the one across the cow field, thats always crowded. The other one in lumbridge, or the one in falador should be just fine.

Bobzilla69

2010-11-05 13:44:15

what about the rats behind lumbridge castle?

Camaro'

2010-11-05 13:46:58

From: bobzilla69
what about the rats behind lumbridge castle?


Rats?

Bobzilla69

2010-11-05 13:57:52

yeh there is a area behind the castle that has a few rats, and its not buzy at all. might be a good area to train as chickens are buzy alot of the time


Coh3n

2010-11-05 14:46:15

The idea is that once the actual functions are done, all that would need to be added is an object record for whatever monster you want to fight. Once it's added as an object, you would set it up in DeclarePlayers, and it would fight it.

NCDS

2010-11-05 15:43:44

From: Coh3n
How about posting the code you've written so far for some feedback? :rolleyes: In your list, you should have the function name in brackets so we know exactly what the functions are.


You can create a new function, MSI_EquipBestTool, and add it to Items.simba. This function would be called when the player levels up (see MSI_FindRandoms). It would look for the best tool (see MSI_FindTool), then equip it if possible.


Didn't we have a MSI_BestItem function?

Coh3n

2010-11-05 17:56:32

From: NCDS
Didn't we have a MSI_BestItem function?

Oh yeah. :p MSI_BestTool and MSI_Worst tool. You would need to use that in combination with MSI_FindTool.

Camaro'

2010-11-05 21:40:36

From: Coh3n
Oh yeah. :p MSI_BestTool and MSI_Worst tool. You would need to use that in combination with MSI_FindTool.


I think my whole sauce is messed up and I'm just going to post what I have individaully cause I think I'm doing this wrong and I want someone to help me clean it up. Like , I'm going to post 'Fighting.Simba' and then scratch everything else. Comments?

Coh3n

2010-11-06 02:59:21

[QUOTE=Camaro';747866]I think my whole sauce is messed up and I'm just going to post what I have individaully cause I think I'm doing this wrong and I want someone to help me clean it up. Like , I'm going to post 'Fighting.Simba' and then scratch everything else. Comments?
Sounds good. What else have you changed (other than the types)?

Camaro'

2010-11-06 08:34:19

From: Coh3n
Sounds good. What else have you changed (other than the types)?


I ended up rewriting everything I had, and it turned out really good. Only problems with the chicken killer is the Find Objects suggestion I posted, and I need help making an IsFightAt(X, Y) it has to work really well(If its not a multi-combat area).


First post is finished with the updating, please re-read the whole thing, including under the code :)

Also, the skill in the Scripts.simba file is currently attack, we have to make that work for attack, strength, or defense.

NCDS

2010-11-06 11:15:19

[QUOTE=Camaro';747949]I ended up rewriting everything I had, and it turned out really good. Only problems with the chicken killer is the Find Objects suggestion I posted, and I need help making an IsFightAt(X, Y) it has to work really well(If its not a multi-combat area). [/quote]
Make use of IsMoving?
[QUOTE=Camaro';747949]
Also, the skill in the Scripts.simba file is currently attack, we have to make that work for attack, strength, or defense.
Make constants for them and have box coords for each.

Camaro'

2010-11-06 11:45:26

I don't think I understand the first thing you posted. :(

Coh3n

2010-11-06 12:15:57

Doesn't SRL's InFight function work pretty well?

About the skill - that's going to be tricky since it we would want the option to train one of attack, strength or defense, just one of them, or all three. That would have to be set in DeclarePlayers, but I'm not sure yet how it would be handled in the record.

I have to go for a day or so, so hopefully you guys can think of something. ;)

Camaro'

2010-11-06 12:23:30

Well, since I posted the fighting source, I am going to stop development on that for a little while.

Coh3n

2010-11-06 12:51:20

[QUOTE=Camaro';747977]Well, since I posted the fighting source, I am going to stop development on that for a little while.[/QUOTE]
You said in the first post that a lot still needs to be done; you're just going to stop when it isn't finished, or are you just taking a break?

Also, could you explain what the Run attribute is and what it's used for? :o

Camaro'

2010-11-06 14:56:36

From: Coh3n
You said in the first post that a lot still needs to be done; you're just going to stop when it isn't finished, or are you just taking a break?

Also, could you explain what the Run attribute is and what it's used for? :o


I'm taking a break. I am starting to get sick. :(

Run direction

1 - Will run north if in danger
2 - Will run south if in danger
3 - west
4 - east

Coh3n

2010-11-07 17:11:48

[QUOTE=Camaro';748009]I'm taking a break. I am starting to get sick. :(

Run direction

1 - Will run north if in danger
2 - Will run south if in danger
3 - west
4 - east
I hope you get better.

And that's what I thought, just making sure. We better setup constants for that. It's more clear that way. Don't take this the wrong way, but I'll be adding Magic before I add fighting, simply because it's been in the works for months, and no one has had the proper time to add it in.

But, as soon as I can get magic added, I'll work with this a little and hopefully get it added as well. :) In the meantime, if anyone wants to develop it further that would be great. Talk to Camaro' if you need to.

Camaro'

2010-11-07 21:21:08

From: Coh3n
I hope you get better.

And that's what I thought, just making sure. We better setup constants for that. It's more clear that way. Don't take this the wrong way, but I'll be adding Magic before I add fighting, simply because it's been in the works for months, and no one has had the proper time to add it in.

But, as soon as I can get magic added, I'll work with this a little and hopefully get it added as well. :) In the meantime, if anyone wants to develop it further that would be great. Talk to Camaro' if you need to.


Lost all my code for fighting, thank goodness some of it is here. :)

Harry

2010-11-16 18:00:47

Hi,

I am currently trying to make something that joins world 17 (F2P PVP world). It then will spawn in Lumby, one click to the east to go into the PVP zone, auto-retaliate on, and wait for someone to attack you. You then attack back and volia, xp. It's pretty slow xp compared to most, but it's stable (never gotten a single random at all doing it, I think it's a random-free zone, and you don't need to worry about food).

If you wanted to make it more advanced, you could right click a bit below the skulls and click attack on people with a colored combat level (aka within your attack CB level):
This part is entirely optional, as there aren't many people who run out there and go idle as far as I can tell.

It should be pretty simple to create, though it would require changing the world-switching option in MSI.

The problems with this method are as follows:
1) People "safeing" - running into Lumby castle. This will bring you back into a PVP-safe zone, and even has the chance of trapping you inside one of the rooms. No one has trapped me yet, but I bet people would try.
1b) Autorelocation - it should attempt to remain in this area at ALL TIMES.
2) Mages/Ranges - they will probably realize you're being a sneaky thing if you keep running back into that area near spawn. Not a major problem unless a TON of people use this method.

Anyways, someone should make this happen. It shouldn't really be too hard, and would be amazing for long-term leveling.

Coh3n

2010-11-16 20:38:42

Not a bad idea for a script at all. Very simple also. I'm not exactly sure how it would be incorporated into MSI yet, though. We'll have to see what fighting is like when it's finished.

Camaro'

2010-11-17 06:42:04

I haven't been working on it because lack of time and also cause I find it easier to use Simba on windows and haven't gotten around to getting a windows virtual box.

I like that idea though, if you use reflection it would be really easy (Relocating and the such).

Good luck

Camaro'

2010-12-15 22:08:10

Reread the first post

Coh3n

2010-12-16 01:06:14

I don't have the time to look too much at the code, but most of it looks nice and organized, I like it. :) I'll point out a couple things:
  • You need spaces between the cases in the object records in Obejcts.simba.
  • I'm not sure if a LOC_FIGHT is necessary, we could just use LOC_POWER_SKILL since technically you're power fighting.
  • Instead of MONSTER_, we could use NPC_ so it's a little shorter, but that doesn't really matter too much, that's just a suggestion.
  • I don't think we need a PickLoot boolean, as you can just check the length of Loot, and if it's <= 0 then don't pick anything up.
  • We need to do something about the skills. We can't just have one skill for the fighter. Perhaps we'll need to make them arrays? That would involve a lot of repetitive changes around the include, but it may be necessary.
  • MSI_AutoObjects can't be like that. We don't want if statements for each skill, that's just unnecessary. We could add something to TBank like NotDrop, which will mean that there's no bank, but at the same time we don't want to drop everything.
  • MSI_Objects[MonsterIndex].X and Y keep returning 0 because MonsterIndex is the index of the nMonsters array, not the object constant. This should work:

  • MSI_Objects[nMonsters[MonsterIndex]].X
  • I think MSI_Fight should return true when the fight is over, not if it's started fighting.
  • Equipment may be difficult. It would be a pain to have to make DTMs for all weapons and armour. We could just make DTMs for the popular weapon types, and assume the user has put armour on the player, but I don't really like that. MSI should handle everything if necessary.
  • The progress report is actually really easy now that we have a pointer for it. You should look in Reports.simba as there can be a separate report for fighting. Also look at MSI_AddToProggy in Debug.simba. Also take a look at the TProggy type in Globals.simba. You'll probably need an array of TIntegerArray to keep track of monsters killed (look at Casts).
Nice work, and turns out I could do a little more in-depth reply. I'll look deeper into the code part of it another time. Also, I like the thread. ;) Nicely laid out and easy to read.

Keep it up!

Frement

2010-12-16 01:09:03

There is srl_InFight(); function in Globals.scar which is pretty accurate. I have been meaning to work on better functions, but for the time being, I'll be reading OpenGL stuff, and coding the lib.

Coh3n

2010-12-16 01:11:34

From: Frement
There is srl_InFight(); function in Globals.scar which is pretty accurate. I have been meaning to work on better functions, but for the time being, I'll be reading OpenGL stuff, and coding the lib.

If SRL's works pretty well, you can use that, and then use yours as a failsafe, or the other way around. ;)

Frement

2010-12-16 01:20:18

I tested the function quite a lot before it was added, and I think someone else tested it too, it should work on all compass angles, on the lowest camera height it might give a false-positive, but that was on rare occasions.

Camaro'

2010-12-16 07:41:12

From: Coh3n
If SRL's works pretty well, you can use that, and then use yours as a failsafe, or the other way around. ;)


From: Frement
There is srl_InFight(); function in Globals.scar which is pretty accurate. I have been meaning to work on better functions, but for the time being, I'll be reading OpenGL stuff, and coding the lib.


The two above quotes:

I tried SRL's version, but it didn't work, but it was an problem with my setup of fighting.simba last time. I forgot to try SRL's version again on my new one, will definitely try again later:).

From: Coh3n
I don't have the time to look too much at the code, but most of it looks nice and organized, I like it. :) I'll point out a couple things:
  • 1: You need spaces between the cases in the object records in Obejcts.simba.
  • 2: I'm not sure if a LOC_FIGHT is necessary, we could just use LOC_POWER_SKILL since technically you're power fighting.
  • 3: Instead of MONSTER_, we could use NPC_ so it's a little shorter, but that doesn't really matter too much, that's just a suggestion.
  • 4: I don't think we need a PickLoot boolean, as you can just check the length of Loot, and if it's <= 0 then don't pick anything up.
  • 5: We need to do something about the skills. We can't just have one skill for the fighter. Perhaps we'll need to make them arrays? That would involve a lot of repetitive changes around the include, but it may be necessary.
  • 6: MSI_AutoObjects can't be like that. We don't want if statements for each skill, that's just unnecessary. We could add something to TBank like NotDrop, which will mean that there's no bank, but at the same time we don't want to drop everything.
  • 7: MSI_Objects[MonsterIndex].X and Y keep returning 0 because MonsterIndex is the index of the nMonsters array, not the object constant. This should work:

  • MSI_Objects[nMonsters[MonsterIndex]].X
  • 8: I think MSI_Fight should return true when the fight is over, not if it's started fighting.
  • 9: Equipment may be difficult. It would be a pain to have to make DTMs for all weapons and armour. We could just make DTMs for the popular weapon types, and assume the user has put armour on the player, but I don't really like that. MSI should handle everything if necessary.
  • 10: The progress report is actually really easy now that we have a pointer for it. You should look in Reports.simba as there can be a separate report for fighting. Also look at MSI_AddToProggy in Debug.simba. Also take a look at the TProggy type in Globals.simba. You'll probably need an array of TIntegerArray to keep track of monsters killed (look at Casts).
Nice work, and turns out I could do a little more in-depth reply. I'll look deeper into the code part of it another time. 11: Also, I like the thread. ;) Nicely laid out and easy to read.

Keep it up!


1: Thanks, will fix this later.

2: Thanks, will fix this later.

3: Thanks, will fix this later.

4: I am going to completely fix the loot when fighting is more stable, so no worrys :p.

5: Well, I had an idea, for the skill const when you set up fighting, you could just put HP. Then in the fighting TScriptRecord or TScriptSetup I think it is, add two arrays the are relative to each other: For example


//Fighting
Monsters := .....
OtherSkills :=[Skill_Attack, Skill_Strength_ Skill_Defence]
StopSkillsAt:=[40, 99, 1];


Something will definitely be figured out :p

6: Well, I was just going by magics lead. But I will do your suggestion, I actually have a pretty good idea, lets just hope I don't forget.

7:YOUR THE BEST! :) Thanks so much, that will help the fighting so much :p

8: They way it is in scripts.simba is the function auto objects (for woodcutting it is MSI_ChopInvFull) I have set to MSI_Fight, so when I didn't have it return true at the beginning, and only when It finished, it would stop the script. We can work on this.

9: Equipment we will take slowly but surely as time goes on :)

10: Progress report I have no clue how works, I will take an in depth look later, but I highly doubt I will get results :(.

11: Thanks ! :)

Coh3n

2010-12-16 09:48:32

MSI_Fight can work just like MSI_DoMagic does. ;)

And for the progress report, just take a look at what I said and don't be afraid to ask questions. :)

Gu3st...

2010-12-16 11:27:52

Wow first post looks amazing :p

Looks like you're doing quite a good job, Camaro :)

Camaro'

2010-12-17 15:29:57

Updated first post:

News: December 17th: Updated the fighting, looting, and auto objects, the edits will only work if someone commits this: http://villavu.com/forum/showthread.php?p=759878#post759878

Coh3n

2010-12-17 16:04:19

[QUOTE=Camaro';759879][COLOR="Red"][B]Updated first post:[/B][/COLOR]

[B]News: December 17th: Updated the fighting, looting, and auto objects, the edits will only work if someone commits this: [url]http://villavu.com/forum/showthread.php?p=759878#post759878[/url][/B][/QUOTE]
Done. :)

Camaro'

2010-12-17 16:12:16

You think you want to give this a try to commit to MSI? (You don't have to commit the actual script into the Scripts.simba). Just so the code is there?

I don't want to update MSI because I don't know if I will lose my code, even though I have it backed up it gets annoying re-adding everything. :p

Coh3n

2010-12-17 17:55:03

[QUOTE=Camaro';759895]You think you want to give this a try to commit to MSI? (You don't have to commit the actual script into the Scripts.simba). Just so the code is there?

I don't want to update MSI because I don't know if I will lose my code, even though I have it backed up it gets annoying re-adding everything. :p
I didn't commit Fighting.simba or the script record.

I also changed some names and didn't commit all your globals things (some aren't needed). See the .diff to see exactly what I committed. Also, you should add all the monster's drop items to the AssociatedItems attribute in the monster's record. We can utilize that to know which ground items to be looking for. ;)

marpis

2010-12-19 05:53:45

Why not use AssociatedItems to define loots from each monster? :)
E: Because we need to find them from the ground first… Me stoopeed.
E: How do you like this:

type TMonster = record
ObjectIDs : TIntegerArray; // Same monsters can have different colours
LootIDs : TIntegerArray; // Objects
LootItems: TIntegerArray; // Items
WhileFighting : procedure; //
end;

with MSI_Monsters[MONSTER_SOME_SPIDER] do
begin
ObjectIDs := [OBJ_SPIDER_1, OBJ_SPIDER_2];
LootIDs := [OBJ_SPIDEREGGS, OBJ_NEWYORKKNICKS, OBJ_BANANA];
LootItems := [ITEM_SPIDEREGGS, ITEM_NEWYORKKNICKS, ITEM_BANANA];
WhileFighting := @MSI_CheckPoison();
end;

Camaro'

2010-12-19 21:08:07

That looks really cool! You could try to add it in, because my laptop isn't really running to good right now. I'll see if I can get my laptop working to a more usable form.:redface:

TomTuff

2011-01-06 21:19:24

Bring up this post! What's going on with the fighter? any chances of some new scripts being pressed out? :)

NCDS

2011-01-06 21:33:07

From: TomTuff
Bring up this post! What's going on with the fighter? any chances of some new scripts being pressed out? :)


AFAIK Camaro has gone inactive with MSI, for a while anyways. Once I catch up on the bugs list I've got right now (hopefully will be done tomorrow night) I may pick this up.

Would probably be a good thing for community members to work on also. :rolleyes:

Camaro'

2011-01-07 07:43:09

From: NCDS
AFAIK Camaro has gone inactive with MSI, for a while anyways. Once I catch up on the bugs list I've got right now (hopefully will be done tomorrow night) I may pick this up.

Would probably be a good thing for community members to work on also. :rolleyes:


Yea, been kind of busy, good chance that I'll work on this during the weekend.

Agreed, :p

Frement

2011-01-07 07:56:17

srl_InFight should now work fine, and there has been changes in IsFightAt also. If they are of any use in this.

Sir R. M8gic1an

2011-01-07 09:14:14

From: Frement
srl_InFight should now work fine, and there has been changes in IsFightAt also. If they are of any use in this.


Cheers for the info

~RM

Camaro'

2011-01-26 13:42:13

Reread the first post

Bone burying has been added, and tested. :) Looting works and has been testing.

Coh3n

2011-01-26 15:22:39

Looking good. Just thought of something: maybe have the user choose the fighting style? That way they can do atk/str/def or all.

Camaro'

2011-01-26 15:46:29

From: Coh3n
Looking good. Just thought of something: maybe have the user choose the fighting style? That way they can do atk/str/def or all.


Nice, I will work on that eventually. :p

Coh3n

2011-03-08 18:27:43

Have you made any more progress with this, or should I start adding it?

Camaro'

2011-06-21 17:50:23

From: Coh3n
Have you made any more progress with this, or should I start adding it?


I haven't even looked at MSI in forever. I have not worked on this so by all means you can start adding to it.

Coh3n

2011-06-22 08:06:17

[QUOTE=Camaro';813674]I haven't even looked at MSI in forever. I have not worked on this so by all means you can start adding to it.I figured. I won't be working on it any time soon. I have other things to do, but if you ever got back in to it, now that we have Git it's 100x easier for you to get things added. But if not, that's fine too. :)

Camaro'

2011-06-22 11:10:47

From: Coh3n
I figured. I won't be working on it any time soon. I have other things to do, but if you ever got back in to it, now that we have Git it's 100x easier for you to get things added. But if not, that's fine too. :)


Hmm, I am actually pretty interested in picking this up again. Especially with that sexy how-to tutorial.

Coh3n

2011-06-22 21:45:06

[QUOTE=Camaro';813839]Hmm, I am actually pretty interested in picking this up again. Especially with that sexy how-to tutorial.[/QUOTE]Good to hear. :) For isFighting, I suggest using MSI's animation system. It works perfectly for Chopping, and it should work just as well for fighting. It just may take some time to get the right values, and I haven't written a guide on the easiest way to go about doing that yet.

Camaro'

2011-06-22 23:00:56

From: Coh3n
Good to hear. :) For isFighting, I suggest using MSI's animation system. It works perfectly for Chopping, and it should work just as well for fighting. It just may take some time to get the right values, and I haven't written a guide on the easiest way to go about doing that yet.


Nice, I'll take a look at it. The only problem is that I'm not that good with git.

Coh3n

2011-06-22 23:04:25

[QUOTE=Camaro';813928]Nice, I'll take a look at it. The only problem is that I'm not that good with git.It will take some getting used to. If you need help you can message me on MSN or go on IRC. There are a lot of people who know it well that can help you out. :)

Camaro'

2011-07-04 12:15:46

Wow, I just lost a lot of code because of the automatic MSI updater. The main one being my fighting animation which took a lot of testing. Oh well. Was working so nicely too.

Coh3n

2011-07-04 12:19:09

[QUOTE=Camaro';816112]Wow, I just lost a lot of code because of the automatic MSI updater. The main one being my fighting animation which took a lot of testing. Oh well. Was working so nicely too.[/QUOTE]That's a little rattling, I completely forgot that would happen. :o

Yago

2011-07-04 14:57:39

I always disable the updater and also work in a different directory…

Gu3st...

2011-07-04 17:39:45

From: Yago
I always disable the updater and also work in a different directory…
This.

Someone could create an backup extension… That would be awesome (!)

Camaro'

2011-07-04 18:23:47

From: Zyt3x
This.

Someone could create an backup extension… That would be awesome (!)


That or someone should make the current MSI extension rename the old MSI folder instead of deleting it.

Yago

2011-07-04 23:42:24

Or have it ask you if you would like to delete… Like a confirmation box…

Coh3n

2011-07-05 08:18:07

From: Yago
Or have it ask you if you would like to delete… Like a confirmation box…

That may be rather easy, would have to look in to it.

Main

2011-08-12 23:42:40

Is there anything that is still missing or need to be added?
Also can any one tell me where is IsFightAt Locate at? I'd quite like to take a look at it:p

Coh3n

2011-08-13 00:43:17

From: Main
Is there anything that is still missing or need to be added?
Also can any one tell me where is IsFightAt Locate at? I'd quite like to take a look at it:p

I think srl_InFight is in globals.scar, I imagine IsFightAt would be there also. Try using Simba's function list search.

Smarter Child

2011-08-13 03:18:30

From: Coh3n
I think srl_InFight is in globals.scar, I imagine IsFightAt would be there also. Try using Simba's function list search.


srl_InFight is in globals.scar, however IsFightAt is in fighting.scar:

{*****************************************************************************
function IsFightAt(x, y: Integer): Boolean;
By: Frement
Description: Results True if a mainscreen HP bar is found near point X, Y.
See srl_InFight in Globals.scar for more info.
*****************************************************************************}
function IsFightAt(var X, Y: Integer): Boolean;
var
HPBarCorner: Integer;
begin
HPBarCorner := DTMFromString('78DA6364646060606540051A108A11CA6504315888' +
'50C34C841A26026A988854C348400D33116A588850C34A841A36C26A0046A001D4');
Result := FindDTM(HPBarCorner, X, Y, X - 30, Y - 30, X + 30, Y + 30);
FreeDTM(HPBarCorner);
end;

Main

2011-08-13 11:21:15

May I suggest the bounds to ( x - 25, x + 25, y - 100 and y) ? That's the boundary for a human player and thats what I've been using and its pretty good.
Or maybe have a option to allow player to enter the width and height of the player Like
IsFightAt( X, Y, Width, Height: Integer);

I was also using color instead, the green/red color in hp bar is pretty unique :P


Function Fighting( T: Tpoint): Boolean;
//Finds If hp bar is present around the given point 'T', I use it to check If other is in fight.
Var
OFX, OFY: Tpoint;
Begin
OFX := IntToPoint( T.X - 25, T.X + 25);
OFY := IntToPoint( T.Y - 100, T.Y);

If OFX.X < 0 Then
OFX.X := 0;

If OFY.X < 0 Then
OFY.X := 0;
Result := FindColorSpiralTolerance( T.X, T.Y, 52606, OFX.X, OFY.X, OFX.Y, OFY.Y, 39) OR FindColorSpiralTolerance( T.X, T.Y, 327842, OFX.X, OFY.X, OFX.Y, OFY.Y, 25);
End;

Any ways thats what I was using.

Coh3n

2011-08-13 11:26:26

If you're suggesting that for SRL, create a thread in the SRL Suggestions forum, otherwise I'm sure MSI can incorporate that when/if someone decides to finish off fighting.

Main

2011-08-13 11:29:03

Okey

Bobzilla69

2012-01-08 13:59:44

bit of a bump but whats happening with this?

would be nice to have basics implemented so people can start working on scripts for it

NCDS

2012-01-08 14:09:04

From: Bobzilla69
bit of a bump but whats happening with this?

would be nice to have basics implemented so people can start working on scripts for it


What you see here is what we have.

If you (or anyone) would like to take up development on it, feel free to. I, however, have a few things with higher priority.

Kyle Undefined

2012-01-08 14:13:51

I've been working on this, slowly but surely.

Camaro'

2012-01-11 20:09:32

From: Kyle Undefined
I've been working on this, slowly but surely.


Any questions you would like to ask you can hit me up on MSN:

[email]aarondawg14@yahoo.com[/email]

TrLoLoLoL

2012-01-11 20:14:46

i would suggest a F2P Lumbridge catacomb fighter for MSI its great XP

key

2012-05-06 05:53:43

Can't wait to use it, any ETA ;)?

litoris

2012-05-06 06:09:16

From: key
Can't wait to use it, any ETA ;)?


There are no ETA's here. If you want something to be out soon, help with it, or else wait.

key

2012-05-06 07:51:40

From: litoris
There are no ETA's here. If you want something to be out soon, help with it, or else wait.


I would love to help, but I don't know how to script :'(. So I'll just wait patiently!:sasmokin:

Yago

2012-05-06 18:53:28

From: key
I would love to help, but I don't know how to script :'(. So I'll just wait patiently!:sasmokin:


You can always read some tuts :)