yeren45 发表于 2009-3-8 22:10:51

跪求高手分离发钱源码·!

本帖最后由 yeren45 于 2009-3-8 22:17 编辑

张哥 帮我分离出了一马当先中的掉钱捡钱的源码。由此在这感谢!

希望高人再帮我从这个源码中 去除掉钱捡钱MDL模型的源码。只去除掉钱捡钱的功能·其他的不变·最大金钱为16000.   钱的模型还是MDL`
谢谢··
参数及命令介绍:

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>

#define MONEY_TIER 8000
#define MAX_DROPED_MONEY_COUNT 100

//Money事件msgid
new gmsg_Money

//开始金额和最大金额
new g_startmoney, g_maxmoney
new droped_money_count, g_roundcount
new g_NewRound = 0

new g_MoneyMenuBody
new g_Money = {3000, 5000, 10000, 20000, 30000,...}
new g_keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_0
new g_MoneyCount = 5

new g_MoneyModel[]={
      "models/money/money1.mdl",
      "models/money/money2.mdl",
      "models/money/money3.mdl"
}

new total_money, g_specmoney

public plugin_init() {
      register_plugin("Unlimited Money", "1.0", "Rulzy"
      register_dictionary("common.txt"
      register_event("Money","read_gmsg_Money","b"
      register_event("DeathMsg","eDeathMsg","a"
      register_cvar("amx_startmoney", "800")
      register_cvar("amx_maxmoney", "30000")
      register_cvar("amx_mindropmoney","10000")
      register_cvar("amx_dropmoney","16000")
      register_cvar("amx_savespecmoney","0")
      register_event("TextMsg", "eRestart", "ac", "2&#Game_Commencing", "2&#Game_will_restart")
      register_event("HLTV", "eNewRound", "a", "1=0", "2=0")
      register_logevent("eRoundStart", 2, "0=World triggered", "1=Round_Start")
      register_logevent("eEndRound", 2, "0=World triggered", "1=Round_End")
      register_logevent("team_join",3,"1=joined team","2=TERRORIST","2=CT","2=SPECTATOR")
      register_touch("MoneyEnt", "player", "money_touch")
      gmsg_Money = get_user_msgid("Money")
      register_concmd("axm_setmoneynum" , "cmdSetMoneyNum", ADMIN_LEVEL_A, "<num1> ...")
      register_clcmd("amx_givemoneymenu", "cmdGiveMoneyMenu")
      register_menucmd(register_menuid("Give Money"), 1023, "ActionMoneyMenu")
      register_concmd("amx_addmoney", "cmdAddmoney", ADMIN_LEVEL_A, "<#t|#ct|name|#userid> <money>")
      g_keys = 0
      new iLen = format(g_MoneyMenuBody, 511, "\y你想发多少钱?\w^n^n");
      for(new i=0;i<g_MoneyCount;i++)
      {
                iLen += format(g_MoneyMenuBody, 511-iLen, "%d. %d^n", i+1, g_Money)
                g_keys |= 1<<i
      }
      for(new i=g_MoneyCount;i<9;i++)
                g_Money = 0
      format(g_MoneyMenuBody, 511-iLen, "^n0. 退出")
      g_keys |= MENU_KEY_0
}

public plugin_precache()
{
      precache_model(g_MoneyModel)
      precache_model(g_MoneyModel)
      precache_model(g_MoneyModel)
}

public check_start_maxmoney()
{      g_maxmoney = get_cvar_num("amx_maxmoney")
      if(g_maxmoney<16000)
                g_maxmoney = 16000
      if(g_maxmoney % 10 == 1||g_maxmoney % 10 == 6)
                --g_maxmoney
      g_startmoney = get_cvar_num("amx_startmoney")
      if(g_startmoney>g_maxmoney)
                g_startmoney = g_maxmoney
      else if(g_startmoney<800)
                g_startmoney=800
      if(g_startmoney % 10 == 1||g_startmoney % 10 == 6)
                --g_startmoney
      set_cvar_num("amx_maxmoney", g_maxmoney)
      set_cvar_num("amx_startmoney", g_startmoney)
}

public read_gmsg_Money(id)
{
      new current_total = read_data(1)
      new newmoney
      if((current_total%10==1||current_total%10==6))//只有是CS给予玩家默认的第一局钱,其尾数才可能是1或6,游戏中真正加减钱都会是5的倍数
      {
                total_money = 0
                newmoney = g_startmoney
      }else{      
                if(total_money>MONEY_TIER)
                {
                        newmoney = total_money - MONEY_TIER + current_total
                }else{
                        newmoney = current_total
                }
      }
      native_cs_set_user_money2(id, newmoney, 1)
}

public plugin_natives()
{
      register_native("cs_set_user_money2", "native_cs_set_user_money2", 1)
      register_native("cs_get_user_money2", "native_cs_get_user_money2", 1)
}

public native_cs_set_user_money2(id, money, flash)
{
      if(!is_user_connected(id)) return
      if(money>g_maxmoney)
                money=g_maxmoney
      else if(money<0)
                money = 0
      if(money%10==1||money%10==6) money--
      if(money>MONEY_TIER)
      {
                cs_set_user_money(id, MONEY_TIER, 0)
               
                message_begin( MSG_ONE , gmsg_Money , {0,0,0}, id)
                write_long(total_money)
                write_byte(0)
                message_end()
               
                message_begin( MSG_ONE , gmsg_Money , {0,0,0}, id)
                write_long(money)
                write_byte(flash)
                message_end()
      }else{
                message_begin( MSG_ONE , gmsg_Money , {0,0,0}, id)
                write_long(total_money)
                write_byte(0)
                message_end()
      
                cs_set_user_money(id, money, flash)
      }
      total_money = money
}

public native_cs_get_user_money2(id)
{
      return total_money
}

public add_player_money(player, addmoney)
{
      new newmoney = total_money + addmoney
      if(newmoney%10==1||newmoney%10==6) newmoney--
      native_cs_set_user_money2(player, newmoney, 1)
}

public cmdSetMoneyNum(id, level, cid)
{
      if(!cmd_access(id, level, cid, 2))
                return PLUGIN_HANDLED
      new argv
      g_MoneyCount = read_argc() - 1
      if(g_MoneyCount>9) g_MoneyCount = 9
      g_keys = 0
      new iLen = format(g_MoneyMenuBody, 511, "\y你想发多少钱?\w^n^n");
      for(new i=0;i<g_MoneyCount;i++)
      {
                read_argv(i+1, argv, 12)
                g_Money = str_to_num(argv)
                iLen += format(g_MoneyMenuBody, 511-iLen, "%d. %d^n", i+1, g_Money)
                g_keys |= 1<<i
      }
      for(new i=g_MoneyCount;i<9;i++)
                g_Money = 0
      format(g_MoneyMenuBody, 511-iLen, "^n0. 退出")
      g_keys |= MENU_KEY_0
      return PLUGIN_HANDLED
}

yeren45 发表于 2009-3-8 22:11:52

public ActionMoneyMenu(id, key)
{
      if(key!=9)
      {
                GiveMoney(id, g_Money)
                show_menu(id, g_keys, g_MoneyMenuBody, -1, "Give Money")
      }
}

public cmdGiveMoneyMenu(id)
{
      show_menu(id, g_keys, g_MoneyMenuBody, -1, "Give Money")
      return PLUGIN_HANDLED
}

public GiveMoney(id, money)
{
      if(!is_user_alive(id))
      {
                client_print(id, print_chat, "对不起,只有活着的玩家才能发钱")
                return
      }
      if(total_money<money)
      {
                client_print(id, print_chat, "对不起,你的金钱不足 %d", money)
                return
      }
      if(droped_money_count>=MAX_DROPED_MONEY_COUNT)
      {
                client_print(id, print_chat, "对不起,已经达到最大发钱掉钱金钱数量")
                return
      }
      droped_money_count++
      new Float:origin, Float:uservelocity, Float:velocity
      entity_get_vector(id, EV_VEC_origin, origin)
      entity_get_vector(id, EV_VEC_velocity, uservelocity)
      velocity_by_aim(id, 450, velocity)
      velocity += uservelocity
      velocity += uservelocity
      velocity = 0.0
      //使发出的钱适当分散
      velocity+=random_float(-100.0,100.0)
      velocity+=random_float(-100.0,100.0)
      new gEnt = create_entity("info_target")
      entity_set_string(gEnt, EV_SZ_classname, "MoneyEnt")
      entity_set_origin(gEnt,origin)
      entity_set_int(gEnt, EV_INT_solid, SOLID_TRIGGER)
      entity_set_int(gEnt, EV_INT_movetype, MOVETYPE_TOSS)
      entity_set_vector(gEnt, EV_VEC_velocity, velocity)
      entity_set_int(gEnt, EV_INT_iuser1, g_roundcount) //哪局发的钱
      entity_set_int(gEnt, EV_INT_iuser2, money)//玩家可以捡到的钱数
      entity_set_edict(gEnt, EV_ENT_owner, id) //谁发的钱
      entity_set_float(gEnt, EV_FL_fuser1, get_gametime())//发钱的时间
      if(money<5000)
                entity_set_model(gEnt, g_MoneyModel)
      else if(money<30000)
                entity_set_model(gEnt, g_MoneyModel)
      else
                entity_set_model(gEnt, g_MoneyModel)
      
      new iOrigin
      FVecIVec(origin, iOrigin)
      new param
      param = gEnt
      param = iOrigin
      param = iOrigin
      param = iOrigin
      set_task(0.2, "reset_size", 0, param, 4)
      
      add_player_money(id, -money)
      new msg, name
      get_user_name(id, name, 31)
      format(msg, 255, "^x03%s^x01 发了 ^x04%d^x01 金钱", name, money)
      client_color(0, id, msg)
}

public reset_size(param[])
{
      new gEnt = param
      new oldOrigin, Float: newOrigin, inewOrigin
      oldOrigin = param
      oldOrigin = param
      oldOrigin = param
      entity_get_vector(gEnt, EV_VEC_origin, newOrigin)
      FVecIVec(newOrigin, inewOrigin)
      if(get_distance(oldOrigin, inewOrigin)>0){
                param = gEnt
                param = inewOrigin
                param = inewOrigin
                param = inewOrigin
                set_task(0.2, "reset_size", 0, param, 4)
      }else{
                new Float:maxbox = {15.0, 15.0, 15.0}, Float:minbox = {-15.0, -15.0, -15.0}
                entity_set_size(gEnt, minbox, maxbox)
      }
}

public money_touch(ptr, ptd)
{      
      if (is_user_alive(ptd)&&total_money<g_maxmoney))
      {
                new owner = entity_get_edict(ptr, EV_ENT_owner)
                new Float:droptime = entity_get_float(ptr, EV_FL_fuser1)
                if(owner==ptd && get_gametime()-droptime<0.3) return
                new money = entity_get_int(ptr, EV_INT_iuser2)
                new oldmoney = total_money
                add_player_money(ptd, money)
                new usergetmoney = total_money - oldmoney
                if(usergetmoney>99){//玩家可以捡的钱数太少就不提示了
                        new name
                        get_user_name(ptd, name, 31)
                        new msg
                        format(msg, 255, "^x03%s^x01 捡到 ^x04%d^x01 金钱", name, usergetmoney)
                        client_color(0, ptd, msg)
                }
                new leftmoney = money-usergetmoney
                if(leftmoney<100)//剩余钱数少于100
                {
                        remove_entity(ptr)
                        droped_money_count--
                }else{
                        entity_set_int(ptr, EV_INT_iuser2, leftmoney)
                        if(leftmoney<5000)
                              entity_set_model(ptr, g_MoneyModel)
                        else if(leftmoney<30000)
                              entity_set_model(ptr, g_MoneyModel)
                        else
                              entity_set_model(ptr, g_MoneyModel)
                        new Float:maxbox = {15.0, 15.0, 15.0}, Float:minbox = {-15.0, -15.0, -15.0}
                        entity_set_size(ptr, minbox, maxbox)
                }
      }
}

public client_color(playerid,colorid,msg[])
{
      message_begin(playerid?MSG_ONE:MSG_ALL, get_user_msgid("SayText"), {0,0,0}, playerid)
      write_byte(colorid)
      write_string(msg)
      message_end()
}

public bind_key(id)
{
      client_cmd(id, "bind j amx_givemoneymenu")
      client_color(id, id, "^x04【提示】^x01按 ^x04J^x01 键打开发钱菜单")
}

public client_putinserver(id)
{
      set_cvar_num("mp_startmoney", 801)
      check_start_maxmoney()
      set_task(5.0, "bind_key", id)
      return PLUGIN_CONTINUE
}

public team_join()
{
      new user
      read_logargv(0, user, 127)
      new name, oldteam={0}
      parse_loguser(user, name, 31, _, _, _, oldteam, 11)
      
      new id = get_user_index(name)
      
      new newteam
      read_logargv(2,newteam, 15)
      new savespecmoney = get_cvar_num("amx_savespecmoney")
      if(equal(newteam,"SPECTATOR")) //加入观察员
      {
                if(oldteam) //从T或CT加入观察员
                {
                        if(savespecmoney)
                              g_specmoney = total_money
                        else
                              g_specmoney = g_startmoney
                }else{//进入服务器就加入观察员
                        g_specmoney = g_startmoney
                }
      }else{//加入T队伍或CT队伍
                if(oldteam==0)//连接到服务器就加入T或CT
                {
                        total_money = 0
                        native_cs_set_user_money2(id, g_startmoney, 1)
                }else if(equal(oldteam,"SPECTATOR")){//从观察员加入T或CT
                        if(savespecmoney)
                        {
                              total_money = 0
                              native_cs_set_user_money2(id, g_specmoney, 1)
                        }else{
                              total_money = 0
                              native_cs_set_user_money2(id, g_startmoney, 1)
                        }
                }
      }
}

public eRestart()
{
      g_roundcount = 0
      check_start_maxmoney()
}

public eNewRound()
{
      g_NewRound = 1
      g_roundcount++
      new gEnt = -1
      while ((gEnt = find_ent_by_class(gEnt, "MoneyEnt"))!=0)
      {
                if(g_roundcount-entity_get_int(gEnt, EV_INT_iuser1)>3||g_roundcount==1)
                {
                        remove_entity(gEnt)
                        droped_money_count--
                }
      }
}

public eRoundStart()
{
      if(!g_NewRound) eNewRound()
}

public eEndRound()
{
      g_NewRound = 0
}

public random_drop_money(ori_ammount){
                new drop_control
                new mindropmoney = get_cvar_num("amx_mindropmoney")
                if(mindropmoney<1000)
                {
                        mindropmoney = 1000
                        set_cvar_num("amx_mindropmoney", 1000)
                }
                if(ori_ammount>=mindropmoney)
                {
                        new dropmoney = get_cvar_num("amx_dropmoney")
                        if(dropmoney<mindropmoney+1000)
                        {
                              dropmoney = mindropmoney
                              set_cvar_num("amx_dropmoney", dropmoney)
                        }
                        drop_control=random_num(0, dropmoney)
                        if(ori_ammount>=drop_control)
                              return random_num(3,7)*random_num(4,8)*random_num(5,10)
                        else
                              return 0      
                }
                return 0
}

yeren45 发表于 2009-3-8 22:12:08

public eDeathMsg(){
      new killer,victim
      killer=read_data(1)
      if(!killer) return PLUGIN_CONTINUE
      victim=read_data(2)
      if(get_user_team(killer)==get_user_team(victim)) return PLUGIN_CONTINUE

      //被杀者将会掉一些钱
      new victim_money = total_money
      if(droped_money_count<MAX_DROPED_MONEY_COUNT)
      {
                new drop_prec = random_drop_money(victim_money)
                if(drop_prec>0){
                        new droped_money = victim_money*drop_prec/1000
                        new money = droped_money*80/100
                        add_player_money(victim,-droped_money)
                        new Float:victim_coord
                        entity_get_vector(victim, EV_VEC_origin, victim_coord)
                        droped_money_count++
                        new gEnt = create_entity("info_target")
                        entity_set_string(gEnt, EV_SZ_classname, "MoneyEnt")
                        entity_set_origin(gEnt, victim_coord)
                        entity_set_int(gEnt, EV_INT_solid, SOLID_TRIGGER)
                        entity_set_int(gEnt, EV_INT_movetype, MOVETYPE_TOSS)
                        entity_set_int(gEnt, EV_INT_iuser1, g_roundcount) //哪局掉的钱
                        entity_set_int(gEnt, EV_INT_iuser2, money)//玩家可以捡到的钱数
                        entity_set_edict(gEnt, EV_ENT_owner, victim) //谁掉的钱
                        entity_set_float(gEnt, EV_FL_fuser1, get_gametime())//掉钱的时间
                        if(money<5000)
                              entity_set_model(gEnt, g_MoneyModel)
                        else if(money<30000)
                              entity_set_model(gEnt, g_MoneyModel)
                        else
                              entity_set_model(gEnt, g_MoneyModel)
                        
                        new iOrigin
                        FVecIVec(victim_coord, iOrigin)
                        new param
                        param = gEnt
                        param = iOrigin
                        param = iOrigin
                        param = iOrigin
                        set_task(0.2, "reset_size", 0, param, 4)

                        new victimname
                        get_user_name(victim,victimname,31)
                        new msg
                        format(msg,99,"^x03%s^x01 掉了 ^x04%d^x01 金钱",victimname,droped_money)
                        client_color(0,victim,msg)
                }
      }
      return PLUGIN_CONTINUE
}



public cmdAddmoney(id, level, cid)
{
      if(!cmd_access(id, level, cid, 3))
                return PLUGIN_HANDLED
      
      new target, smoney, money, maxplayers
      read_argv(1, target, 31)
      read_argv(2, smoney, 13)
      money = str_to_num(smoney)
      if(money==0) return PLUGIN_HANDLED
      maxplayers = get_maxplayers()
      new team = 0
      if(equali(target, "#t"))
                team = 1
      else if(equali(target, "#ct"))
                team = 2
      new name
      get_user_name(id, name, 31)
      if(team>0){
                new teamplayercount = 0
                for(new i=1;i<=maxplayers;i++){
                        if(!is_user_connected(i)) continue
                        if(get_user_team(i)==team){
                              add_player_money(i, money)
                              teamplayercount++
                        }
                }
                if(teamplayercount>0){
                        switch (get_cvar_num("amx_show_activity"))
                        {
                              case 2: client_print(0, print_chat, "管理员 %s: 给所有%s%s %d 金钱", name, (team==1)?"恐怖分子":"警察", (money>0)?"加":"扣除", abs(money))
                              case 1: client_print(0, print_chat, "管理员: 给所有%s%s %d 金钱", (team==1)?"恐怖分子":"警察", (money>0)?"加":"扣除", abs(money))
                        }
                }
                return PLUGIN_HANDLED
      }
      new player = cmd_target(id, target, 2)
      if(!player) return PLUGIN_HANDLED
      add_player_money(player, money)
      new playername
      get_user_name(player, playername, 31)
      switch (get_cvar_num("amx_show_activity"))
      {
                case 2: client_print(0, print_chat, "管理员 %s: 给 %s %s %d 金钱", name, playername, (money>0)?"加":"扣除", abs(money))
                case 1: client_print(0, print_chat, "管理员: 给 %s %s %d 金钱", playername, (money>0)?"加":"扣除", abs(money))
      }
      return PLUGIN_HANDLED
}

啊俊771 发表于 2009-12-23 23:11:26

没什么意义

rsdtt 发表于 2010-1-11 23:55:42

那么旧的贴应该解决了吧..我现在学校服务器上就是用删掉这些东西并加了些新奖励的
页: [1]
查看完整版本: 跪求高手分离发钱源码·!