Page 1 of 1

PlayerEntity.freeze issue

Posted: Fri Oct 31, 2014 2:58 am
by 8guawong
satoon101 wrote:def setfreeze(index, value):
PlayerEntity(index).freeze = value



this does not work

Syntax: Select all

@Event
def player_jump(game_event):
index = index_from_userid(game_event.get_int('userid'))
player = PlayerEntity(index)
player.freeze = 1


Code: Select all

  File '../addons/source-python/plugins/test/test.py', line 16, in player_jump
    player.freeze = 1
  File '../addons/source-python/packages/source-python/entities/entity.py', line 208, in __setattr__
    self._set_property(attr, value)
  File '../addons/source-python/packages/source-python/entities/entity.py', line 253, in _set_property
    value = prop[str(value)]

KeyError: '1'

Posted: Fri Oct 31, 2014 4:33 am
by L'In20Cible

Syntax: Select all

player.freeze = True

Posted: Sat Nov 01, 2014 10:09 pm
by satoon101
As L'In20Cible's example shows, getting/setting values like freeze are boolean in nature. They require a boolean when setting, and are returned as a boolean when getting. Using an integer instead of a boolean when setting will result in the error you received.

PlayerEntity.freeze issue

Posted: Mon Nov 24, 2014 1:57 pm
by 8guawong

Syntax: Select all

from players.helpers import index_from_userid
from events import Event
from players.entity import PlayerEntity

@Event
def player_spawn(game_event):
userid = game_event.get_int('userid')
index = index_from_userid(userid)
player = PlayerEntity(index)
player.freeze = True


doesn't work
csgo

chaging event to player_jump works...
wonder why?

Posted: Mon Nov 24, 2014 2:30 pm
by satoon101
Are you using that in a round-based gamemode? If so, then you should know that players are already frozen on spawn and on round_freeze_end are unfrozen. This is likely your issue. Using the following works for me:

Syntax: Select all

from events import Event
from filters.players import PlayerIter

@Event
def round_freeze_end(game_event):
for player in PlayerIter('bot', return_types='player'):
player.freeze = True


We are starting to get very off-topic for this thread, though...

Posted: Mon Nov 24, 2014 2:39 pm
by L'In20Cible
Well, you cannot freeze a player on player_spawn. As soon as round_freeze_end fires, players are unfrozen.

EDIT: I took a shower and didn't refresh the thread, heh.

Posted: Mon Nov 24, 2014 2:47 pm
by 8guawong
but i have mp_freezetime set to 0
hmm so there is no way to freeze some1 when he/she spawns

cuz then if person joins late and spawns he won't get freezed

maybe do a round_start freeze

then leave player_spawn freeze code in as well hmmmm?

sorry for making this thread off topic :X

Posted: Mon Nov 24, 2014 2:50 pm
by L'In20Cible
Like Satoon mentionned, this is getting off-topic. Please, create a new topic if you want further help.

Posted: Mon Nov 24, 2014 2:59 pm
by satoon101
Yes, I would probably use player_spawn for late joiners. I went ahead and moved the last several posts to their own thread (obviously).

Posted: Mon Nov 24, 2014 3:01 pm
by L'In20Cible
Something like this should works just fine:

Syntax: Select all

from events import Event
from filters.players import PlayerIter
from players.entity import PlayerEntity
from players.helpers import index_from_userid

frozen_players = set()

@Event
def player_spawn(game_event):
userid = game_event.get_int('userid')
index = index_from_userid(userid)
player = PlayerEntity(index)
player.freeze = True
frozen_players.add(index)

@Event
def round_freeze_end(game_event):
for player in PlayerIter('alive', return_types='player'):
if player.index not in frozen_players:
continue
player.freeze = True
frozen_players.clear()

Posted: Tue Nov 25, 2014 1:27 am
by 8guawong
ok thanks