OK論壇

 找回密碼
 註冊
查看: 3893|回復: 9

[教學] [set]指定玩家設定變數

[複製鏈接]
  • TA的每日心情
    慵懶
    2013-7-11 12:09 AM
  • 簽到天數: 118 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2009-9-27 18:51:45 | 顯示全部樓層 |閱讀模式
    1. BUILDIN_FUNC(set)
    2. {
    3. TBL_PC* sd = NULL;
    4. struct script_data* data;
    5. int num;
    6. const char* name;
    7. char prefix;

    8. data = script_getdata(st,2);
    9. if( !data_isreference(data) )
    10. {
    11. ShowError("script:set: not a variable\n");
    12. script_reportdata(script_getdata(st,2));
    13. st->state = END;
    14. return 1;
    15. }

    16. num = reference_getuid(data);
    17. name = reference_getname(data);
    18. prefix = *name;

    19. if( not_server_variable(prefix) )
    20. {
    21. if( script_hasdata(st,4) )
    22. sd=map_id2sd(script_getnum(st,4));
    23. else
    24. sd=script_rid2sd(st);

    25. if( sd == NULL )
    26. {
    27. ShowError("script:set: no player attached for player variable '%s'\n", name);
    28. return 0;
    29. }
    30. }

    31. if( is_string_variable(name) )
    32. set_reg(st,sd,num,name,(void*)script_getstr(st,3),script_getref(st,2));
    33. else
    34. set_reg(st,sd,num,name,(void*)script_getnum(st,3),script_getref(st,2));

    35. // return a copy of the variable reference
    36. script_pushcopy(st,2);

    37. return 0;
    38. }
    複製代碼

    評分

    參與人數 1積分 +99 現金 +99 積極性 +99 收起 理由
    goddameit + 99 + 99 + 99 原創內容

    查看全部評分

    回復

    使用道具 舉報

  • TA的每日心情
    慵懶
    2013-7-11 12:09 AM
  • 簽到天數: 118 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2009-9-27 19:41:24 | 顯示全部樓層
    本帖最後由 Alopex 於 2010-7-23 12:23 PM 編輯

    使用:
    1. *set <variable>,<expression>[, <Account ID>];
    複製代碼
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2022-6-12 07:34 PM
  • 簽到天數: 260 天

    連續簽到: 1 天

    [LV.8]以壇為家I

    發表於 2010-7-22 05:51:42 | 顯示全部樓層
    本帖最後由 devil19891101 於 2010-7-22 06:21 AM 編輯

    回復 2# Alopex


    這個我編譯完之後

    用   set Test,1,150001;

    會報錯無法使用- -...

    報錯訊息:

         parse_line: need ';'
    *    8 : { set Test,1','150001; }
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2013-7-11 12:09 AM
  • 簽到天數: 118 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2010-7-22 08:44:25 | 顯示全部樓層
    回復 3# devil19891101


       你宣告沒改吧....

    1. BUILDIN_DEF(set,"ii"),
    複製代碼


    1.         BUILDIN_DEF(set,"iii"),
    複製代碼
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2022-6-12 07:34 PM
  • 簽到天數: 260 天

    連續簽到: 1 天

    [LV.8]以壇為家I

    發表於 2010-7-22 20:05:14 | 顯示全部樓層
    回復 4# Alopex

    改成
    1. BUILDIN_DEF(set,"iii"),
    複製代碼


    會變成全部有set的腳本報錯

    所以我另外用標籤set2

    1. BUILDIN_FUNC(set2)
    2. {
    3. TBL_PC* sd = NULL;
    4. struct script_data* data;
    5. int num;
    6. const char* name;
    7. char prefix;
    8. data = script_getdata(st,2);
    9. if( !data_isreference(data) )
    10. {
    11. ShowError("script:set2: not a variable\n");
    12. script_reportdata(script_getdata(st,2));
    13. st->state = END;
    14. return 1;
    15. }
    16. num = reference_getuid(data);
    17. name = reference_getname(data);
    18. prefix = *name;
    19. if( not_server_variable(prefix) )
    20. {
    21. if( script_hasdata(st,4) )
    22. sd=map_id2sd(script_getnum(st,4));
    23. else
    24. sd=script_rid2sd(st);
    25. if( sd == NULL )
    26. {
    27. ShowError("script:set2: no player attached for player variable '%s'\n", name);
    28. return 0;
    29. }
    30. }
    31. if( is_string_variable(name) )
    32. set_reg(st,sd,num,name,(void*)script_getstr(st,3),script_getref(st,2));
    33. else
    34. set_reg(st,sd,num,name,(void*)script_getnum(st,3),script_getref(st,2));
    35. // return a copy of the variable reference
    36. script_pushcopy(st,2);
    37. return 0;
    38. }
    複製代碼

    1. BUILDIN_DEF(set2,"iii"),
    複製代碼

    1. set2 Test,1,150001;
    複製代碼


    但是使用時變成



    是我還有東西沒有改嗎>////<?
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2013-7-11 12:09 AM
  • 簽到天數: 118 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2010-7-23 12:25:07 | 顯示全部樓層
    &pid回復 5# devil19891101


       ....是我的問題=_=

    map_id2sd >>> Account ID


    map_charid2sd >>char_id
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2022-6-12 07:34 PM
  • 簽到天數: 260 天

    連續簽到: 1 天

    [LV.8]以壇為家I

    發表於 2010-7-23 16:17:20 | 顯示全部樓層
    回復 6# Alopex



    1. BUILDIN_FUNC(set2)
    2. {
    3. TBL_PC* sd = NULL;
    4. struct script_data* data;
    5. int num;
    6. const char* name;
    7. char prefix;
    8. data = script_getdata(st,2);
    9. if( !data_isreference(data) )
    10. {
    11. ShowError("script:set2: not a variable\n");
    12. script_reportdata(script_getdata(st,2));
    13. st->state = END;
    14. return 1;
    15. }
    16. num = reference_getuid(data);
    17. name = reference_getname(data);
    18. prefix = *name;
    19. if( not_server_variable(prefix) )
    20. {
    21. if( script_hasdata(st,4) )
    22. sd=map_charid2sd(script_getnum(st,4));
    23. else
    24. sd=script_rid2sd(st);
    25. if( sd == NULL )
    26. {
    27. ShowError("script:set2: no player attached for player variable '%s'\n", name);
    28. return 0;
    29. }
    30. }
    31. if( is_string_variable(name) )
    32. set_reg(st,sd,num,name,(void*)script_getstr(st,3),script_getref(st,2));
    33. else
    34. set_reg(st,sd,num,name,(void*)script_getnum(st,3),script_getref(st,2));
    35. // return a copy of the variable reference
    36. script_pushcopy(st,2);
    37. return 0;
    38. }
    複製代碼


    改成map_charid2sd

    依然顯示

    :91:
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2013-7-11 12:09 AM
  • 簽到天數: 118 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2010-7-25 12:06:55 | 顯示全部樓層
    本帖最後由 Alopex 於 2010-7-25 12:12 PM 編輯

    回復 7# devil19891101


      
    1. BUILDIN_FUNC(set2)
    2. {
    3.         TBL_PC* sd = NULL;
    4.         struct script_data* data;
    5.         int num;
    6.         const char* name;
    7.         char prefix;

    8.         data = script_getdata(st,2);
    9.         if( !data_isreference(data) )
    10.         {
    11.                 ShowError("script:set: not a variable\n");
    12.                 script_reportdata(script_getdata(st,2));
    13.                 st->state = END;
    14.                 return 1;
    15.         }

    16.         num = reference_getuid(data);
    17.         name = reference_getname(data);
    18.         prefix = *name;

    19.         if( not_server_variable(prefix) )
    20.         {
    21.                 sd = map_charid2sd(script_getnum(st,4));
    22.                 if( sd == NULL )
    23.                 {
    24.                         ShowError("script:set2: no player attached for player variable '%s'\n", name);
    25.                         return 0;
    26.                 }
    27.         }

    28.         if( is_string_variable(name) )
    29.                 set_reg(st,sd,num,name,(void*)script_getstr(st,3),script_getref(st,2));
    30.         else
    31.                 set_reg(st,sd,num,name,(void*)script_getnum(st,3),script_getref(st,2));

    32.         // return a copy of the variable reference
    33.         script_pushcopy(st,2);

    34.         return 0;
    35. }
    複製代碼

    測試成功

    原因出在script_hasdata(st,4)


    如果這麼用  先告必須改成BUILDIN_DEF(set,"ii*"),........


    第一次回覆你的時候昏了
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2011-12-23 09:15 PM
  • 簽到天數: 9 天

    連續簽到: 0 天

    [LV.3]偶爾看看II

    發表於 2011-4-30 10:28:13 | 顯示全部樓層
    可是這樣做好像只能設定在線上的人的變數
    如果玩家不在線上就沒辦法變更
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2024-5-2 03:39 PM
  • 簽到天數: 1323 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2011-5-4 10:15:25 | 顯示全部樓層

    1. BUILDIN_DEF(set2,"rvi"),
    複製代碼
    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

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

    GMT+8, 2024-5-22 06:21 PM , Processed in 0.055154 second(s), 20 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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