Page 1 of 1

need help setting models

Posted: Fri Sep 26, 2014 5:47 pm
by 8guawong

Syntax: Select all

from events import Event
from engines.server import engine_server
from players.entity import PlayerEntity
from players.helpers import index_from_userid
from stringtables.downloads import Downloadables

dl = Downloadables()
dl.add("materials/models/player/kuristaja/duke/duke_arms.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_body.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_body.vtf")
dl.add("materials/models/player/kuristaja/duke/duke_body_normal.vtf")
dl.add("materials/models/player/kuristaja/duke/duke_fingers.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_fingers2.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_hand.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_hand.vtf")
dl.add("materials/models/player/kuristaja/duke/duke_hand_normal.vtf")
dl.add("materials/models/player/kuristaja/duke/duke_hand2.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_head.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_head.vtf")
dl.add("materials/models/player/kuristaja/duke/duke_head_normal.vtf")
dl.add("materials/models/player/kuristaja/duke/duke_jeans.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_lightwarp.vtf")
dl.add("materials/models/player/kuristaja/duke/duke_shades.vmt")
dl.add("materials/models/player/kuristaja/duke/duke_shades.vtf")
dl.add("materials/models/player/kuristaja/duke/duke_shades_normal.vtf")
dl.add("models/player/kuristaja/duke/duke.phy")
dl.add("models/player/kuristaja/duke/duke.mdl")
dl.add("models/player/kuristaja/duke/duke.vvd")
dl.add("models/player/kuristaja/duke/duke.dx90.vtx")
dl.add("models/player/kuristaja/duke/duke_arms.mdl")
dl.add("models/player/kuristaja/duke/duke_arms.dx90.vtx")
dl.add("models/player/kuristaja/duke/duke_arms.vvd")

@Event
def player_jump(event):
global old_model
userid = event.get_int('userid')
index = index_from_userid(userid)
player = PlayerEntity(index)
old_model = player.model
model_index = engine_server.precache_model("models/player/kuristaja/duke/duke.mdl")
player.set_prop_int('m_nModelIndex', model_index)
color = (255*65792+255)
player.set_prop_int("m_nRenderMode", player.get_prop_int("m_nRenderMode") | 1)
player.set_prop_int("m_nRenderFX", player.get_prop_int("m_nRenderFX") | 256)
player.set_prop_int("m_clrRender", color)

@Event
def player_say(event):
userid = event.get_int('userid')
index = index_from_userid(userid)
player = PlayerEntity(index)
player.set_prop_int('m_nModelIndex', old_model)
color = (255*65792+255)
player.set_prop_int("m_nRenderMode", player.get_prop_int("m_nRenderMode") | 1)
player.set_prop_int("m_nRenderFX", player.get_prop_int("m_nRenderFX") | 256)
player.set_prop_int("m_clrRender", color)


can't set it back to original model @@

Code: Select all

 player.set_prop_int('m_nModelIndex', old_model)

Boost.Python.ArgumentError: Python argument types in
    Edict.set_prop_int(Edict, str, str)
did not match C++ signature:
    set_prop_int(edict_t*, char const* prop_name, int value

Posted: Fri Sep 26, 2014 6:55 pm
by Ayuto
Print "old_model" and "model_index" ind player_jump and you will see the reason for your error. But please post the full error next time. :)

Posted: Fri Sep 26, 2014 10:50 pm
by L'In20Cible
Yeah, PlayerEntity.model is a string while m_nModelIndex requires an integer. In any case, your code won't work with multiple players as you are overriding the "old_model" global variable every times a player jumps. What you want to use is a dictionary.

Syntax: Select all

# Get a global dictionary to store the models...
player_models = dict()

@Event
def player_jump(game_event):
# Get the player's index...
player_index = index_from_userid(game_event.get_int('userid'))

# Get a PlayerEntity instance of the player...
player = PlayerEntity(index)

# Store the player's current model index...
player_models[player_index] = player.get_prop_int('m_nModelIndex')


@Event
def player_say(game_event):
# Get the player's index...
player_index = index_from_userid(game_event.get_int('userid'))

# Is the player not in the dictionary?
if player_index not in player_models:

# No need to go further...
return

# Get a PlayerEntity instance of the player...
player = PlayerEntity(index)

# Restore back the player's model...
player.set_prop_int('m_nModelIndex', player_models[player_index])

# Delete the player from the dictionary...
del player_models[player_index]

Posted: Sat Sep 27, 2014 4:00 am
by 8guawong
thanks to both replies!
works now :cool: