OK論壇

 找回密碼
 註冊
查看: 3346|回復: 4

[分享] [command]自定義指令系統

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

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2010-2-18 11:39:23 | 顯示全部樓層 |閱讀模式
    恩......
    技術沒芭樂高

    所以沒有參數可以用XD


    用法跟芭樂的cmd一樣



    atcommand.h

    新增:


    1. struct command {
    2.     char command[50];//指令長度
    3.     struct script_code *script;
    4. };

    5. void read_command();//讀取資料函數
    複製代碼



    atcommand.c

    新增:


    1. static struct command* command_array[100];
    複製代碼


    找到bool is_atcommand函數,裡面的
    1. int lv = 0;
    複製代碼


    下增加

    1. int i = 0;
    複製代碼







    1. if( !message || !*message )
    2.   return false;
    複製代碼



    增加:

    1. sscanf(message,"%99s",command);
    2. while(i<100 && command_array[++i]){
    3. if(strcmpi(command_array[i]->command,command)==0)
    4. {
    5.   run_script(command_array[i]->script,0,sd->bl.id,0);
    6.   return true;
    7. }
    8. }

    複製代碼



    隨處增加:



    1. void read_command()
    2. {
    3. FILE* fp;
    4. int i=0;
    5. char line[1024];
    6. if ((fp = fopen("command.txt", "r")) == NULL) {
    7.   ShowWarning("系統讀取:沒有發現command.txt檔案\n");
    8.   return;
    9. }
    10. memset(command_array, 0, sizeof(command_array));
    11. while(i++<100 && fgets(line, sizeof(line), fp)){
    12.   char *str[2],*p;
    13.   struct command* command;
    14.   CREATE(command, struct command, 1);
    15.   memset(str, 0, sizeof(str));
    16.   p = line;
    17.   if(line[0] == '/' && line[1] == '/')continue; //檢查註解狀態
    18.                 while( ISSPACE(*p) )++p; // 檢測開頭是否為空
    19.   if( *p == '\0' )continue; // 檢測是否為結尾
    20.                 str[0] = p;
    21.                 p = strchr(p,',');
    22.                 *p = '\0';
    23.                 p++;
    24.                 str[1] = p;
    25.                 safestrncpy(command->command, str[0], sizeof(command->command));
    26.                 command->script = parse_script(str[1],"command.txt",i,0);
    27.                 if(command->script)
    28.                                 command_array[i] = command;
    29.   else
    30.     aFree(command)
    31.         }
    32.         return;
    33. }
    複製代碼



    mob.c
    static int mob_readdb(void)內



    1. int fi;
    複製代碼


    下面增加

    1. read_command();
    複製代碼



    結束
    回復

    使用道具 舉報

  • TA的每日心情
    開心
    2018-12-14 06:21 PM
  • 簽到天數: 123 天

    連續簽到: 2 天

    [LV.7]常住居民III

    發表於 2010-2-18 11:43:36 | 顯示全部樓層
    囧 ..
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    郁悶
    2014-7-24 09:44 AM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2010-2-18 14:02:13 | 顯示全部樓層
    樓上的未達十字噢..
    -/- 提醒一下
    感謝分享 雖然我不會..
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2024-1-19 12:37 AM
  • 簽到天數: 2354 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

    發表於 2010-7-17 23:59:17 | 顯示全部樓層
    來瞧瞧....正想學習有關源碼的東西
    回復 支持 反對

    使用道具 舉報

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

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2010-9-13 16:50:40 | 顯示全部樓層
    歡迎提供意見.........
    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

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

    GMT+8, 2024-5-5 07:20 AM , Processed in 0.051801 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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