vodur:luaafile
This is an old revision of the document!
Table of Contents
Pros/Cons for new method:
Pros:
Less messy/problematic to add/remove/change stuff in area files now.
Can easily parse area files with outside scripts for analysis.
Cons:
Less performant
Confusing to use new save/load code?
Example new saving code:
LStbl area; LStbl_create( LS, &area ); LStbl_kv_int( LS, &area, "Version", CURR_AREA_VERSION); LSarr clones; LSarr_create( LS, &clones); LStbl_kv_arr( LS, &area, "Clones", &clones); for ( i = 0; i <MAX_AREA_CLONE; i++ ) if ( pArea->clones[i]> 0 ) LSarr_add_int( LS, &clones, pArea->clones[i]); LSarr_release( LS, &clones); LStbl_kv_str( LS, &area, "Name", pArea->name ); LStbl_kv_str( LS, &area, "Builders", fix_string( pArea->builders ) ); LStbl_kv_str( LS, &area, "Comments", fix_string( pArea->comments ) ); LStbl_kv_int( LS, &area, "MinVnum", pArea->min_vnum); LStbl_kv_int( LS, &area, "MaxVnum", pArea->max_vnum); LStbl_kv_str( LS, &area, "Credits", pArea->credits); /* Added minlevel, maxlevel, and miniquests for new areas command -Astark Dec 2012 */ LStbl_kv_int( LS, &area, "MinLevel", pArea->minlevel); LStbl_kv_int( LS, &area, "MaxLevel", pArea->maxlevel); LStbl_kv_int( LS, &area, "Miniquests", pArea->miniquests); LStbl_kv_int( LS, &area, "Security", pArea->security); LStbl_kv_int( LS, &area, "Time", pArea->reset_time); LSarr aflags; LSarr_create( LS, &aflags); LStbl_kv_arr( LS, &area, "Flags", &aflags); if (IS_SET(pArea->area_flags,AREA_REMORT)) LSarr_add_str( LS, &aflags, flag_bit_name(area_flags, AREA_REMORT)); if (IS_SET(pArea->area_flags,AREA_NOQUEST)) LSarr_add_str( LS, &aflags, flag_bit_name(area_flags, AREA_NOQUEST)); if (IS_SET(pArea->area_flags,AREA_NOHIDE)) LSarr_add_str( LS, &aflags, flag_bit_name(area_flags, AREA_NOHIDE)); if ( IS_SET(pArea->area_flags, AREA_SOLO) ) LSarr_add_str( LS, &aflags, flag_bit_name(area_flags, AREA_SOLO)); LSarr_release( LS, &aflags); LSarr atrigs; LSarr_create( LS, &atrigs ); LStbl_kv_arr( LS, &area, "ATrigs", &atrigs); if (pArea->aprogs != NULL) { PROG_LIST *pAprog; reverse_aprog_order(pArea); for (pAprog = pArea->aprogs; pAprog; pAprog = pAprog->next) { LStbl atrig; LStbl_create( LS, &atrig); LSarr_add_tbl( LS, &atrigs, &atrig); LStbl_kv_str( LS, &atrig, "Type", name_lookup(pAprog->trig_type, a prog_flags)); LStbl_kv_int( LS, &atrig, "Vnum", pAprog->vnum); LStbl_kv_str( LS, &atrig, "Phrase", pAprog->trig_phrase); LStbl_release( LS, &atrig); } reverse_aprog_order(pArea); } LSarr_release( LS, &atrigs); LStbl_save( LS, &area, "Test1.lua"); LStbl_release( LS, &area );
Example old format (Bastion)
#VER 3 #AREADATA Name Bastion~ Builders Parademia Rynor~ Notes ~ VNUMs 10200 10599 Credits Siva~ Minlevel 1 Maxlevel 100 Miniquests 9 Security 8 Time 15 AProg enter 10200 100~ End
Example new format (Bastion)
return { Version = 6, Clones = { }, Name = "Bastion", Builders = "Parademia Rynor", Comments = "", MinVnum = 10200, MaxVnum = 10599, Credits = "Siva", MinLevel = 1, MaxLevel = 100, Miniquests = 9, Security = 8, Time = 15, Flags = { }, ATrigs = { { Type = "enter", Vnum = 10200, Phrase = "100", }, }, }
Example old format (Remort 6)
#VER 3 #CLONE 24451 #CLONE 16700 #AREADATA Name Lost Library~ Builders Xyzlvador Churel~ Notes ~ VNUMs 101 299 Credits Remort 6, Xzylvador~ Minlevel 0 Maxlevel 0 Miniquests 0 Security 9 Time 15 Remort End
Example new format (Remort 6)
return { Version = 6, Clones = { 24451, 16700, }, Name = "Lost Library", Builders = "Xyzlvador Churel", Comments = "", MinVnum = 101, MaxVnum = 299, Credits = "Remort 6, Xzylvador", MinLevel = 0, MaxLevel = 0, Miniquests = 0, Security = 9, Time = 15, Flags = { "remort", }, ATrigs = { }, }
Example new loading code:
LLtbl area; LLtbl_load( LS, &area, "Test1.lua"); int file_version = LLtbl_get_kv_int( LS, &area, "Version"); LLtbl clones; LLtbl_get_kv_tbl( LS, &area, "Clones", &clones); ind=0; while ( LLtbl_i_exists( LS, &clones, ++ind ) ) { pArea->clones[ind-1] = LLtbl_get_iv_int( LS, &clones, ind); } LLtbl_release( LS, &clones); pArea->name=LLtbl_get_kv_str( LS, &area, "Name"); pArea->builders=LLtbl_get_kv_str( LS, &area, "Builders"); pArea->comments=LLtbl_get_kv_str( LS, &area, "Comments"); pArea->min_vnum=LLtbl_get_kv_int( LS, &area, "MinVnum"); pArea->max_vnum=LLtbl_get_kv_int( LS, &area, "MaxVnum"); pArea->credits=LLtbl_get_kv_str( LS, &area, "Credits"); pArea->minlevel=LLtbl_get_kv_int( LS, &area, "MinLevel"); pArea->maxlevel=LLtbl_get_kv_int( LS, &area, "MaxLevel"); pArea->miniquests=LLtbl_get_kv_int( LS, &area, "Miniquests"); pArea->security=LLtbl_get_kv_int( LS, &area, "Security"); pArea->reset_time=LLtbl_get_kv_int( LS, &area, "Time" ); LLtbl aflag; LLtbl_get_kv_tbl( LS, &area, "Flags", &aflag); ind=0; while ( LLtbl_i_exists( LS, &aflag, ++ind) ) { const char *flag=LLtbl_get_iv_str( LS, &aflag, ind); int bit=flag_lookup( flag, area_flags); if ( bit == NO_FLAG ) { bugf("No such area_flag: %s", flag); exit(1); } SET_BIT( pArea->area_flags, bit); free_string(flag); } LLtbl_release( LS, &aflag); LLtbl atrigs; LLtbl_get_kv_tbl( LS, &area, "ATrigs", &atrigs); ind=0; while ( LLtbl_i_exists( LS, &atrigs, ++ind) ) { LLtbl atrig; LLtbl_get_iv_tbl( LS, &atrigs, ind, &atrig); PROG_LIST *pAprog = alloc_ATRIG(); const char *trigtype=LLtbl_get_kv_str( LS, &atrig, "Type"); int trigger; if ( (trigger = flag_lookup( trigtype, aprog_flags)) == NO_FLAG ) { bugf("invalid aprog_flag: '%s'", trigtype); exit(1); } free_string(trigtype); SET_BIT(pArea->aprog_flags, trigger); pAprog->trig_type = trigger; pAprog->vnum = LLtbl_get_kv_int( LS, &atrig, "Vnum"); pAprog->trig_phrase=LLtbl_get_kv_str(LS, &atrig, "Phrase"); LLtbl_release(LS, &atrig); } LLtbl_release( LS, &atrigs); LLtbl_release( LS, &area);
vodur/luaafile.1446363192.txt.gz · Last modified: 2015/11/01 07:33 by vodur