Skip to content
Snippets Groups Projects
Select Git revision
  • 079ef023c98971c1ac50f4ce3989a5a80556bf5b
  • master default protected
  • skip-empty-gametypes
  • menu-soc-bullshit
  • md2-rollangle
  • titlecard-options
  • pk3-xtra-comm-fix
  • lua-fix
  • starpost-config-additions
  • pictureformats
  • linedef-args
  • dashmode-tweaks
  • next
  • highresscale-continue
  • names-update
  • udmf-next
  • ignore-glsegs
  • more-opengl-fixes
  • fix-mouse-grabbing
  • models-mkii
  • grr-lj
  • SRB2_release_2.2.0
  • SRB2_release_2.1.25
  • SRB2_release_2.1.24
  • SRB2_release_2.1.23
  • SRB2_release_2.1.22
  • SRB2_release_2.1.21
  • SRB2_release_2.1.20
  • SRB2_release_2.1.19
  • SRB2_release_2.1.18
  • td-release-v1.0.0
  • SRB2_release_2.1.17
  • SRB2_release_2.1.16a
  • SRB2_release_2.1.16
  • SRB2_release_2.1.15
  • SRB2_release_2.1.14
  • SRB2_release_2.1.12
  • SRB2_release_2.1.11
  • SRB2_release_2.1.10
  • SRB2_release_2.1.9
  • SRB2_release_2.1.8
41 results

lua_script.c

Blame
  • Forked from STJr / SRB2
    Source project has a limited visibility.
    lua_playerlib.c 25.37 KiB
    // SONIC ROBO BLAST 2
    //-----------------------------------------------------------------------------
    // Copyright (C) 2012-2016 by John "JTE" Muniz.
    // Copyright (C) 2012-2018 by Sonic Team Junior.
    //
    // This program is free software distributed under the
    // terms of the GNU General Public License, version 2.
    // See the 'LICENSE' file for more details.
    //-----------------------------------------------------------------------------
    /// \file  lua_playerlib.c
    /// \brief player object library for Lua scripting
    
    #include "doomdef.h"
    #ifdef HAVE_BLUA
    #include "fastcmp.h"
    #include "p_mobj.h"
    #include "d_player.h"
    #include "g_game.h"
    #include "p_local.h"
    
    #include "lua_script.h"
    #include "lua_libs.h"
    #include "lua_hud.h" // hud_running errors
    
    static int lib_iteratePlayers(lua_State *L)
    {
    	INT32 i = -1;
    	if (lua_gettop(L) < 2)
    	{
    		//return luaL_error(L, "Don't call players.iterate() directly, use it as 'for player in players.iterate do <block> end'.");
    		lua_pushcfunction(L, lib_iteratePlayers);
    		return 1;
    	}
    	lua_settop(L, 2);
    	lua_remove(L, 1); // state is unused.
    	if (!lua_isnil(L, 1))
    		i = (INT32)(*((player_t **)luaL_checkudata(L, 1, META_PLAYER)) - players);
    	for (i++; i < MAXPLAYERS; i++)
    	{
    		if (!playeringame[i])
    			continue;
    		if (!players[i].mo)
    			continue;
    		LUA_PushUserdata(L, &players[i], META_PLAYER);
    		return 1;
    	}
    	return 0;
    }
    
    static int lib_getPlayer(lua_State *L)
    {
    	const char *field;
    	// i -> players[i]
    	if (lua_type(L, 2) == LUA_TNUMBER)
    	{
    		lua_Integer i = luaL_checkinteger(L, 2);
    		if (i < 0 || i >= MAXPLAYERS)
    			return luaL_error(L, "players[] index %d out of range (0 - %d)", i, MAXPLAYERS-1);
    		if (!playeringame[i])
    			return 0;
    		if (!players[i].mo)
    			return 0;
    		LUA_PushUserdata(L, &players[i], META_PLAYER);
    		return 1;
    	}
    
    	field = luaL_checkstring(L, 2);
    	if (fastcmp(field,"iterate"))
    	{
    		lua_pushcfunction(L, lib_iteratePlayers);