AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Snippets and Tutorials (https://forums.alliedmods.net/forumdisplay.php?f=112)
-   -   [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode (https://forums.alliedmods.net/showthread.php?t=203225)

Bitl 12-16-2012 12:56

[TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
3 Attachment(s)
Hello, and today we will develop a plugin that modifies the inner game aspects for gameplay, also known as a gamemode.

With our gamemode, we will make one where you spawn as Pyro, and you get only one weapon.

Requirements:
-Sourcemod
-TF2
-TF2Items
-TF2Items GiveWeapon (plugin and .inc)

Now lets get started!

Includes (can be modified):
Code:

#include <sourcemod>
#include <tf2items>
#include <tf2_stocks>
#include <tf2items_giveweapon>

You need these for your plugin to compile correctly.

Now, to make our plugin.

Code:

new TF2ItemSlot = 8;
This tells us to find all the slots. We need this so that we can strip all the items.

Code:

public Plugin:myinfo =
{
        name = "[TF2] Pyro Battle",
        author = "Me",
        description = "A gamemode where pyros fight eachother.",
        version = "1.0",
        url = ""
};

Plugin info, nothing new here.

Next you would need to hook the events, for this, I chose player_spawn and post_inventory_application.

Code:

public OnPluginStart()
{
        HookEvent( "post_inventory_application", OnPostInventoryApplicationAndPlayerSpawn );
        HookEvent( "player_spawn", OnPostInventoryApplicationAndPlayerSpawn );
}

Next, add the OnPostInventoryApplicationAndPlayerSpawn function.

Code:

public OnPostInventoryApplicationAndPlayerSpawn( Handle:hEvent, const String:strEventName[], bool:bDontBroadcast )
{
}

Next, add the client defines in the extention:

Code:

new iClient = GetClientOfUserId( GetEventInt( hEvent, "userid" ) )
After that, add the part where it removes all of the players items before spawning.

Code:

for( new iSlot = 0; iSlot < _:TF2ItemSlot; iSlot++ )
                TF2_RemoveWeaponSlot( iClient, iSlot );

Next, add the weapon. we will talk about the weapon code later.

Code:

TF2Items_GiveWeapon(iClient, 9990);
Then add the slot1 and slot2 removers, just in case.

Code:

TF2_RemoveWeaponSlot(iClient, 1);
TF2_RemoveWeaponSlot(iClient, 2);

Then add the SetClass, and then you are done.

Code:

TF2_SetPlayerClass(iClient, TFClass_Pyro, false, true);
So the entire plugin should look like this:

Code:

#include <sourcemod>
#include <tf2items>
#include <tf2_stocks>
#include <tf2items_giveweapon>

new TF2ItemSlot = 8;
 
public Plugin:myinfo =
{
        name = "[TF2] Pyro Battle",
        author = "Me",
        description = "A gamemode where pyros fight eachother.",
        version = "1.0",
        url = ""
};
 
public OnPluginStart()
{
        HookEvent( "post_inventory_application", OnPostInventoryApplicationAndPlayerSpawn );
        HookEvent( "player_spawn", OnPostInventoryApplicationAndPlayerSpawn );
}

public OnPostInventoryApplicationAndPlayerSpawn( Handle:hEvent, const String:strEventName[], bool:bDontBroadcast )
{
        new iClient = GetClientOfUserId( GetEventInt( hEvent, "userid" ) )
       
        for( new iSlot = 0; iSlot < _:TF2ItemSlot; iSlot++ )
                TF2_RemoveWeaponSlot( iClient, iSlot );
       
        TF2Items_GiveWeapon(iClient, 9990);
               
        TF2_RemoveWeaponSlot(iClient, 1);
        TF2_RemoveWeaponSlot(iClient, 2);
       
        TF2_SetPlayerClass(iClient, TFClass_Pyro, false, true)
}

Now, here's the weapon code, create a file named tf2items.givecustom.txt in sourcemod/configs, then put this in the .txt:

Code:

"custom_give_weapons_vlolz"
{
        "9990"
    {
                "classname"        "tf_weapon_syringegun_medic"
                "index"                "527"
                "slot"                "0"
                "quality"                "9"
                "level"                "10"
                "attribs"                "280 ; 1 ; 6 ; 1.45 ; 31 ; 3 ; 32 ; 1 ; 2 ; 1.4 ; 125 ; -10"
                "ammo"                "300"
    }
}

Then you are done!

You can edit this plugin to your liking, but DO NOT RELEASE THE PYROBATTLE PLUGIN TO NEW PLUGINS.

Plugin and files included are below.

Mitchell 12-16-2012 17:06

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
neat

Leonardo 12-19-2012 01:21

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
as longer as TF2Items GiveWeapon uses TF2ItemsInfo,
there's already TF2ItemSlot enum
so you have to check for it
Code:

#if !defined _tf2itemsinfo_included
new TF2ItemSlot = 8;
#endif

you also can crate weapon with TF2Items GiveWeapon' natives
Code:

public OnAllPluginsLoaded()
{
    TF2Items_CreateWeapon( 9990, "tf_weapon_syringegun_medic", 527, 0, 9, 10, "280 ; 1 ; 6 ; 1.45 ; 31 ; 3 ; 32 ; 1 ; 2 ; 1.4 ; 125 ; -10", 300, _, true );
}

also someone told me do not use function/variable names longer than 32 chars.

so plugin should look like:
PHP Code:

#pragma semicolon 1

#include <sourcemod>
#include <tf2_stocks>

#define REQUIRE_EXTENSIONS
#define AUTOLOAD_EXTENSIONS
#include <tf2items>

#undef REQUIRE_PLUGIN
#tryinclude <tf2itemsinfo>

#define REQUIRE_PLUGIN
#include <tf2items_giveweapon>

#define MY_WEAPON_ID 9090

#if !defined _tf2itemsinfo_included
new TF2ItemSlot 8;
#endif

public Plugin:myinfo =
{
    
name "[TF2] Pyro Battle",
    
author "You",
    
description "A gamemode where pyros fight each others.",
    
version "1.1",
    
url "http://forums.alliedmods.net/showthread.php?t=203225"
};

public 
OnPluginStart()
{
    
HookEvent"post_inventory_application"OnHookedEvent );
    
HookEvent"player_spawn"OnHookedEvent );
}

public 
OnAllPluginsLoaded()
{
    
TF2Items_CreateWeaponMY_WEAPON_ID"tf_weapon_syringegun_medic"5270910"280 ; 1 ; 6 ; 1.45 ; 31 ; 3 ; 32 ; 1 ; 2 ; 1.4 ; 125 ; -10"300_true );
}

public 
OnPostInventoryApplicationAndPlayerSpawnHandle:hEvent, const String:strEventName[], bool:bDontBroadcast )
{
    new 
iClient GetClientOfUserIdGetEventInthEvent"userid" ) )
    if( 
iClient <= || iClient MaxClients || !IsClientInGame(iClient/*|| !IsPlayerAlive(iClient)*/ )
        return;
    
    for( new 
iSlot 0iSlot _:TF2ItemSlotiSlot++ )
        
TF2_RemoveWeaponSlotiClientiSlot );
    
    
TF2_SetPlayerClassiClientTFClass_Pyro_true );
    
    
TF2Items_GiveWeaponiClientMY_WEAPON_ID );


EDIT:
oh
any reason why it's a tf_weapon_syringegun_medic with item ID #527 (widowmaker)?

Bitl 12-21-2012 00:26

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
Quote:

Originally Posted by Leonardo (Post 1856334)
as longer as TF2Items GiveWeapon uses TF2ItemsInfo,
there's already TF2ItemSlot enum
so you have to check for it
Code:

#if !defined _tf2itemsinfo_included
new TF2ItemSlot = 8;
#endif

you also can crate weapon with TF2Items GiveWeapon' natives
Code:

public OnAllPluginsLoaded()
{
    TF2Items_CreateWeapon( 9990, "tf_weapon_syringegun_medic", 527, 0, 9, 10, "280 ; 1 ; 6 ; 1.45 ; 31 ; 3 ; 32 ; 1 ; 2 ; 1.4 ; 125 ; -10", 300, _, true );
}

also someone told me do not use function/variable names longer than 32 chars.

so plugin should look like:
PHP Code:

#pragma semicolon 1

#include <sourcemod>
#include <tf2_stocks>

#define REQUIRE_EXTENSIONS
#define AUTOLOAD_EXTENSIONS
#include <tf2items>

#undef REQUIRE_PLUGIN
#tryinclude <tf2itemsinfo>

#define REQUIRE_PLUGIN
#include <tf2items_giveweapon>

#define MY_WEAPON_ID 9090

#if !defined _tf2itemsinfo_included
new TF2ItemSlot 8;
#endif

public Plugin:myinfo =
{
    
name "[TF2] Pyro Battle",
    
author "You",
    
description "A gamemode where pyros fight each others.",
    
version "1.1",
    
url "http://forums.alliedmods.net/showthread.php?t=203225"
};

public 
OnPluginStart()
{
    
HookEvent"post_inventory_application"OnHookedEvent );
    
HookEvent"player_spawn"OnHookedEvent );
}

public 
OnAllPluginsLoaded()
{
    
TF2Items_CreateWeaponMY_WEAPON_ID"tf_weapon_syringegun_medic"5270910"280 ; 1 ; 6 ; 1.45 ; 31 ; 3 ; 32 ; 1 ; 2 ; 1.4 ; 125 ; -10"300_true );
}

public 
OnPostInventoryApplicationAndPlayerSpawnHandle:hEvent, const String:strEventName[], bool:bDontBroadcast )
{
    new 
iClient GetClientOfUserIdGetEventInthEvent"userid" ) )
    if( 
iClient <= || iClient MaxClients || !IsClientInGame(iClient/*|| !IsPlayerAlive(iClient)*/ )
        return;
    
    for( new 
iSlot 0iSlot _:TF2ItemSlotiSlot++ )
        
TF2_RemoveWeaponSlotiClientiSlot );
    
    
TF2_SetPlayerClassiClientTFClass_Pyro_true );
    
    
TF2Items_GiveWeaponiClientMY_WEAPON_ID );


EDIT:
oh
any reason why it's a tf_weapon_syringegun_medic with item ID #527 (widowmaker)?

It looks cool in the pyro's viewmodel.

Leonardo 12-21-2012 05:34

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
Quote:

Originally Posted by Bitl (Post 1857383)
Quote:

Originally Posted by Leonardo (Post 1856334)
as longer as TF2Items GiveWeapon uses TF2ItemsInfo,
there's already TF2ItemSlot enum
so you have to check for it
Code:

#if !defined _tf2itemsinfo_included
new TF2ItemSlot = 8;
#endif

you also can crate weapon with TF2Items GiveWeapon' natives
Code:

public OnAllPluginsLoaded()
{
    TF2Items_CreateWeapon( 9990, "tf_weapon_syringegun_medic", 527, 0, 9, 10, "280 ; 1 ; 6 ; 1.45 ; 31 ; 3 ; 32 ; 1 ; 2 ; 1.4 ; 125 ; -10", 300, _, true );
}

also someone told me do not use function/variable names longer than 32 chars.

so plugin should look like:
PHP Code:

#pragma semicolon 1

#include <sourcemod>
#include <tf2_stocks>

#define REQUIRE_EXTENSIONS
#define AUTOLOAD_EXTENSIONS
#include <tf2items>

#undef REQUIRE_PLUGIN
#tryinclude <tf2itemsinfo>

#define REQUIRE_PLUGIN
#include <tf2items_giveweapon>

#define MY_WEAPON_ID 9090

#if !defined _tf2itemsinfo_included
new TF2ItemSlot 8;
#endif

public Plugin:myinfo =
{
    
name "[TF2] Pyro Battle",
    
author "You",
    
description "A gamemode where pyros fight each others.",
    
version "1.1",
    
url "http://forums.alliedmods.net/showthread.php?t=203225"
};

public 
OnPluginStart()
{
    
HookEvent"post_inventory_application"OnHookedEvent );
    
HookEvent"player_spawn"OnHookedEvent );
}

public 
OnAllPluginsLoaded()
{
    
TF2Items_CreateWeaponMY_WEAPON_ID"tf_weapon_syringegun_medic"5270910"280 ; 1 ; 6 ; 1.45 ; 31 ; 3 ; 32 ; 1 ; 2 ; 1.4 ; 125 ; -10"300_true );
}

public 
OnPostInventoryApplicationAndPlayerSpawnHandle:hEvent, const String:strEventName[], bool:bDontBroadcast )
{
    new 
iClient GetClientOfUserIdGetEventInthEvent"userid" ) )
    if( 
iClient <= || iClient MaxClients || !IsClientInGame(iClient/*|| !IsPlayerAlive(iClient)*/ )
        return;
    
    for( new 
iSlot 0iSlot _:TF2ItemSlotiSlot++ )
        
TF2_RemoveWeaponSlotiClientiSlot );
    
    
TF2_SetPlayerClassiClientTFClass_Pyro_true );
    
    
TF2Items_GiveWeaponiClientMY_WEAPON_ID );


EDIT:
oh
any reason why it's a tf_weapon_syringegun_medic with item ID #527 (widowmaker)?

It looks cool in the pyro's viewmodel.

why don't just use tf_weapon_shotgun_pyro then?

Bitl 12-21-2012 22:47

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
Quote:

Originally Posted by Leonardo (Post 1857470)
why don't just use tf_weapon_shotgun_pyro then?

Then it would not have rapid fire.

Unreal1 12-22-2012 10:12

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
Why are you going through 8 slots? Aren't there only 4?

Leonardo 12-22-2012 11:29

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
primary
secondary
melee
spy watches / build pda
disguise kit / destroy pda
builder / head
misc / misc2
action

Powerlord 12-22-2012 13:08

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
Quote:

Originally Posted by Leonardo (Post 1858320)
primary
secondary
melee
spy watches / build pda
disguise kit / destroy pda
builder / head
misc / misc2
action

builder shares a slot with head? Are you sure that's right?

NameUser 12-26-2012 22:24

Re: [TF2 + TF2Items + TF2Items GiveWeapon] How to make a custom gamemode
 
Quote:

Originally Posted by Powerlord (Post 1858386)
builder shares a slot with head? Are you sure that's right?

I'd doubt it would share a slot with 'head'.


All times are GMT -4. The time now is 10:58.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.