Expert
34.0001

hello gayz

rica minnet üzerine çoook uzun zaman sonra bir script yazmam gerekti. map'te custom regionları oyun içinde birilerine ayarlatmak isteyen varsa bu kodu kullanabilir. sql bağlantısı gerekiyor, veritabanının create kodunu da ekledim. biz bunlara eskiden region diyoduk sonra area mı olmuş baya bi kavram kargaşası yaşıyorum ama neyse.

bunu da tarihe not düşmek için buraya koyuyorum, sonra yabancı pack'lerdeki minnak kodlara aa bunu ben yazmıştım diyince bu zaten vardı hööö diyorlar. dedirtmem.

şu kırmızıyla işaretlediğim yerden add new region diyip 

bu menü açılmışken region'ın alt ve üst noktalarına gidip gerekli butonlara tıklıyoruz. orta nokta ve ismi de değiştirip butonlarına tıklıyoruz. hepsi bitince new region'a basınca db'ye ekleniyor. ilk ss'te gördüğünüz listeden önceden oluşturulmuş regionlara girip düzenleme yapabiliyorsunuz.

EĞER account ismi kell ise (burayı değiştirirsiniz kod'dan) ekranda ekstra butonlar açılıyor kırmızıyla işaretledim.

koordinatların yanındaki mavi pıttıklara tıklayınca o koordinata uçuyor, kontrol etmek için.

sağdaki butona tıklayınca da script'in def kısmında belirlediğiniz map scriptinin en altına oluşturduğunuz area'nın kodunu yazıyor.

ben ihtiyaç olmadığı için eklemedim ama buraya region flaglar check olarak eklenirse şükela olur. bu haliyle region flagları benim önceden belirlediğim haliyle yazıyor.

bide liste kısmında sayfa ileri geri götürmede sorun var, scriptle iş bitince bir daha kullanılmayacağı için kasmadım oraya. mükemmelliyetçi biriyseniz onu da çözüverin.

sevgilerce



// CREATE TABLE `area_config` (
// 	`ID` INT(11) NOT NULL AUTO_INCREMENT,
// 	`Area_UST` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
// 	`Area_ALT` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
// 	`Area_Name` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
// 	`Area_Go_P` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
// 	`Created` TIMESTAMP NULL DEFAULT NULL,
// 	PRIMARY KEY (`ID`) USING BTREE,
// 	INDEX `İndeks 2` (`Created`) USING BTREE
// )
// COLLATE='utf8mb4_general_ci'
// ENGINE=InnoDB
// AUTO_INCREMENT=37
// ;


// flags and region events choices are missing at both dialog and code.
// known bug: pagination is shitty, need recode.

[defname custom_region]
Area_Script_Path "C:\Sphere\scripts\maps\map0\map0_custom.scp"


[function customareaset]
db.close
db.connect
    if <db.connected>
        CLEARCTAGS area_ustnokta
        CLEARCTAGS area_altnokta
        CLEARCTAGS Area_Name
        CLEARCTAGS area_go_p
        CLEARCTAGS area_index
        ctag0.dialog_index 1
        sdialog d_areaconfig 1
    else
        sysmessage @55,1 CANNOT CONNET TO MYSQL DB.
    endif
db.close

[dialog d_areaconfig]
0,0
page 1
RESIZEPIC 25 20 9270 394 372

dhtmlgump 65 50 220 20 0 0 <def.center><def.h4><def.bfont_size5><def.bfont_white>REGION CONFIG
db.close
db.connect
    db.query SELECT * FROM area_config ORDER BY Created DESC LIMIT <eval <ctag0.dialog_index>-1>, <eval <ctag0.dialog_index>+6>;
    local.x 80
    for 0 <eval <db.row.numrows>-1>
        button 70 <dlocal.x> 2511 2510 1 0 <eval <db.row.<dlocal._for>.ID>+100>
        //dtext 100 <dlocal.x> 65 ID: <db.row.<dlocal._for>.ID> NAME: <db.row.<dlocal._for>.Area_Name>
        dtext 100 <dlocal.x> 65 <db.row.<dlocal._for>.Area_Name>
        local.x +=20
    endfor


button 100 250 4014 4015 1 0 8 //back
//if (<eval <db.row.numrows>> >= <eval <ctag0.dialog_index>+6>)
//if (<eval <db.row.numrows>+1> > <eval <ctag0.dialog_index>+6>)
    button 150 250 4005 4006 1 0 9 //next
//endif
db.close


RESIZEPIC 415 20 9270 200 150
button 430 40 55 56 1 0 1
dtext 450 40 65 Add New Region

button 100 300 2511 2510 1 0 0
dtext 130 300 15 EXIT

page 2
NOCLOSE
RESIZEPIC 25 20 9270 394 372
dhtmlgump 65 50 220 20 0 0 <def.center><def.h4><def.bfont_size5><def.bfont_white>Custom Regions


button 100 80 2511 2510 1 0 2
dtext 130 80 65 TOP POINT
if (strmatch("<ctag0.area_ustnokta>","0"))
    dtext 250 80 25 NaN
else
    dtext 250 80 25 <ctag0.area_ustnokta>
endif

button 100 110 2511 2510 1 0 3
dtext 130 110 65 BOTTOM POINT
if (strmatch("<ctag0.area_altnokta>","0"))
    dtext 250 110 25 Nan
else
    dtext 250 110 25 <ctag0.area_altnokta>
endif


button 100 140 2511 2510 1 0 4
dtext 130 140 65 MIDDLE P (GOP)
if (strmatch("<ctag0.area_go_p>","0"))
    dtext 250 140 25 NaN
else
    dtext 250 140 25 <ctag0.area_go_p>
endif


button 100 170 2511 2510 1 0 5
dtext 130 170 65 Name (DONT SKIP)
if (strmatch("<ctag0.area_name>","0"))
    dtextentrylimited 300 170 196 17 0481 0 30 CLICK HERE
else
    dtextentrylimited 300 170 196 17 0481 0 30 <ctag0.area_name>
endif

if (strmatch("<ctag0.area_index>","0"))
    button 100 270 4023 4024 1 0 6
    dtext 130 270 05 NEW REGION
else
    button 100 270 4023 4024 1 0 7
    dtext 130 270 05 CHANGE REGION
    button 200 350 4017 4018 1 0 10
    dtext 230 350 66 CLEAR FROM DB
endif

button 100 300 4029 4030 1 0 0
dtext 130 300 15 EXIT WITHOUTH SAVE


if (strmatch("<account.name>","kell")) && !(strmatch("<ctag0.area_index>","0"))
    RESIZEPIC 415 20 9270 200 150

    //check coords
    button 70 80 1209 1210 1 0 11
    button 70 110 1209 1210 1 0 12
    button 70 140 1209 1210 1 0 13

    button 430 40 55 56 1 0 14
    dtext 450 40 65 Generate Script

endif

[dialog d_areaconfig button]
on= 100 99999
local.argn <eval <argn1>-100>
ctag0.area_index <eval <dlocal.argn>>
db.close
db.connect
    db.query "SELECT * FROM area_config WHERE ID = <ctag0.area_index>;"
    if (<db.row.numrows> > 0)
        ctag0.area_ustnokta <db.row.0.Area_UST>
        ctag0.area_altnokta <db.row.0.Area_ALT>
        ctag0.Area_Name <db.row.0.Area_Name>
        ctag0.area_go_p <db.row.0.Area_Go_P>
    endif
db.close
//say ID: <local.argn> 
sdialog d_areaconfig 2

on=1
ctag0.area_index 0
sdialog d_areaconfig 2

On=2
message @25 TOP POINT SAVED
ctag0.area_ustnokta <p.x>,<p.y>
sdialog d_areaconfig 2

on=3
message @15 BOTTOM POINT SAVED
ctag0.area_altnokta <p.x>,<p.y>
sdialog d_areaconfig 2

on=4
message @5 MIDDLE POINT SAVED
ctag0.area_go_p <p.x>,<p.y>
sdialog d_areaconfig 2

on=5
if (strmatch("<argtxt[0]>","0"))
    MESSAGE @55 PLS DONT SKIP NAME PART
else
    message @5 NAME SAVED
    ctag0.area_name <argtxt[0]>
    sdialog d_areaconfig 2
    sdialog d_areaconfig
endif

on=6
if !(strmatch("<ctag0.area_name>","0")) && !(strmatch("<ctag0.area_ustnokta>","0")) && !(strmatch("<ctag0.area_altnokta>","0")) && !(strmatch("<ctag0.area_go_p>","0"))

db.close
db.connect
    db.query INSERT INTO area_config(Area_UST, Area_ALT, Area_Name, Area_Go_P, Created) VALUES("<ctag0.area_ustnokta>", "<ctag0.area_altnokta>", "<ctag0.area_name>", "<ctag0.area_go_p>", CURRENT_TIMESTAMP);
    MESSAGE @15 OK
    customareaset
db.close
else
    MESSAGE @25 DONT SKIP ANY PART WITHOUTH CHANGE!
    sdialog d_areaconfig 2
endif


on=7
if !(strmatch("<ctag0.area_name>","0")) && !(strmatch("<ctag0.area_ustnokta>","0")) && !(strmatch("<ctag0.area_altnokta>","0")) && !(strmatch("<ctag0.area_go_p>","0"))
db.close
db.connect
    db.query UPDATE area_config SET Area_UST = '<ctag0.area_ustnokta>', Area_ALT = '<ctag0.area_altnokta>', Area_Name = '<ctag0.area_name>', Area_Go_P = '<ctag0.area_go_p>' WHERE ID = <ctag0.area_index>;
    customareaset
db.close
endif

on=8
ctag0.dialog_index -=7
if <ctag0.dialog_index> < 1
    ctag0.dialog_index 1
endif
sdialog d_areaconfig


on=9
ctag0.dialog_index +=7
sdialog d_areaconfig

on=10
db.close
db.connect
    if !(strmatch("<ctag0.area_index>","0"))
        db.query DELETE FROM area_config WHERE ID = <ctag0.area_index>;
        MESSAGE @66 SILINDI

    endif
db.close

on=11 13
db.close
db.connect
    db.query "SELECT * FROM area_config WHERE ID = <ctag0.area_index>;"
    if <argn1> == 11
        go <db.row.0.Area_UST>
    elseif <argn1> == 12
        go <db.row.0.Area_ALT>
    else
        go <db.row.0.Area_Go_P>
    endif
    sdialog d_areaconfig 2
db.close

on=14
db.close
db.connect
    db.query "SELECT * FROM area_config WHERE ID = <ctag0.area_index>;"
    local.topen <def.Area_Script_Path>
    local.customareaname <db.row.0.Area_Name>
    local.customareagroup <db.row.0.Area_Name>
    local.customareap <db.row.0.Area_Go_P>
    local.customarearect <db.row.0.Area_UST>,<db.row.0.ALT>,0

    file.mode.append = 1
    if <file.open <local.topen>>
        file.writeline " "
        file.writeline " "
        file.writeline " "
        file.writeline " "
        file.writeline "[AREADEF <local.customareaname>]"
        file.writeline "EVENTS=r_default"
        file.writeline "NAME=<local.customareaname>"
        file.writeline "FLAGS=region_flag_nobuilding|region_flag_nomining"
        file.writeline "GROUP=<local.customareaname>"
        file.writeline "P=<local.customareap>"
        file.writeline "RECT=<local.customarearect>"
        file.writeline " "
        file.close
    endif
    db.query DELETE FROM area_config WHERE ID = <ctag0.area_index>;
db.close
message @55 SCRIPT WRITTEN AT THE FILE: <def.Area_Script_Path> & CLEARED FROM DB

 

 

 

 

 



Bu konu Lucretius tarafından düzenlendi(2024-02-10 03:12, 2 ay önce)

Bunun doğrusu region değil miydi yahu? Area mı olmuş sahiden adı? 

Eline sağlık KeLL daha çok script paylaşımı bekliyoruz :)

Novice
12.5

Güzel olmuş eline sağlık :)

Üye Ol veya Giriş Yap

Bu forum başlığına mesaj atmak istiyorsanız hemen üye olun veya giriş yapın.