Easy Way to port an existing Eventscripts Addon

All other Source.Python topics and issues.
simonus
Junior Member
Posts: 2
Joined: Mon Aug 27, 2012 9:00 pm

Easy Way to port an existing Eventscripts Addon

Postby simonus » Tue Aug 28, 2012 11:04 am

Hey,

i got an old plugin that i would like to use on my csgo server. Is there an easy way to port the Eventscripts addon?

Thanks in advance

Simon
User avatar
Kami
Global Moderator
Posts: 263
Joined: Wed Aug 15, 2012 1:24 am
Location: Germany

Postby Kami » Tue Aug 28, 2012 11:44 am

There is nothing like an ultra easy way (like a ES->SP translator or something).

Best you can do is post the script here or post its ES link so people here can give it a try (if its possible yet)
User avatar
Monday
Administrator
Posts: 98
Joined: Thu Jul 12, 2012 4:15 am

Postby Monday » Tue Aug 28, 2012 3:12 pm

Old eventscripts addons are not compatible with Source.Python at all, the addon would have to be modified to work and there is no automation for that.
simonus
Junior Member
Posts: 2
Joined: Mon Aug 27, 2012 9:00 pm

Postby simonus » Tue Aug 28, 2012 7:06 pm

Kami wrote:Best you can do is post the script here or post its ES link so people here can give it a try (if its possible yet)



I would love if you could port it... I really do love this addon...

Code: Select all

   /////////////////////////////////////////////////////
  //Ichthys Elimination Mod for Mattie's Eventscripts//
 //------------http://eventscripts.com--------------//
/////////////////////////////////////////////////////

  //   \\
 //About\\
//       \\
//Elimination works like this. A player is killed, the victims of that player will be respawned.
//Simple as that. This means that anytime you kill an opponent you will be reviving all the players that he killed.

//If a player suicides he will be respawned after a delay. All players he killed will respawn
//If a player is team killed, he will be respawned after a delay. All players he killed will respawn

//There are still other gameplay modes that I would like to add.
//Right now it works well along side normal CSS game play.
//A FFA version would be great aswell as a Team DM version without objectives.


block config
{
   //Elimination Mod Settings

   //Selfkill settings
   elim_suicide_respawn 1 //If set to 1, players that suicide will be automatically respawned
   elim_suicide_respawn_delay 5 //Delay to automatically respawn player

   //Teamkill settings
   elim_teamkill_respawn 1 //If a player is TK'd respawn victim
   elim_teamkill_respawn_delay 5 //Delay to automatically respawn TK victim
}

block respawn
{
   es est_spawn server_var(elim_userid) // Other spawn command
}

event player_spawn
{
   es_keysetvalue elimination event_var(userid) killedby 0
   es_keysetvalue elimination event_var(userid) killidstring _

   es_format elim_replace _%1_ event_var(userid)
   if (event_var(es_userteam) equalto 2) do
   {
      es_string elim_alive_ct replace server_var(elim_replace) _
      es_string elim_alive_t replace server_var(elim_replace) _
      es_format elim_alive_t %1%2_ server_var(elim_alive_t) event_var(userid)
   }
   if (event_var(es_userteam) equalto 3) do
   {
      es_string elim_alive_t replace server_var(elim_replace) _
      es_string elim_alive_ct replace server_var(elim_replace) _
      es_format elim_alive_ct %1%2_ server_var(elim_alive_ct) event_var(userid)
   }
}

event player_connect
{
   es_keycreate elimination event_var(userid)
   es_keysetvalue elimination event_var(userid) killedby 0
   es_keysetvalue elimination event_var(userid) killidstring _
}

event player_disconnect
{
   //Remove from killers string
   es_keygetvalue elim_userid elimination event_var(userid) killedby
   es_keygetvalue elim_killidstring elimination server_var(elim_userid) killidstring
   es_format elim_replace _%1_ server_var(elim_userid)
   es_string elim_killidstring replace server_var(elim_replace) _
   es_keysetvalue elimination server_var(elim_userid) killidstring server_var(elim_killidstring)

   //Spawn players killed by victim
   es_setinfo elim_userid event_var(userid)
   es_xdoblock ich_elimination/respawnplayers
   
   es_keydelete elimination event_var(userid)
}

event player_death
{
   //Alive strings and roundend check
   es_format elim_replace _%1_ event_var(userid)

   //Remove from both just incase
   es_string elim_alive_t replace server_var(elim_replace) _
   es_string elim_alive_ct replace server_var(elim_replace) _

   es_token elim_token server_var(elim_alive_ct) 0 _
   if (server_var(elim_token) equalto 0) then es_xsetinfo elim_roundended 1
   es_token elim_token server_var(elim_alive_t) 0 _
   if (server_var(elim_token) equalto 0) then es_xsetinfo elim_roundended 1

   if (server_var(elim_roundended) = 0) do
   {
      //tk
      //suicide
      //worldspawn
      //normal
      
      //Worldspawn - fall to death
      if (event_var(attacker) = 0) do
      {
         if (server_var(elim_suicide_respawn) = 1) do
         {
            //elim_respawn delayed <userid> <round>
            es_delayed server_var(elim_suicide_respawn_delay) elim_respawn delayed event_var(userid) server_var(elim_roundcount)
            es_tell event_var(userid) #multi #green[Ich Elimination] #lightgreenSuicide auto-respawn enabled: server_var(elim_suicide_respawn_delay) seconds
         }
      }
      else do
      {
         //Suicide
         if (event_var(userid) = event_var(attacker)) do
         {
            if (server_var(elim_suicide_respawn) = 1) do
            {
               //elim_respawn delayed <userid> <round>
               es_delayed server_var(elim_suicide_respawn_delay) elim_respawn delayed event_var(userid) server_var(elim_roundcount)
               es_tell event_var(userid) #multi #green[Ich Elimination] #lightgreenSuicide auto-respawn enabled: server_var(elim_suicide_respawn_delay) seconds
            }
         }
         else do
         {
            if (event_var(es_userteam) = event_var(es_attackerteam)) do
            {
               if (server_var(elim_teamkill_respawn) = 1) do
               {
                  //elim_respawn delayed <userid> <round>
                  es_delayed server_var(elim_teamkill_respawn_delay) elim_respawn delayed event_var(userid) server_var(elim_roundcount)
                  es_tell event_var(userid) #multi #green[Ich Elimination] #lightgreenTeam kill auto-respawn enabled: server_var(elim_suicide_respawn_delay) seconds
               }
            }
            else do
            {
               //Set killer's ID
               es_keysetvalue elimination event_var(userid) killedby event_var(attacker)
               
               //Add to attackers list
               es_keygetvalue elim_killidstring elimination event_var(attacker) killidstring
               es_format elim_replace _%1_ event_var(userid)
               es_string elim_killidstring replace server_var(elim_replace) _
               es_format elim_killidstring %1%2_ server_var(elim_killidstring) event_var(userid)
               es_keysetvalue elimination event_var(attacker) killidstring server_var(elim_killidstring)
               
               es_tell event_var(userid) #multi #greenYou will spawn when #default event_var(es_attackername) #green dies
            }
         }
      }
      
      //Spawn players killed by victim
      es_setinfo elim_userid event_var(userid)
      es_xdoblock ich_elimination/respawnplayers   
   }
}

block respawnplayers
{
   es_keygetvalue elim_killidstring elimination server_var(elim_userid) killidstring
   if (server_var(elim_killidstring) notequalto _) do
   {
      es_xsetinfo elim_message spawned
      es_xdoblock ich_elimination/respawnplayers_loop
      es_format elim_message "%1" server_var(elim_message)
      es_msg server_var(elim_message)
   }
   es_keysetvalue elimination server_var(elim_userid) killidstring _
}

block respawnplayers_loop
{
   es_xsetinfo elim_token 0
   es_token elim_token server_var(elim_killidstring) 1 _
   if (server_var(elim_roundended) = 0) do
   {
      es est_spawn server_var(elim_token)
      es_getplayername elim_name server_var(elim_token)
      es_format elim_message "%1, %2" server_var(elim_name) server_var(elim_message)
   }

   es_format elim_replace _%1_ server_var(elim_token)
   es_string elim_killidstring replace server_var(elim_replace) _
   if (server_var(elim_killidstring) notequalto _) then es_xdoblock ich_elimination/respawnplayers_loop
}

block elim_respawn
{
   //elim_respawn delayed <userid> <round>
   es_xsetinfo elim_arg1 0
   es_xgetargv elim_arg1 1
   if (server_var(elim_arg1) = delayed) do
   {
      es_xsetinfo elim_userid 0
      es_xgetargv elim_userid 2
      es_xsetinfo elim_arg3 0
      es_xgetargv elim_arg3 3
      es_getuserid elim_userid server_var(elim_userid)
      if (server_var(elim_userid) != 0) do
      {
         if (server_var(elim_arg3) = server_var(elim_roundcount)) then es_xdoblock ich_elimination/respawn
      }
   }
}

block init
{
   es_xkeygroupcreate elimination

   es_xsetinfo elim_version 0.4
   es_makepublic elim_version
   es_xsetinfo elim_userid 0
   es_xsetinfo elim_killidstring 0
   es_xsetinfo elim_token 0
   es_xsetinfo elim_replace 0
   es_xsetinfo elim_userid 0
   es_xsetinfo elim_index 0
   es_xsetinfo elim_name 0
   es_xsetinfo elim_exists 0
   es_xsetinfo elim_disable_c4 0
   es_xsetinfo elim_disable_hostages 0
   
   es_exists elim_exists variable elim_alive_ct
   if (server_var(elim_exists) = 0) do
   {
      es_xsetinfo elim_alive_ct _
      es_xsetinfo elim_alive_t _
   }
   
   es_xexists elim_exists command elim_respawn
   if (server_var(elim_exists) = 0) then es_xregcmd elim_respawn "ich_elimination/elim_respawn" "Elimination Mod Delay Respawn Command"
   
   es_xsetinfo elim_suicide_respawn 0
   es_xsetinfo elim_suicide_respawn_delay 0
   es_xsetinfo elim_teamkill_respawn 0
   es_xsetinfo elim_teamkill_respawn_delay 0
   
   es_xdoblock ich_elimination/config

   es_xcreateplayerlist elim
   es_xforeachkey key in elim "es_keycreate elimination server_var(key); es_keysetvalue elimination server_var(key) killedby 0; es_keysetvalue elimination server_var(key) killidstring _"
   es_xkeygroupdelete elim
   es_xlog Ichthys Elimination Mod Init Executed
}

block load
{
   es_xdoblock ich_elimination/init
}
block unload
{
   es_keygroupdelete elimination
}
event round_end
{
   es_xsetinfo elim_roundended 1
}
event round_start
{
   es_xmath elim_roundcount + 1
   es_xsetinfo elim_roundended 0
}
event es_map_start
{
   es_xsetinfo elim_roundcount 0
   es_xsetinfo elim_roundended 1
}
event bomb_exploded
{
   es_xsetinfo elim_roundended 1
}
event bomb_defused
{
   es_xsetinfo elim_roundended 1
}
event hostage_rescued_all
{
   es_xsetinfo elim_roundended 1
}

User avatar
BackRaw
Senior Member
Posts: 537
Joined: Sun Jul 15, 2012 1:46 am
Location: Germany
Contact:

Postby BackRaw » Tue Aug 28, 2012 9:34 pm

simonus wrote:I would love if you could port it... I really do love this addon...

Code: Select all

   /////////////////////////////////////////////////////
  //Ichthys Elimination Mod for Mattie's Eventscripts//
 //------------http://eventscripts.com--------------//
/////////////////////////////////////////////////////

  //   \\
 //About\\
//       \\
//Elimination works like this. A player is killed, the victims of that player will be respawned.
//Simple as that. This means that anytime you kill an opponent you will be reviving all the players that he killed.

//If a player suicides he will be respawned after a delay. All players he killed will respawn
//If a player is team killed, he will be respawned after a delay. All players he killed will respawn

//There are still other gameplay modes that I would like to add.
//Right now it works well along side normal CSS game play.
//A FFA version would be great aswell as a Team DM version without objectives.


block config
{
   //Elimination Mod Settings

   //Selfkill settings
   elim_suicide_respawn 1 //If set to 1, players that suicide will be automatically respawned
   elim_suicide_respawn_delay 5 //Delay to automatically respawn player

   //Teamkill settings
   elim_teamkill_respawn 1 //If a player is TK'd respawn victim
   elim_teamkill_respawn_delay 5 //Delay to automatically respawn TK victim
}

block respawn
{
   es est_spawn server_var(elim_userid) // Other spawn command
}

event player_spawn
{
   es_keysetvalue elimination event_var(userid) killedby 0
   es_keysetvalue elimination event_var(userid) killidstring _

   es_format elim_replace _%1_ event_var(userid)
   if (event_var(es_userteam) equalto 2) do
   {
      es_string elim_alive_ct replace server_var(elim_replace) _
      es_string elim_alive_t replace server_var(elim_replace) _
      es_format elim_alive_t %1%2_ server_var(elim_alive_t) event_var(userid)
   }
   if (event_var(es_userteam) equalto 3) do
   {
      es_string elim_alive_t replace server_var(elim_replace) _
      es_string elim_alive_ct replace server_var(elim_replace) _
      es_format elim_alive_ct %1%2_ server_var(elim_alive_ct) event_var(userid)
   }
}

event player_connect
{
   es_keycreate elimination event_var(userid)
   es_keysetvalue elimination event_var(userid) killedby 0
   es_keysetvalue elimination event_var(userid) killidstring _
}

event player_disconnect
{
   //Remove from killers string
   es_keygetvalue elim_userid elimination event_var(userid) killedby
   es_keygetvalue elim_killidstring elimination server_var(elim_userid) killidstring
   es_format elim_replace _%1_ server_var(elim_userid)
   es_string elim_killidstring replace server_var(elim_replace) _
   es_keysetvalue elimination server_var(elim_userid) killidstring server_var(elim_killidstring)

   //Spawn players killed by victim
   es_setinfo elim_userid event_var(userid)
   es_xdoblock ich_elimination/respawnplayers
   
   es_keydelete elimination event_var(userid)
}

event player_death
{
   //Alive strings and roundend check
   es_format elim_replace _%1_ event_var(userid)

   //Remove from both just incase
   es_string elim_alive_t replace server_var(elim_replace) _
   es_string elim_alive_ct replace server_var(elim_replace) _

   es_token elim_token server_var(elim_alive_ct) 0 _
   if (server_var(elim_token) equalto 0) then es_xsetinfo elim_roundended 1
   es_token elim_token server_var(elim_alive_t) 0 _
   if (server_var(elim_token) equalto 0) then es_xsetinfo elim_roundended 1

   if (server_var(elim_roundended) = 0) do
   {
      //tk
      //suicide
      //worldspawn
      //normal
      
      //Worldspawn - fall to death
      if (event_var(attacker) = 0) do
      {
         if (server_var(elim_suicide_respawn) = 1) do
         {
            //elim_respawn delayed <userid> <round>
            es_delayed server_var(elim_suicide_respawn_delay) elim_respawn delayed event_var(userid) server_var(elim_roundcount)
            es_tell event_var(userid) #multi #green[Ich Elimination] #lightgreenSuicide auto-respawn enabled: server_var(elim_suicide_respawn_delay) seconds
         }
      }
      else do
      {
         //Suicide
         if (event_var(userid) = event_var(attacker)) do
         {
            if (server_var(elim_suicide_respawn) = 1) do
            {
               //elim_respawn delayed <userid> <round>
               es_delayed server_var(elim_suicide_respawn_delay) elim_respawn delayed event_var(userid) server_var(elim_roundcount)
               es_tell event_var(userid) #multi #green[Ich Elimination] #lightgreenSuicide auto-respawn enabled: server_var(elim_suicide_respawn_delay) seconds
            }
         }
         else do
         {
            if (event_var(es_userteam) = event_var(es_attackerteam)) do
            {
               if (server_var(elim_teamkill_respawn) = 1) do
               {
                  //elim_respawn delayed <userid> <round>
                  es_delayed server_var(elim_teamkill_respawn_delay) elim_respawn delayed event_var(userid) server_var(elim_roundcount)
                  es_tell event_var(userid) #multi #green[Ich Elimination] #lightgreenTeam kill auto-respawn enabled: server_var(elim_suicide_respawn_delay) seconds
               }
            }
            else do
            {
               //Set killer's ID
               es_keysetvalue elimination event_var(userid) killedby event_var(attacker)
               
               //Add to attackers list
               es_keygetvalue elim_killidstring elimination event_var(attacker) killidstring
               es_format elim_replace _%1_ event_var(userid)
               es_string elim_killidstring replace server_var(elim_replace) _
               es_format elim_killidstring %1%2_ server_var(elim_killidstring) event_var(userid)
               es_keysetvalue elimination event_var(attacker) killidstring server_var(elim_killidstring)
               
               es_tell event_var(userid) #multi #greenYou will spawn when #default event_var(es_attackername) #green dies
            }
         }
      }
      
      //Spawn players killed by victim
      es_setinfo elim_userid event_var(userid)
      es_xdoblock ich_elimination/respawnplayers   
   }
}

block respawnplayers
{
   es_keygetvalue elim_killidstring elimination server_var(elim_userid) killidstring
   if (server_var(elim_killidstring) notequalto _) do
   {
      es_xsetinfo elim_message spawned
      es_xdoblock ich_elimination/respawnplayers_loop
      es_format elim_message "%1" server_var(elim_message)
      es_msg server_var(elim_message)
   }
   es_keysetvalue elimination server_var(elim_userid) killidstring _
}

block respawnplayers_loop
{
   es_xsetinfo elim_token 0
   es_token elim_token server_var(elim_killidstring) 1 _
   if (server_var(elim_roundended) = 0) do
   {
      es est_spawn server_var(elim_token)
      es_getplayername elim_name server_var(elim_token)
      es_format elim_message "%1, %2" server_var(elim_name) server_var(elim_message)
   }

   es_format elim_replace _%1_ server_var(elim_token)
   es_string elim_killidstring replace server_var(elim_replace) _
   if (server_var(elim_killidstring) notequalto _) then es_xdoblock ich_elimination/respawnplayers_loop
}

block elim_respawn
{
   //elim_respawn delayed <userid> <round>
   es_xsetinfo elim_arg1 0
   es_xgetargv elim_arg1 1
   if (server_var(elim_arg1) = delayed) do
   {
      es_xsetinfo elim_userid 0
      es_xgetargv elim_userid 2
      es_xsetinfo elim_arg3 0
      es_xgetargv elim_arg3 3
      es_getuserid elim_userid server_var(elim_userid)
      if (server_var(elim_userid) != 0) do
      {
         if (server_var(elim_arg3) = server_var(elim_roundcount)) then es_xdoblock ich_elimination/respawn
      }
   }
}

block init
{
   es_xkeygroupcreate elimination

   es_xsetinfo elim_version 0.4
   es_makepublic elim_version
   es_xsetinfo elim_userid 0
   es_xsetinfo elim_killidstring 0
   es_xsetinfo elim_token 0
   es_xsetinfo elim_replace 0
   es_xsetinfo elim_userid 0
   es_xsetinfo elim_index 0
   es_xsetinfo elim_name 0
   es_xsetinfo elim_exists 0
   es_xsetinfo elim_disable_c4 0
   es_xsetinfo elim_disable_hostages 0
   
   es_exists elim_exists variable elim_alive_ct
   if (server_var(elim_exists) = 0) do
   {
      es_xsetinfo elim_alive_ct _
      es_xsetinfo elim_alive_t _
   }
   
   es_xexists elim_exists command elim_respawn
   if (server_var(elim_exists) = 0) then es_xregcmd elim_respawn "ich_elimination/elim_respawn" "Elimination Mod Delay Respawn Command"
   
   es_xsetinfo elim_suicide_respawn 0
   es_xsetinfo elim_suicide_respawn_delay 0
   es_xsetinfo elim_teamkill_respawn 0
   es_xsetinfo elim_teamkill_respawn_delay 0
   
   es_xdoblock ich_elimination/config

   es_xcreateplayerlist elim
   es_xforeachkey key in elim "es_keycreate elimination server_var(key); es_keysetvalue elimination server_var(key) killedby 0; es_keysetvalue elimination server_var(key) killidstring _"
   es_xkeygroupdelete elim
   es_xlog Ichthys Elimination Mod Init Executed
}

block load
{
   es_xdoblock ich_elimination/init
}
block unload
{
   es_keygroupdelete elimination
}
event round_end
{
   es_xsetinfo elim_roundended 1
}
event round_start
{
   es_xmath elim_roundcount + 1
   es_xsetinfo elim_roundended 0
}
event es_map_start
{
   es_xsetinfo elim_roundcount 0
   es_xsetinfo elim_roundended 1
}
event bomb_exploded
{
   es_xsetinfo elim_roundended 1
}
event bomb_defused
{
   es_xsetinfo elim_roundended 1
}
event hostage_rescued_all
{
   es_xsetinfo elim_roundended 1
}



I'll give it a try sometime, I need to practise the new API anyway :)
User avatar
Kami
Global Moderator
Posts: 263
Joined: Wed Aug 15, 2012 1:24 am
Location: Germany

Postby Kami » Tue Aug 28, 2012 9:43 pm

Well the problem here is the respawn thing. We can set the props to "revive" someone but we lack an es_respawnplayer equivalent. Not sure if you can bypass that in any way.
User avatar
Monday
Administrator
Posts: 98
Joined: Thu Jul 12, 2012 4:15 am

Postby Monday » Tue Aug 28, 2012 10:15 pm

If someone wanted to get very cleaver (and in my opinion waste a lot of time), they could code an addon in python to run these old ESS addons.
User avatar
BackRaw
Senior Member
Posts: 537
Joined: Sun Jul 15, 2012 1:46 am
Location: Germany
Contact:

Postby BackRaw » Wed Aug 29, 2012 12:01 am

I'll try this out, hope it works :)

Syntax: Select all

# addons/source-python/elimination/elimination.py

# anytime you kill an opponent you will be reviving all the players that he killed.
# If a player suicides he will be respawned after a delay. All players he killed will respawn
# If a player is team killed, he will be respawned after a delay. All players he killed will respawn

# =============================================================================
# >> IMPORTS
# =============================================================================
# Python Imports
from threading import Timer

# Source.Python Imports
from events import Event
from players import EasyPlayer

# =============================================================================
# >> CONSTANTS
# =============================================================================
RESPAWN_DELAY_SUICIDE 5.0
RESPAWN_DELAY_TEAMKILL 5.0

# =============================================================================
# >> GLOBAL VARIABLES
# =============================================================================
myplayers = {} # declare our player dictionary

# =============================================================================
# >> HELPER FUNCTIONS
# =============================================================================
def RespawnPlayer(victim):
# respawn the victim
pass

# =============================================================================
# >> EVENTS
# =============================================================================
@Event
def player_death(GameEvent):
victim = GameEvent.GetInt("userid")
attacker = GameEvent.GetInt("attacker")

victimteam = EasyPlayer(victim).team

if not victim in myplayers.keys():
myplayers[victim] = []

# temporary, because nothing like ES gamethread has been added to SP yet

# respawn the suicided or team-killed victim after the specified time
if not attacker:
timer = Timer(RESPAWN_DELAY_SUICIDE, RespawnPlayer, victim)
else:
if not attacker in myplayers.keys():
myplayers[attacker] = []

if EasyPlayer(attacker).team == myvictimteam:
timer = Timer(RESPAWN_DELAY_TEAMKILL, RespawnPlayer, victim)
else:
myplayers[attacker].append(victim)

if myplayers[victim]:
for killed in myplayers[victim]:
RespawnPlayer(killed)
myplayers[victim].remove(killed)

timer.start()

@Event # do I need this here ?
def unload():
myplayers.clear() # clear out our player dictionary
User avatar
Ayuto
Project Leader
Posts: 2195
Joined: Sat Jul 07, 2012 8:17 am
Location: Germany

Postby Ayuto » Wed Aug 29, 2012 8:30 am

BackRaw wrote:

Syntax: Select all

@Event # do I need this here ?
def unload():
myplayers.clear() # clear out our player dictionary

No, this is handled here: http://code.google.com/p/source-python/source/browse/addons/source-python/_libs/addons/manager.py#92 ;)
User avatar
BackRaw
Senior Member
Posts: 537
Joined: Sun Jul 15, 2012 1:46 am
Location: Germany
Contact:

Postby BackRaw » Wed Aug 29, 2012 11:37 am



Yeah, figured that out myself :) thanks.
User avatar
BackRaw
Senior Member
Posts: 537
Joined: Sun Jul 15, 2012 1:46 am
Location: Germany
Contact:

Postby BackRaw » Mon Sep 03, 2012 11:10 am

@simonus: since the respawning has been discussed and works now, it should be easy. I got time tonight to finish the script :)

Return to “General Discussion”

Who is online

Users browsing this forum: No registered users and 44 guests