Tripwire Interactive Forums

Go Back   Tripwire Interactive Forums > Killing Floor Forums > Killing Floor Modifications > Coding

Reply
 
Thread Tools Display Modes
  #1  
Old 05-11-2012, 08:11 AM
Gartley's Avatar
Gartley Gartley is offline
Senior Member
 
Join Date: Dec 2010
Location: UK
Posts: 2,324
Default [Tutorial] Custom Perks

Ok. Now to try and continue the attempt to limit version miss matching and to help people out who wish to create custom perks or server admins who want to work custom weapons into their perks.

Note: This first post may look like a lot, but it's less than an afternoon's reading.

Part One : Prerequisites

Primers

Forum member Benjamin created some very useful tutorials. I suggest you read the first one at least as it covers the actual set up and compiling of mods/muts/packages.

Creating a Basic Mutator
Mutator Essentials
Multiplayer Mutators
Modifying Existing Weapons

C++ & UnrealScript

Unreal Script is an object based programming language derived from C++. I'm not going to teach you about C++, I'm no where near qualified (or patient) enough to do so.

http://www.cplusplus.com has all the info you need on C++ including tutorials. Take note of how object based programming works including inheritance and projected properties. In here are all the operators and statements you'll need for the maths and checks.

UnrealScriptReference Has pretty much all the info you need on the unreal script functions and more. You can also use http://wiki.beyondunreal.com/ as a resource.

This should be enough to get you started by the time you've had a skim over and maybe tried some of Benjamin's tutorials I'll have written up the next section of the tutorial.

Note: To the experienced programmers; Marco, ScaryGhost, Benjamin etc. If you spot any mistakes or omissions please do send me a message and I'll correct any mistakes I've made. Also feel free to send any suggestions.


Tutorial One – Setting Up & Testing

So now that we have covered some basics of C++/UnrealScript and compiling we need to set ourselves up to build our new perks. There are other ways of doing this but this is the way I prefer to do things.

First download and install ServerPerks from this thread. -Be sure to thank Marco while you are there.

First create your mod folder; “WhiskyPerks” for this example and within that a folder called “classes”


Next navigate to .../KillingFloor/System and open the killingfloor.ini
In the EditPackages lines I add after ‘KFMutators’ the packages for ServerPerks and then your own.


Now going back to our mod folder we set up I’m going to create a simple perk extension that I will use for following tutorials. This is saved as a .uc file in the classes folder. Don't forget the file name has to be the same as the class name.

Code:
class WVetCommando extends SRVetCommando
	abstract;
defaultproperties
{
	VeterancyName="Whisky Commando"
}
This is all the code I’m going to use for the time being. What I’m doing here is extending off of the SRVetCommando which is the commando class that comes with ServerPerks. This will inherit all the functions and properties of its parent class with the exception of the Perk’s name, now “Whisky Commando” which overrides the parent class property.

Compile and if you’ve been following along you should have no problems. Next navigate to .../KillingFloor/System and open the ServerPerks.ini file (you can do this in game as well from the mutator window I just prefer doing it here) and add your new perk to the Perks= lines, in this case Perks=WhiskyPerks.WVetCommando.


Run the game and test. (Don’t forget to turn on ServerPerks from the mutator menu!)
-Remind me to take a picture to put here.-

And there we have it, our very own ‘custom’ perk in game. Admittedly this is only a name change but it is a start. Next tutorial will show you how to start customising bonuses and discounts.
__________________
Whisky's Workshop
"As you can see here, I'm -ALL ON MY F***ING OWN! Guys where the hell are you?!"

Last edited by Gartley; 05-20-2012 at 08:56 PM.
Reply With Quote
  #2  
Old 05-11-2012, 08:12 AM
Gartley's Avatar
Gartley Gartley is offline
Senior Member
 
Join Date: Dec 2010
Location: UK
Posts: 2,324
Default

Tutorial Two : Extending and Overriding Perks

We will start simply to begin with. Now you can find ALL the functions you need in other files, both in the original perks in the KFMod folder in your .../killingfloor/ directory and in Marcoís ServerPerksV5 source files which are still available on his thread.

Returning to our new Commando class, there is a gun that heís always enjoyed but finds very expensive. So letís give him a discount on a weapon.

Now there are two ways we can do this, we can either extend the function or overwrite the function.

Extending a Function

Iím going to opt to extend the function to start with because itís less coding and I don't need to do it from scratch. Our weapon shall be the G36C by Flux.

First download the mod and install it. Youíll need the files to be able to compile the perk.

This is what we are going to add to our perk to give it a discount for the weapon.

Code:
#exec obj load file="FX-KFG36C.u"
// Change the cost of particular items
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
{
	if ( Item == class'G36CPickup' )
	{
		return 0.9 - fmin(0.10 * float(KFPRI.ClientVeteranSkillLevel),0.6f); // Up to 70% discount on Assault Rifles
	}

	return super.GetCostScaling(KFPRI, Item);
}

Let us break it down:

Code:
#exec obj load file="FX-KFG36C.u"
This line loads the package we need.

Code:
// Change the cost of particular items
Comment so we know what we are doing here.

Code:
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
Calling the function to scale the cost of the weapon.

Code:
if ( Item == class'G36CPickup' )
IF statement, if the gun is a G36C then perform this process.

Code:
return 0.9 - fmin(0.10 * float(KFPRI.ClientVeteranSkillLevel),0.6f); // Up to 70% discount on Assault Rifles
Easy bit of maths to create the discount. With comment so you can see at a glance what is going on.

Code:
return super.GetCostScaling(KFPRI, Item);
Return value to the super class which means it returns this value to its parent class so that both work together rather than this function overwriting that of its parent.

Compile and test by adding the weapon to the store and switching between perks to see the effect on the discount.

Overriding a Function

Overriding is ideal if you want replace a function completely, for example removing all damage bonues; like so.

Code:
//Remove Damage Boosts
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType)
{
        return InDamage;
}
This simply overrides the parent function so our new commando doesn't have his damage boosts and we have still not touched the base ServerPerk package.

Perk as it stands now:
Spoiler!
__________________
Whisky's Workshop
"As you can see here, I'm -ALL ON MY F***ING OWN! Guys where the hell are you?!"

Last edited by Gartley; 05-11-2012 at 04:02 PM.
Reply With Quote
  #3  
Old 05-11-2012, 08:13 AM
Gartley's Avatar
Gartley Gartley is offline
Senior Member
 
Join Date: Dec 2010
Location: UK
Posts: 2,324
Default

Tutorial Three : Perk From Scratch with Custom Stats

ďBut Whisky, Gartley or whatever you call yourselfĒ I hear you cry ďI donít want to edit existing perks I want to make my own big shiny new perk!Ē

Well ok let us start to make our own perk then. Firstly we are going to start by setting up the requirements; scary ghost was kind enough to start this one off. So Iím going to use his as a base and work from there. Iíll also be turning the new commando perk into a standalone perk.

#1: First we need a new damage type. Have the AwardDamage function use the ProgressCustomValue function. You'll want to derive your custom damage type from KFWeaponDamageType.

Code:
class DamTypeG36CNew extends KFWeaponDamageType
    abstract;

static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount) 
{
   if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
   SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'G36CProgress',Amount);
}
    

defaultproperties 
{
    DeathString="%o was shot by %k."
    FemaleSuicide="%o was shot."
    MaleSuicide="%o was shot again."
    bArmorStops=False
    bAlwaysGibs=True
    bLocationalHit=False
    GibPerterbation=1.000000
    bCheckForHeadShots=False
}
#2: Create your custom requirement and name it something sensible.

Code:
class G36CProgress extends SRCustomProgressInt;

static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount) 
{
	if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
	SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'G36CProgress',Amount);
}

defaultproperties 
{
    ProgressName= "G36C Damage"
}
#3a: In your custom perk class, bind your custom requirement to the perk.

Code:
static function AddCustomStats( ClientPerkRepLink Other )
{
	Other.AddCustomValue(Class'G36CProgress');
}
#3b: In this example I also use this stage to replace the G36Cís DamType with the new calss. If you are creating a custom weapon you can use the above DamType in the weapons fire class.

Code:
static function AddCustomStats( ClientPerkRepLink Other )
{
	Other.AddCustomValue(Class'G36CProgress');
	Class'G36CFire'.Default.DamageType = Class'DamTypeG36CNew';
}
#4: In the perk create your custom perk progression.

Code:
var array<int> progressArray;

//Perk Progression
static function int GetPerkProgressInt( ClientPerkRepLink StatOther, out int FinalInt, byte CurLevel, byte ReqNum ) 
{
    if (CurLevel < 7) 
	{
        FinalInt= default.progressArray[curLevel];
    } 
	else 
	{
        FinalInt = default.progressArray[6]+GetDoubleScaling(CurLevel,500000);
    }
    return Min(StatOther.GetCustomValueInt(Class'G36CProgress'),FinalInt);
}

defaultproperties
{
    progressArray(0)=5000
    progressArray(1)=25000
    progressArray(2)=100000
    progressArray(3)=500000
    progressArray(4)=1500000
    progressArray(5)=3500000
    progressArray(6)=5500000
}
#5: Add in all the extra bonuses and features you want.

#6: Set up the default properties including perk descriptions. If you wish the custom info to display past perk 6 you need to know your maths and string replacements. Don't forget to define in the properties if you use more than a single requirement and their description.

Code:
static function string GetCustomLevelInfo( byte Level )
{
	local string S;

	S = Default.CustomLevelInfo;
	ReplaceText(S,"%s",GetPercentStr(0.05 * float(Level)));
	return S;
}
	
defaultproperties
{
    progressArray(0)=5000
    progressArray(1)=25000
    progressArray(2)=100000
    progressArray(3)=500000
    progressArray(4)=1500000
    progressArray(5)=3500000
    progressArray(6)=5500000
	
    VeterancyName="Whisky Commando"
	
    OnHUDIcon=Texture'WhiskyPerks_T.WCommandoPerk'
    OnHUDGoldIcon=Texture'WhiskyPerks_T.WCommandoPerk_Gold'
    
    Requirements(0)="Deal %x G36C damage"

    SRLevelEffects(0)="5% Perk Bonus"
    SRLevelEffects(1)="10% Perk Bonus"
    SRLevelEffects(2)="15% Perk Bonus"
    SRLevelEffects(3)="20% Perk Bonus"
    SRLevelEffects(4)="25% Perk Bonus"
    SRLevelEffects(5)="30% Perk Bonus"
    SRLevelEffects(6)="35% Perk Bonus"

    CustomLevelInfo="%s Perk Bonus"
	
    PerkIndex=7
	
}
Code:
NumRequirements=2

Requirements(0)="Kill %x Stalkers with Bullpup/AK47/SCAR"
Requirements(1)="Deal %x damage with Bullpup/AK47/SCAR
Remember to add the texture using the obj load function

Code:
#exec obj load file="WhiskyPerks_T.utx"
Spoiler!


Special thanks to Scary for pre-empting this one. His original post (link below) helped me to put this last one together.

The final perk.
Spoiler!


EXTRAS

You can also define what weapons you want the perk to be able to buy.

Code:
static function bool AllowWeaponInTrader( class<KFWeaponPickup> Pickup, KFPlayerReplicationInfo KFPRI, byte Level )
{
	if ( class<M79healPickup>(Pickup) != none || class<VirusMistPickup>(Pickup) != none 
	|| class<DoctorRiflePickup>(Pickup) != none || class<NovaSixPickup>(Pickup) != none )
		return false;
    else
		return true;
}
Thanks ForrestMark9 for that titbit.

Marco says:
A better example, you could use that to make like a portal science perk and hide Portal Turret from trader if you don't have level 5 or hide portal gun before level 10 (also require that you have that perk selected):
Code:
static function bool AllowWeaponInTrader( class<KFWeaponPickup> Pickup, KFPlayerReplicationInfo KFPRI, byte Level )
{
	if( Pickup==Class'PTurretPickup' )
		return (KFPRI.ClientVeteranSkill==Default.Class && Level>=5);
	if( Pickup==Class'pgPortalGunPickup' )
		return (KFPRI.ClientVeteranSkill==Default.Class && Level>=10);
	return true;
}
Another Marco special.
If you want to replace a perks starting equipment here is the way to do it.
Code:
static function AddDefaultInventory(KFPlayerReplicationInfo KFPRI, Pawn P)
{
	local Inventory I;

	// Delete standard guns
	I = P.FindInventoryType(Class'Knife');
	if( I!=None )
		I.Destroy();
	I = P.FindInventoryType(Class'Single');
	if( I!=None )
		I.Destroy();
	KFHumanPawn(P).RequiredEquipment[0] = "";
	KFHumanPawn(P).RequiredEquipment[1] = "";

	// Then give perk specific weapons.
	if ( KFPRI.ClientVeteranSkillLevel < 3 )
		KFHumanPawn(P).CreateInventoryVeterancy(string(Class'MyTireIron'), GetCostScaling(KFPRI, class'MyTireIron'));
	else KFHumanPawn(P).CreateInventoryVeterancy(string(Class'MyShovel'), GetCostScaling(KFPRI, class'MyShovel'));
}
__________________
Whisky's Workshop
"As you can see here, I'm -ALL ON MY F***ING OWN! Guys where the hell are you?!"

Last edited by Gartley; 06-26-2012 at 09:22 AM.
Reply With Quote
  #4  
Old 05-11-2012, 04:39 PM
scary ghost's Avatar
scary ghost scary ghost is offline
Senior Member
 
Join Date: Sep 2010
Location: California
Posts: 873
Default

Oops, saw this after I wrote this up:

http://forums.tripwireinteractive.co...&postcount=690

Oh well, feel free to use it if you haven't already gotten around to custom perk requirements.
Reply With Quote
  #5  
Old 05-12-2012, 01:37 AM
Gartley's Avatar
Gartley Gartley is offline
Senior Member
 
Join Date: Dec 2010
Location: UK
Posts: 2,324
Default

I think that's all of for now. If there are any other bits and pieces I'll try and answer what I can but remember the answers are all out there. You just need to look for them.
__________________
Whisky's Workshop
"As you can see here, I'm -ALL ON MY F***ING OWN! Guys where the hell are you?!"
Reply With Quote
  #6  
Old 05-12-2012, 01:41 AM
rkellis rkellis is offline
Banned
 
Join Date: May 2012
Posts: 2
Default

http://forums.tripwireinteractive.co...ad.php?t=48277

As you may be now aware of that custom perk

My problem is i followed every instructions and everything loaded perfectly the only problems is that the perks won't show up this is probably a offtopic but its still related to adding custom perks anyways I would like to know why it doesn't show up not even in the veterancy handler.Thank you.
Reply With Quote
  #7  
Old 05-13-2012, 04:32 PM
ASSAYARO's Avatar
ASSAYARO ASSAYARO is offline
Senior Member
 
Join Date: Sep 2010
Location: Behind you...
Posts: 154
Default Thank you so much...

Quote:
Originally Posted by Gartley View Post
Tutorial Three : Perk From Scratch with Custom Stats
[/CODE]
2 Qustions...

First, How do I insert another level conditions? (this part of rhe "GetPerkProgressInt" & progressArray"
Snd, Is it possible to insert a condition existing perk?
(E.g : movement, reload .. etc)

Last edited by ASSAYARO; 05-13-2012 at 04:34 PM.
Reply With Quote
  #8  
Old 05-14-2012, 05:10 AM
Gartley's Avatar
Gartley Gartley is offline
Senior Member
 
Join Date: Dec 2010
Location: UK
Posts: 2,324
Default

Hey ASSAYARO,

#1: I used an array just to keep things easy, you can do it the same way as in the orginal perks, commando or support are a good example ala:

Spoiler!


Or define a second array, either works.

And two, fully possible, just extend the perk and add the function you wish to include. Commando with speed boost?

Quote:
class SpeedyCommando extends SRVetCommando abstract;

static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI)
{
if ( KFPRI.ClientVeteranSkillLevel <= 1 )
return 1.0;
return 1.05 + FMin(0.05 * float(KFPRI.ClientVeteranSkillLevel - 2),0.55); // Moves up to 25% faster @ lvl6
}

default properties {}
Replace ServerPerks.SRVetCommando with your mypackage.SpeedyCommando and job's a good'en.
__________________
Whisky's Workshop
"As you can see here, I'm -ALL ON MY F***ING OWN! Guys where the hell are you?!"

Last edited by Gartley; 05-14-2012 at 05:13 AM.
Reply With Quote
  #9  
Old 05-14-2012, 05:33 AM
forrestmark9's Avatar
forrestmark9 forrestmark9 is offline
Senior Member
 
Join Date: Nov 2011
Posts: 815
Default

You might also want to add in a part where you can hide weapons from the trader using something like this.

Quote:
static function bool AllowWeaponInTrader( class<KFWeaponPickup> Pickup, KFPlayerReplicationInfo KFPRI, byte Level )
{
if ( class<M79healPickup>(Pickup) != none || class<VirusMistPickup>(Pickup) != none || class<DoctorRiflePickup>(Pickup) != none || class<NovaSixPickup>(Pickup) != none )
return false;
else
return true;
}
Reply With Quote
  #10  
Old 05-14-2012, 06:04 AM
FluX FluX is offline
Senior Member
 
Join Date: Oct 2010
Posts: 4,917
Default

Do remember to add the bool requirement in the default to say how many requirements the perk should have:
Code:
NumRequirements=2
and also add the description as so:
Code:
Requirements(0)="Kill %x Stalkers with Bullpup/AK47/SCAR"
     Requirements(1)="Deal %x damage with Bullpup/AK47/SCAR"
__________________

www.fluxiservice.com - Friendly, supportive game server host awaiting your arrival.
>> My Custom Content Archive <<
Reply With Quote
  #11  
Old 05-14-2012, 07:59 AM
Gartley's Avatar
Gartley Gartley is offline
Senior Member
 
Join Date: Dec 2010
Location: UK
Posts: 2,324
Default

Posts amended, thanks guys.
__________________
Whisky's Workshop
"As you can see here, I'm -ALL ON MY F***ING OWN! Guys where the hell are you?!"
Reply With Quote
  #12  
Old 05-14-2012, 10:19 AM
Marco Marco is offline
Senior Member
 
Join Date: May 2009
Location: Finland
Posts: 530
Default

Quote:
Originally Posted by forrestmark9 View Post
You might also want to add in a part where you can hide weapons from the trader using something like this.
A better example, you could use that to make like a portal science perk and hide Portal Turret from trader if you don't have level 5 or hide portal gun before level 10 (also require that you have that perk selected):
Code:
static function bool AllowWeaponInTrader( class<KFWeaponPickup> Pickup, KFPlayerReplicationInfo KFPRI, byte Level )
{
	if( Pickup==Class'PTurretPickup' )
		return (KFPRI.ClientVeteranSkill==Default.Class && Level>=5);
	if( Pickup==Class'pgPortalGunPickup' )
		return (KFPRI.ClientVeteranSkill==Default.Class && Level>=10);
	return true;
}
__________________
Quote:
Originally Posted by HuNteR- View Post
Sadly no, we can't do anything about it, fools like Marco will always exist, and with no one with power pulling strings, its a lost cause.
Reply With Quote
  #13  
Old 05-14-2012, 11:34 AM
ASSAYARO's Avatar
ASSAYARO ASSAYARO is offline
Senior Member
 
Join Date: Sep 2010
Location: Behind you...
Posts: 154
Default

Quote:
Originally Posted by Gartley View Post
Hey ASSAYARO,

#1: I used an array just to keep things easy, you can do it the same way as in the orginal perks, commando or support are a good example ala:



Or define a second array, either works.

And two, fully possible, just extend the perk and add the function you wish to include. Commando with speed boost?



Replace ServerPerks.SRVetCommando with your mypackage.SpeedyCommando and job's a good'en.
Thank you so much for the answer
Reply With Quote
  #14  
Old 05-20-2012, 08:40 PM
Gartley's Avatar
Gartley Gartley is offline
Senior Member
 
Join Date: Dec 2010
Location: UK
Posts: 2,324
Default

oops, I deleted the pictures, I'll sort that out now.
__________________
Whisky's Workshop
"As you can see here, I'm -ALL ON MY F***ING OWN! Guys where the hell are you?!"
Reply With Quote
  #15  
Old 05-22-2012, 05:56 PM
ASSAYARO's Avatar
ASSAYARO ASSAYARO is offline
Senior Member
 
Join Date: Sep 2010
Location: Behind you...
Posts: 154
Default one question

Quote:
Originally Posted by Gartley View Post
Hey ASSAYARO,

#1: I used an array just to keep things easy, you can do it the same way as in the orginal perks, commando or support are a good example ala:



Or define a second array, either works.

And two, fully possible, just extend the perk and add the function you wish to include. Commando with speed boost?



Replace ServerPerks.SRVetCommando with your mypackage.SpeedyCommando and job's a good'en.
I would like to apply 3conditions for lvl-up.
But, see the following error messages. something wrong??

Quote:
Error, Redefinition of 'function GetPerkProgressInt' differs from original in SRVeterancyTypes
Compile aborted due to errors.

Last edited by ASSAYARO; 05-22-2012 at 06:00 PM.
Reply With Quote
  #16  
Old 05-22-2012, 11:18 PM
FluX FluX is offline
Senior Member
 
Join Date: Oct 2010
Posts: 4,917
Default

Quote:
Originally Posted by ASSAYARO View Post
I would like to apply 3conditions for lvl-up.
But, see the following error messages. something wrong??
Make sure that your function GetPerkProgressInt is exact same start as the original.
Code:
static function int GetPerkProgressInt( ClientPerkRepLink StatOther, out int FinalInt, byte CurLevel, byte ReqNum )
It has to match that.
__________________

www.fluxiservice.com - Friendly, supportive game server host awaiting your arrival.
>> My Custom Content Archive <<
Reply With Quote
  #17  
Old 05-23-2012, 12:52 AM
ASSAYARO's Avatar
ASSAYARO ASSAYARO is offline
Senior Member
 
Join Date: Sep 2010
Location: Behind you...
Posts: 154
Default

Quote:
Originally Posted by FluX View Post
Make sure that your function GetPerkProgressInt is exact same start as the original.
Code:
static function int GetPerkProgressInt( ClientPerkRepLink StatOther, out int FinalInt, byte CurLevel, byte ReqNum )
It has to match that.
Thank u for the answer.
I've made a mistake... ha i solved
Reply With Quote
  #18  
Old 05-25-2012, 04:32 AM
NeedlesKane's Avatar
NeedlesKane NeedlesKane is offline
Senior Member
 
Join Date: Jan 2012
Location: Big D
Posts: 144
Default

Quote:
Originally Posted by Marco View Post
A better example, you could use that to make like a portal science perk and hide Portal Turret from trader if you don't have level 5 or hide portal gun before level 10 (also require that you have that perk selected):
Code:
static function bool AllowWeaponInTrader( class<KFWeaponPickup> Pickup, KFPlayerReplicationInfo KFPRI, byte Level )
{
    if( Pickup==Class'PTurretPickup' )
        return (KFPRI.ClientVeteranSkill==Default.Class && Level>=5);
    if( Pickup==Class'pgPortalGunPickup' )
        return (KFPRI.ClientVeteranSkill==Default.Class && Level>=10);
    return true;
}
Hi Marco. When I attempt to use this for the Firebug the trader ends up breaking. Is the code a little bit different for this perk from the others? Thanks!
Reply With Quote
  #19  
Old 05-25-2012, 08:47 AM
Gartley's Avatar
Gartley Gartley is offline
Senior Member
 
Join Date: Dec 2010
Location: UK
Posts: 2,324
Default

This code works fine for me, what were you trying to add/change?
__________________
Whisky's Workshop
"As you can see here, I'm -ALL ON MY F***ING OWN! Guys where the hell are you?!"
Reply With Quote
  #20  
Old 05-25-2012, 10:55 AM
FluX FluX is offline
Senior Member
 
Join Date: Oct 2010
Posts: 4,917
Default

Quote:
Originally Posted by NeedlesKane View Post
Hi Marco. When I attempt to use this for the Firebug the trader ends up breaking. Is the code a little bit different for this perk from the others? Thanks!
If you want, give us what code you implemented and what you intend it to do and we'll see about helpping you.
__________________

www.fluxiservice.com - Friendly, supportive game server host awaiting your arrival.
>> My Custom Content Archive <<
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 04:24 AM.


Powered by vBulletin®
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Copyright ©2005 - 2014, Tripwire Interactive, LLC