搜索
查看: 4476|回复: 7

关于人物发光代码请教一下.怎设为像灯光一样的效果

[复制链接]
发表于 2010-2-2 06:32:37 | 显示全部楼层 |阅读模式 来自 广东广州
  1. #include <amxmodx>
  2. #include <fun>

  3. #define PAST 10


  4. new position[32][PAST][3]        // array to store positions for every player (position[playerID][moment in past][axis])
  5.                                 // [0] = newest position, [PAST - 1] = oldest position

  6. new mode_cvar, team_cvar, speed_cvar, glow_cvar;



  7. // primary function
  8. public set_alpha()
  9. {
  10.         new mode  = get_pcvar_num(mode_cvar)
  11.         new team  = get_pcvar_num(team_cvar)
  12.         new speed = get_pcvar_num(speed_cvar)
  13.         new glow  = get_pcvar_num(glow_cvar)


  14.         // if ghosts_mode is not in range, disable plugin
  15.         if (mode < 0 || mode > 2)
  16.         {
  17.                 mode = 0
  18.                 set_pcvar_num(mode_cvar, 0)
  19.         }

  20.         // if ghosts_team, ghosts_speed or ghosts_glow are not in range, fix them
  21.         if (team < 0 || team > 2)
  22.         {
  23.                 team = 0
  24.                 set_pcvar_num(team_cvar, 0)
  25.         }

  26.         if (speed < 1)
  27.         {
  28.                 speed = 1
  29.                 set_pcvar_num(speed_cvar, 1)
  30.         }
  31.         else
  32.         if (speed > 50)
  33.         {
  34.                 speed = 50
  35.                 set_pcvar_num(speed_cvar, 50)
  36.         }

  37.         if (glow < 0)
  38.         {
  39.                 glow = 0
  40.                 set_pcvar_num(glow_cvar, 0)
  41.         }
  42.         else
  43.         if (glow > 100)
  44.         {
  45.                 glow = 100
  46.                 set_pcvar_num(glow_cvar, 100)
  47.         }


  48.         new player[32], number, i
  49.         get_players(player, number)


  50.         // if the plugin is disabled, render the players correctly
  51.         if (mode != 1 && mode != 2)
  52.         {
  53.                 for (i = 0; i < number; i++)
  54.                         set_user_rendering(player[i], kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25)
  55.                 return PLUGIN_CONTINUE
  56.         }


  57.         new distance, j, x, y, z, player_team
  58.         for (i = 0; i < number; i++)
  59.         {
  60.                 // check if player is allowed to be a ghost
  61.                 player_team = get_user_team(player[i])
  62.                 if (player_team != team)
  63.                 {
  64.                         // shift all positions one right to make room for the new position
  65.                         for (j = PAST - 1; j > 0; j--)
  66.                         {
  67.                                 position[player[i]][j][0] = position[player[i]][j - 1][0]
  68.                                 position[player[i]][j][1] = position[player[i]][j - 1][1]
  69.                                 position[player[i]][j][2] = position[player[i]][j - 1][2]
  70.                         }
  71.                         get_user_origin(player[i], position[player[i]][0]) // get the new position

  72.                         // compute distance traveled in the last PAST frames
  73.                         distance = 0
  74.                         for (j = 1; j < PAST; j++)
  75.                         {                                       
  76.                                 x = position[player[i]][j - 1][0] - position[player[i]][j][0]
  77.                                 y = position[player[i]][j - 1][1] - position[player[i]][j][1]
  78.                                 z = position[player[i]][j - 1][2] - position[player[i]][j][2]
  79.                                 distance += sqroot(x * x + y * y + z * z)
  80.                         }
  81.                         distance /= (PAST - 1)        // make average distance; PAST points => PAST - 1 lines

  82.                         // make the player transparent or glow
  83.                         if (distance > speed)
  84.                                 set_user_rendering(player[i], kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)        // moving very fast :)
  85.                         else
  86.                                 if (mode == 2 && distance < speed * glow / 100)                                                // if condition is true then glow
  87.                                         if (player_team == 1)
  88.                                                 set_user_rendering(player[i], kRenderFxGlowShell, 0, 191, 255, kRenderNormal, 5)        // CT
  89.                                         else
  90.                                                 set_user_rendering(player[i], kRenderFxGlowShell, 255, 255, 0, kRenderNormal, 5)        // T
  91.                                 else        // partially visible (or totaly if not moving)
  92.                                         set_user_rendering(player[i], kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255 - 255 * distance / speed)
  93.                 }
  94.                 else
  95.                 {
  96.                         set_user_rendering(player[i], kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25) // normal rendering
  97.                 }
  98.         }

  99.         return PLUGIN_CONTINUE
  100. }



  101. // when a new round begins, set all the positions of the players to their original one (or players will be invisible when round begins)
  102. public new_round(id)
  103. {
  104.         new mode = get_pcvar_num(mode_cvar)

  105.         if (mode == 1 || mode == 2)
  106.         {
  107.                 get_user_origin(id, position[id][0])

  108.                 new i
  109.                 for (i = 1; i < PAST; i++)
  110.                 {
  111.                         position[id][i][0] = position[id][0][0]
  112.                         position[id][i][1] = position[id][0][1]
  113.                         position[id][i][2] = position[id][0][2]
  114.                 }
  115.         }

  116.         return PLUGIN_CONTINUE
  117. }



  118. // not interesting
  119. public plugin_init()
  120. {
  121.         register_plugin("Ghosts", "0.3a", "Spike7d8")
  122.         register_event("ResetHUD", "new_round", "b")
  123.         set_task(0.1, "set_alpha", 0, "", 0, "b")

  124.         mode_cvar  = register_cvar("ghosts_mode",  "2")
  125.         team_cvar  = register_cvar("ghosts_team",  "0")
  126.         speed_cvar = register_cvar("ghosts_speed", "25000")
  127.         glow_cvar  = register_cvar("ghosts_glow",  "25000")
  128. }
复制代码
 楼主| 发表于 2010-2-2 06:41:21 | 显示全部楼层 来自 广东广州
1# 点通粉丝
我就想把他改到脚以下位置都有那发光的效果
像开灯照着那种..请问怎样才可实现??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

发表于 2010-2-4 23:32:03 | 显示全部楼层 来自 浙江杭州
哈哈! 学习学习啊! 老大辛苦了啊!
回复

使用道具 举报

发表于 2010-2-26 20:10:30 | 显示全部楼层 来自 广东汕尾
这个渲染函数是对整个实体进行渲染的,不能渲染模型的一部分……
回复

使用道具 举报

发表于 2010-3-14 19:27:51 | 显示全部楼层 来自 江苏苏州
2# 点通粉丝


jnmjbnkmbkjbjbm b ,mb ,mbm,
回复

使用道具 举报

发表于 2010-3-14 19:30:06 | 显示全部楼层 来自 江苏苏州
1# 点通粉丝


师傅我来了,你到原地了吗?
回复

使用道具 举报

发表于 2011-8-9 06:03:13 | 显示全部楼层 来自 湖南长沙
看看 、
回复

使用道具 举报

发表于 2011-8-9 13:36:09 | 显示全部楼层 来自 广东东莞
求高人出现实现代码
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表