bingzi520 發表於 2014-11-7 13:14:50

源码

本帖最後由 bingzi520 於 2014-11-7 01:15 PM 編輯

static int buildin_areascript_sub(struct block_list *bl,va_list ap)
{
                char *bonus_script =va_arg(ap,char *);
                struct script_code *script =parse_script(bonus_script, "script4each", 0, 0);

                run_script(script,0,bl->id,0);

                return 0;
}
BUILDIN_FUNC(script4each)
{
      int type;
      const char *bonus_script;
      struct map_session_data* pl_sd;
      struct s_mapiterator* iter;
      struct script_code *script;

      bonus_script = script_getstr(st,2);
      type = script_getnum(st,3);

      script =parse_script(bonus_script, "script4each", 0, 0);

      iter = mapit_getallusers();

      switch (type)
      {
      case 0:
                        for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
                              run_script(script,0,pl_sd->bl.id,0);
                        break;

      case 1:
                {
                int map_index;

                if(!script_hasdata(st, 4))
                        break;
                if(map_mapname2mapid(script_getstr(st,4)) < 0)
                        break;

                        map_index = map_mapname2mapid(script_getstr(st,4));
                        for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
                        {
                              if(pl_sd->bl.m == map_index)
                                        run_script(script,0,pl_sd->bl.id,0);
                        }
               
                }
                break;

      case 2:
                {
                        int map_index,x,y,range;
                        struct block_list center;

                        if(!script_hasdata(st, 4) || !script_hasdata(st, 5) || !script_hasdata(st, 6) || !script_hasdata(st, 7))
                              break;
                        else
                        {
                              if(map_mapname2mapid(script_getstr(st,4)) < 0)
                                        break;

                              x = script_getnum(st,5);
                              y = script_getnum(st,6);
                              range = script_getnum(st,7);

                              map_index = map_mapname2mapid(script_getstr(st,4));
                              center.m = map_index;
                              center.x = x;
                              center.y = y;

                              map_foreachinrange(buildin_areascript_sub, ¢er, range, BL_PC, bonus_script);
                }
                }
                break;

      case 3:
                {
                        TBL_PC *sd;
                        int char_id, party_id;

                        if(!script_hasdata(st, 4))
                              break;
                        else
                              char_id = script_getnum(st,4);

                        sd = map_charid2sd(char_id);
                        if (!sd) break;
                        party_id = sd->status.party_id;

                        if(party_id == 0)
                              break;

                        for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
                        {
                              if(pl_sd->status.party_id == party_id)
                                        run_script(script,0,pl_sd->bl.id,0);
                        }
                }
                break;

      case 4:
                {
                        TBL_PC *sd;
                        int char_id, guild_id;

                        if(!script_hasdata(st, 4))
                              break;
                        else
                              char_id = script_getnum(st,4);

                        sd = map_charid2sd(char_id);
                        if (!sd) break;
                        guild_id = sd->status.guild_id;

                        if(guild_id == 0)
                              break;

                        for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
                        {
                              if(pl_sd->status.guild_id == guild_id)
                                        run_script(script,0,pl_sd->bl.id,0);
                        }
                }
                break;

      case 5:
                {
                        int map_index,x0,y0,x1,y1;

                        if(!script_hasdata(st, 4) || !script_hasdata(st, 5) || !script_hasdata(st, 6) || !script_hasdata(st, 7) || !script_hasdata(st, 8))
                              break;
                        else
                        {
                              if(map_mapname2mapid(script_getstr(st,4)) < 0)
                                        break;

                              x0 = script_getnum(st,5);
                              y0 = script_getnum(st,6);
                              x1 = script_getnum(st,7);
                              y1 = script_getnum(st,8);
                              map_index = map_mapname2mapid(script_getstr(st,4));
                              map_foreachinarea(buildin_areascript_sub,map_index,x0,y0,x1,y1,BL_PC,bonus_script);
                        }
                }
                break;

      case 6:
                {
                        int party_id;

                        if(!script_hasdata(st, 4))
                              break;
                        else
                              party_id = script_getnum(st,4);

                        for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
                        {
                              if(pl_sd->status.party_id == party_id)
                                        run_script(script,0,pl_sd->bl.id,0);
                        }
                }
                break;

      case 7:
                {
                        int guild_id;

                        if(!script_hasdata(st, 4))
                              break;
                        else
                              guild_id = script_getnum(st,4);

                        for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
                        {
                              if(pl_sd->status.guild_id == guild_id)
                                        run_script(script,0,pl_sd->bl.id,0);
                        }
                }
                break;

      default:
                //ShowError("script4each : %d %s!\n",type,sys_msg(390));
                ShowError("script4each : %d 是一个错误的类型!\n",type);
                break;
      }

      if(script)
                script_free_code(script);

      return 0;
}
http://okayro.com/thread-238762-1-3.html

發的源碼教學
我添加到源碼 出現


sinya 發表於 2014-11-7 18:23:03

http://pastebin.com/dyAG7gca

bingzi520 發表於 2014-11-8 23:06:03

sinya 發表於 2014-11-7 06:23 PM static/image/common/back.gif
http://pastebin.com/dyAG7gca

額。。原帖的源碼跟您給的是一樣的。。

我已經仔細比對過。(對比軟件)

問題還是提示行尾 標准化。

謝謝你~!
頁: [1]
查看完整版本: 源码