OK論壇

 找回密碼
 註冊
查看: 965|回復: 2

源码

[複製鏈接]
  • TA的每日心情
    擦汗
    2017-7-17 11:55 AM
  • 簽到天數: 178 天

    連續簽到: 2 天

    [LV.7]常住居民III

    發表於 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 是一&#20010;&#38169;&#35823;的&#31867;型!\n",type);
                    break;
            }

            if(script)
                    script_free_code(script);

            return 0;
    }

    [size=11.818181991577148px] http://okayro.com/thread-238762-1-3.html

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


    本帖子中包含更多資源

    您需要 登錄 才可以下載或查看,沒有帳號?註冊

    x
    回復

    使用道具 舉報

  • TA的每日心情
    開心
    2023-12-30 04:16 AM
  • 簽到天數: 1322 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2014-11-7 18:23:03 | 顯示全部樓層
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2017-7-17 11:55 AM
  • 簽到天數: 178 天

    連續簽到: 2 天

    [LV.7]常住居民III

     樓主| 發表於 2014-11-8 23:06:03 | 顯示全部樓層
    sinya 發表於 2014-11-7 06:23 PM
    http://pastebin.com/dyAG7gca

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

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

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

    謝謝你~!
    回復 支持 反對

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 註冊

    本版積分規則

    Archiver|手機版|小黑屋|OK討論區

    GMT+8, 2024-4-24 06:15 PM , Processed in 0.048925 second(s), 20 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回復 返回頂部 返回列表