void LuaGossip::OnHello(Object* pObject, Player* Plr)
{
    GET_LOCK;
    if(pObject->GetTypeId() == TYPEID_UNIT)
    {
        if(m_unit_gossip_binding == NULL) { RELEASE_LOCK; return; }

        lua_engine::BeginLuaFunctionCall(m_unit_gossip_binding->refs[GOSSIP_EVENT_ON_TALK]);
        push_creature(TO_CREATURE(pObject));
        push_int(GOSSIP_EVENT_ON_TALK);
        push_player(Plr);
        lua_engine::ExecuteLuaFunction(3);
    }
    else if(pObject->GetTypeId() == TYPEID_ITEM)
    {
        if(m_item_gossip_binding == NULL) { RELEASE_LOCK; return; }

        lua_engine::BeginLuaFunctionCall(m_item_gossip_binding->refs[GOSSIP_EVENT_ON_TALK]);
        push_item(TO_ITEM(pObject));
        push_int(GOSSIP_EVENT_ON_TALK);
        push_player(Plr);
        lua_engine::ExecuteLuaFunction(3);
    }
    else if(pObject->GetTypeId() == TYPEID_GAMEOBJECT)
    {
        if(m_go_gossip_binding == NULL) { RELEASE_LOCK; return; }

        lua_engine::BeginLuaFunctionCall(m_go_gossip_binding->refs[GOSSIP_EVENT_ON_TALK]);
        push_go(TO_GAMEOBJECT(pObject));
        push_int(GOSSIP_EVENT_ON_TALK);
        push_player(Plr);
        lua_engine::ExecuteLuaFunction(3);
    }
    RELEASE_LOCK
}
void LuaGameObject::OnActivate(Player* pPlayer)
{
    NULL_BINDING_CHECK

    lua_engine::BeginLuaFunctionCall(m_binding->refs[GAMEOBJECT_EVENT_ON_USE]);
    push_go(_gameobject);
    push_int(GAMEOBJECT_EVENT_ON_USE);
    push_player(pPlayer);
    lua_engine::ExecuteLuaFunction(3);
    RELEASE_LOCK
}
void LuaCreature::OnLootTaken(Player* pPlayer, ItemPrototype* pItemPrototype)
{
	NULL_BINDING_CHECK

	lua_engine::BeginLuaFunctionCall(m_binding->refs[CREATURE_EVENT_ON_LOOT_TAKEN]);
	push_creature(_unit);
	push_int(CREATURE_EVENT_ON_LOOT_TAKEN);
	push_player(pPlayer);
	push_int(pItemPrototype->ItemId);
	lua_engine::ExecuteLuaFunction(4);
	RELEASE_LOCK
}
void LuaGameObject::OnLootTaken(Player* pLooter, ItemPrototype* pItemInfo)
{

    NULL_BINDING_CHECK

    lua_engine::BeginLuaFunctionCall(m_binding->refs[GAMEOBJECT_EVENT_ON_LOOT_TAKEN]);
    push_go(_gameobject);
    push_int(GAMEOBJECT_EVENT_ON_LOOT_TAKEN);
    push_player(pLooter);
    push_int(pItemInfo->ItemId);
    lua_engine::ExecuteLuaFunction(4);
    RELEASE_LOCK
}
void LuaGossip::OnSelectOption(Object* pObject, Player* Plr, uint32 Id, const char* EnteredCode)
{
    GET_LOCK;
    if(pObject->GetTypeId() == TYPEID_UNIT)
    {
        if(m_unit_gossip_binding == NULL) { RELEASE_LOCK; return; }

        lua_engine::BeginLuaFunctionCall(m_unit_gossip_binding->refs[GOSSIP_EVENT_ON_SELECT_OPTION]);
        push_creature(TO_CREATURE(pObject));
        push_int(GOSSIP_EVENT_ON_SELECT_OPTION);
        push_player(Plr);
        push_int(Id);
        push_str(EnteredCode);
        lua_engine::ExecuteLuaFunction(5);
    }
    else if(pObject->GetTypeId() == TYPEID_ITEM)
    {
        if(m_item_gossip_binding == NULL) { RELEASE_LOCK; return; }
        lua_engine::BeginLuaFunctionCall(m_item_gossip_binding->refs[GOSSIP_EVENT_ON_SELECT_OPTION]);
        push_item(TO_ITEM(pObject));
        push_int(GOSSIP_EVENT_ON_SELECT_OPTION);
        push_player(Plr);
        push_int(Id);
        push_str(EnteredCode);
        lua_engine::ExecuteLuaFunction(5);
    }
    else if(pObject->GetTypeId() == TYPEID_GAMEOBJECT)
    {
        if(m_go_gossip_binding == NULL) { RELEASE_LOCK; return; }
        lua_engine::BeginLuaFunctionCall(m_go_gossip_binding->refs[GOSSIP_EVENT_ON_SELECT_OPTION]);
        push_go(TO_GAMEOBJECT(pObject));
        push_int(GOSSIP_EVENT_ON_SELECT_OPTION);
        push_player(Plr);
        push_int(Id);
        push_str(EnteredCode);
        lua_engine::ExecuteLuaFunction(5);
    }
    RELEASE_LOCK
}
void LuaCreature::OnEmote(Player* pPlayer, EmoteType Emote)
{
	NULL_BINDING_CHECK

	lua_engine::BeginLuaFunctionCall(m_binding->refs[CREATURE_EVENT_ON_EMOTE]);
	push_creature(_unit);
	push_int(CREATURE_EVENT_ON_EMOTE);
	push_player(pPlayer);
	push_int((int)Emote);
	lua_engine::ExecuteLuaFunction(4);

	RELEASE_LOCK
}
Exemple #7
0
int Game_Manager::recycle_player(int gate_cid, int player_cid) {
	Server_Manager::recycle_player(gate_cid, player_cid);

	int cid = GET_CID(gate_cid, player_cid);
	Game_Player *player = dynamic_cast<Game_Player*>(find_cid_player(cid));
	if (!player) {
		return -1;
	}

	player_cid_map_.erase(cid);
	player_role_id_map_.erase(player->role_id());
	player_account_map_.erase(player->account());
	player->reset();
	push_player(player);
	return 0;
}
Exemple #8
0
bool			parse_opt_n(t_parse_argv *argv)
{
	t_sub			value;
	int32_t			player_id;

	if (!ft_argv_arg(&argv->args, &value) || value.length == 0)
		PARSE_ARGV_ERR("-n: Require a value");
	else if (ft_subto_int(value, &player_id) != value.length)
		PARSE_ARGV_ERR("-n: Invalid value: %ts", value);
	else if (next_player_id(&argv->vm_loader, player_id) != player_id)
		PARSE_ARGV_ERR("-n: Player id already used: %d", player_id);
	else if (!ft_argv_arg(&argv->args, &value))
		PARSE_ARGV_ERR("Missing file name for player %d", player_id);
	else
		return (push_player(argv, player_id, value));
	return (false);
}