Slm

Ben söyle bir sistem yaptım oyuncuların uidlerini ve bankbox uidlerini mysql ile kaydettirdim.

Birde dialog yaptım o dialogda oyuncuların uidleri ve karşılarında bankbox uidleri var.

Ben onların karşısına button koydum ve buttona basıldığı zaman bankalarının açılmasını istiyorum.

Buttona bastığımız zaman bankalarının açılma işleminide yaptım fakat tek bir sorun kaldı oda şudur : Allshow aktif olması gerekiyor. Ben bu işlemi allshow kapalıyken nasıl yaptırabilirim.
allshow ile ne ilgisi var bunun sen bankaları nasıl açtırıyorsun kodunu göster bakayım..
gm=1 ise allshowa gerek olmaması lazım kasayı açması için. Scripti koyarsan bakalım.
try uid.<playeruid>.<findlayer(layer_bankbox)>.open

olarak dene.
@G-Defender

Dediğimi anlamadınız galiba... src veya try ikisi ilede ben denedim. Bakın sizde deneyin demek istediğimi göreceksiniz.

En basit bir örnek;

[function oyeh]
try uid.04649.findlayer(layer_bankbox).open

04649 --- Bu playeruid ( bankasını açmak istediğim.) bu oyuncu offline olsun.

Şimdi staff charınızla girip .oyeh yazın ve sağda şu yazıyı göreceksiniz. "he has 6 stones in his bank box" yani bankada yer alan item sayısını gösteriyor.

Aynı şeyi birde allshow açıp deneyin ve bankasının açıldığını göreceksiniz.

Benim yapmak istediğim şey allshow yazmadan bankasını açtırmak umarım anlatabilmişimdir.

@Michaell

Aslında staff char ile değil player char ile açtırmak istiyorum.
Gerçi staff ilede gm=1 ve allshow kapalı iken açmıyor ...

allplayerchars offline online demeden açıyor. Fakat bu functionu uide göre düzenleyemedim.
Yani allplayerchars <playeruid>.findlayer(layer_bankbox).open şeklinde sadece o uide ait playerin bankasını açtıramadım.
Şuan online playerlarınkini açıyor ama offline playerlarınkini açmıyor öyle mi ? Bir de tam olarak ne istedin anlayamadım bir player başka bir playerin bankasını neden açsın. Olayı biraz daha detaylı anlatırsan fikir sunabilirim.
[function olartık] 
src.sdialog d_charlist

[dialog d_charlist]
230,130
PAGE 0
resizepic 0 75 8500 200 230
resizepic 10 85 3000 180 210
dtext 40 90 90 Karakteri Seciniz.
for 0 <eval <account.chars>-1>
dtext 65 <eval (<dlocal._for>*30)+125> 0481 <account.char.<dlocal._for>.name>
endfor
for 1 <account.chars>
button 30 <eval (<dlocal._for>*30)+95> 4006 4007 1 0 <dlocal._for>
endfor

[dialog d_charlist button]
on=1 5
if (<src.account.char.<eval <argn>-1>.uid> == <src.uid>)
src.findlayer(layer_bankbox).open
return 1
endif

try ctag.<src.account.name><eval <argn>-1> <src.account.char.<eval <argn>-1>.uid>
src.albeni <eval <argn>-1>

 


// char ve char uid<src.account.name> <src.account.char.<eval <argn>-1>.uid>
// banka uidi 040005ffd


[function albeni]
sysmessage <uid.<ctag.<account.name><argn>>.findlayer.29.uid>
src.uid.<uid.<ctag.<account.name><argn>>.findlayer.29.uid>.open

Misal aynı accountta ki charları listelettim. O buttonlara basarak o charların banklarını açtırmaya çalışıyorum... Yapmak istediğim işlem bu, item aktarmak yerine bankasını açtırcam
Novice
12.5
bir chara sabit bir ctag verirsek daha az kafa karmaşından kurtulmuş oluruz.

ctag.bankauid <src.account.char.<eval <argn>-1>.uid>
try uid.<ctag.bankauid>.bankself

böyle bir dener misin ?

ctag bildiğim kadarıyla chara kaydedilir yeniden banka açtırmak istediğinde ctag'ı sıfırlayarak sorun yaşamazsın.
Master
59.2997
ref kullanın. tag'e mag'e gerek yok. bankanın hangi şartlarda göründüğünü vs hatırlamıyorum fakat karmaşık yol istersen açmaya çalıştığında bankanın bir kopyasını t_eq_script tipinde karakterin üzerine verip onu gösterebilirsin. en sonunda işte çantayla işi bittiğinde tekrardan diğer karakterin çantasının içindekileri bununla değiştirebilirsin.

eşyanın birebir kopyasını istiyorsan newdupe kullan.
[function olartik] 
src.sdialog d_charlist

[dialog d_charlist]
230,130
PAGE 0
resizepic 0 75 8500 200 230
resizepic 10 85 3000 180 210
dtext 40 90 90 Karakteri Seciniz.
for 0 <eval <account.chars>-1>
dtext 65 <eval (<dlocal._for>*30)+125> 0481 <account.char.<dlocal._for>.name>
endfor
for 1 <account.chars>
button 30 <eval (<dlocal._for>*30)+95> 4006 4007 1 0 <dlocal._for>
endfor

[dialog d_charlist button]
on=1 5
if (<src.account.char.<eval <argn>-1>.uid> == <src.uid>)
src.findlayer(layer_bankbox).open
return 1
endif

ctag.bankauid <src.account.char.<eval <argn>-1>.uid>
try uid.<ctag.bankauid>.bankself


Bu şekilde yaptım gene sonuç alamadım bu sefer sphereda hatalar veriyor

@Slothere

newdupe ile bire bir kopyasını alsam bankanın bankayı açıp item aktardığım zaman diğer charın bankasını nasıl güncelliycek...

Benim ne yapmak istediğimi anladınız umarım. İtemaktarma işini bankasını açtırıp yapmak istiyorum. Yani adam chardan çık diğer chara gir bankayı aç itemi al olayı olmasın.

direk accountta ki charları listeletip bankalarını açıp düzenleyebilsin ve item aktarımını yapabilsin... sıkıntı bankayı açtıramıyorum
Novice
12.5
ref1 = <src.account.char.<eval <argn>-1>.uid>
forcharlayer 29
try uid.<ref1>.findlayer(layer_bankbox).open
ENDFOR

Gökberk'i kırmayalım ref kullanalım =) Böyle dene "open" olmazsa "bankself" dene =) Bu arada ne hatası aldın yazar mısın ?
Size çok özeniyorum olum, script dersleri alacağım parayla sjldfsdf.
Mortal :
ref1 = <src.account.char.<eval <argn>-1>.uid>
forcharlayer 29
try uid.<ref1>.findlayer(layer_bankbox).open
ENDFOR

Gökberk'i kırmayalım ref kullanalım =) Böyle dene "open" olmazsa "bankself" dene =) Bu arada ne hatası aldın yazar mısın ?

@Mortal

Ne ref1 ler kullanmadım ki, şimdide bu sisteme takıldım kaldım.

Bu şekilde benim dediğim olay geliyor karşımıza sistem çalışıyor fakat bankayı açmıyor. " he has 3 stones in this bank box" şeklinde banka yer alan item sayısını yanda gösteriyor. Ama banka açılmıyor, fakat allshow yazarsak ve tekrar denersek bankasını açıyor...

Ben zaten bu şekilde yapmıştım olmayınca sildim. İlla allshow yazmamız lazım açmak için, o şekilde de benim işime yaramıyor çünkü player allshowu nasıl açacak =)


Mesela allplayerchars findlayer.29.open yazdığımız zaman offline ve online bütün charların bankalarını açıyor... Allshow'a gerek kalmıyor.

Biz bu allplayerchars functionunu sadece char uidi seçtirerek kullanamazmıyız. Düzenlemeyedim o kısmı


[function allplayerchars]
for 0 <eval <serv.accounts>-1>
local.cnum=0
local.acctnum=<local._for>
for <serv.account.<eval <local.acctnum>>.chars>
if (<serv.account.<eval <local.acctnum>>.chars>)
try uid.<serv.account.<eval <local.acctnum>>.char.<eval <local.cnum>>.uid>.<args>
endif
local.cnum += 1
endfor
endfor


Bu konu lokman tarafından düzenlendi(2012-07-10 19:32, 11 yıl önce)
try.uid.<accno>.<charno>.uid.bankself

gm modundayken useitem ı hertürlü kullanabileceğimizi biliyoruz değil mi?
2 sene sonra makinama yeniden sphere kurduttun öncelikle onu söyleyeyim :)

Bankayı açtırmayı başardım.

[function selam]
for 0 <eval <account.chars>-1>
ref1= <account.char.<dlocal._for>.uid>
if !(<ref1> == <src.uid>)
ref2=<ref1.findlayer.29.uid>
ref2.cont <src.findlayer.21.uid>
ref2.type t_container
src.update
src.bankself
ref2.open
ref2.type t_eq_bank_box
ref2.cont <ref1>
src.update
endif
endfor

Bu kodda diğer charın bankayı senin çantana getiriyor ( invis bir şekilde ) ve açıyor. Ve açar açmaz geri eski yerine diğer charın bankası haline getirip diğer chara yolluyor. Bu şekilde bankayı açabiliyosun içindekileri görüyosun falan fakat karakter gm olmadığı için kendi bünyesinde olmayan bir itemi hareket ettiremiyor.

ref2.type t_eq_bank_box
ref2.cont <ref1>

kısmını kaldırdığımızda da bankası açılıyor içindeki itemi oynatabiliyosun içine item atabliyosun. Fakat bu şekilde itemi tekrar eski chara göndermemiş oluyoruz. Orda açıkçası ben de tıkandım. Yani öyle komplike bir sistme kurmak lazım ki, player işi bittiği zaman işim bitti gibi bir buttona basıcak ve o banka tekrar bu 2 satır kodla asıl sahibine dönecek. Bu şekilde oluyor. .selamla komutunu gircek player item takasını yapacak açılan menüde işim bittiye basack ve bankayı eski yerine yollayacak. Player buttona basmazsa yada oyundan düşerse çanta yok olur :D O yüzden @death @logout @gethit vsvs gibi triggerlere bu komutu ekleyip her şart altında bankayı sahibine yollamak gerekir. tabi banka uidini ve banka sahibinin uidini bir taga kaydedip o tag üzerinden işlemlendireceksin yukarıdaki gibi refler üzerinden değil. Vaktim sınırlı olmasa daha komplike bi sistem yazardım ama artık gerisi sana kalmış. Temeli budur devam ettirmek sana kalmış =)



Üye Ol veya Giriş Yap

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