Ben kendim bi tane kafa avcılığı scripti yaptım ama bi menü var onu yapmayı bilmiom anlatayım oyuncu kafaları yatırdımı ona puan verio +1 bu puanları ben bi menüde göstermek istiyorum sadece en yüksek puan yapan ilk 10'u nasıl koyabilirim.Biraz anlatırsanız yapmaya çalışacam.
Adept
4.3
Bu zor bir sistem aslında, daha doğrusu karışık. Script bilgisinden çok algoritma yeteneği istiyor. Ancak forumlarda birkaç örneği bulunuyor. "istatistik", "sıralama" kelimelerini aratırsan, bulabileceğinden eminim.
Birkaç konu buldumda hiç birşey anlamadım :(
Silindi
Novice
3.3
Sıralamayı her zaman güncel tutmak biraz zor.
Örneğin haftalık veya günlük güncelemelerle puanları sıralayabilirsin.
Hem de sistem fazla kasılmaz.

Mesela player olarak willow diye bir server'da oynadığımda herkese bir puan verilirdi.
Ve bu puanlar her gece güncellenip oyun içinde bir board'a aktarılırdı.
Adept
4.3

/////////////////////////////////////////////////////////////////
// Scripter Name: Savadiv [Neran]
// Shard Name: -
//
// This file may be freely edited for personal use, but may not
// be distributed in whole or in part, in any format without
// express written permission from Savadiv.
/////////////////////////////////////////////////////////////////

[DEFNAME istatistik]
stone_pvp // istatistik taşının uid'i

[PLEVEL 7]
f_kaydol
f_istatistik_update
f_kaydolmusmu
f_istatistik_clear

[PLEVEL 1]
istatistik

////////////////////////////////////////////////////////////////
// f_kaydol <args>
// stone_pvp'ye, <args> içerikli yeni bir tag kaydeder.
// Böylelikle yeni oyuncular sıralamaya kaydedilebilir.
////////////////////////////////////////////////////////////////

[FUNCTION f_kaydol]
try uid.<def.stone_pvp>.tag.<eval <tag.toplam> + 1> = <args>
try uid.<def.stone_pvp>.tag.toplam += 1

////////////////////////////////////////////////////////////////
// f_istatistik_update <args>
// Sıralamada yükselen <args>'in yeni yerini bulup, eski 
// yeri ile yeni yeri arasında kalanları aşağıya kaydırır.
// Puanı yükselen <args>'yi yeni yerine kaydeder.
////////////////////////////////////////////////////////////////

[FUNCTION f_istatistik_update]
for 1 <uid.<def.stone_pvp>.tag.toplam>
	IF (<uid.<uid.<def.stone_pvp>.tag.<local._for>>.tag.pvpwin> == <eval <uid.<args>.tag.pvpwin> + 1>) && ((<uid.<uid.<def.stone_pvp>.tag.<eval <local._for> +1>>.tag.pvpwin> != <eval <uid.<args>.tag.pvpwin> + 1>)
		local.new_nr = <eval <local._for> + 1>
	ENDIF
endfor

for 1 <uid.<def.stone_pvp>.tag.toplam>
	IF (<uid.<def.stone_pvp>.tag.<local._for>> == <args>)
		local.old_nr = <eval <local._for>>
	ENDIF
endfor

for <local.old_nr> <local.new_nr>
	IF (<local._for> == <local.new_nr>)
		try uid.<def.stone_pvp>.tag.<eval <local.new_nr>> == <args>
		return 1
	ENDIF
	try uid.<def.stone_pvp>.tag.<eval <local._for>> = <uid.<def.stone_pvp>.tag.<eval <local._for> - 1>>
endfor

try uid.<args>.sysmessage @38 Siralamadaki yeni yeriniz: <eval <local.new_nr>>

////////////////////////////////////////////////////////////////
// f_kaydolmusmu <args>
// <args>'in kayıtlı olup olmadığına bakar. Kayıtlıysa 0,
// değilse 1 döndürür. Script içersinde örnek kullanım:
//
// Biri PVP'ye katılırken;
//
// IF (<f_kaydolmusmu <uid>>)
// 	f_kaydol <uid>
// ENDIF
//
// uid -> PVP'ye katılan kişi.
////////////////////////////////////////////////////////////////

[FUNCTION f_kaydolmusmu]
for 1 <uid.<stone_pvp>.tag.toplam>
	IF (<uid.<def.stone_pvp>.tag.<local._for>> == <args>)
		return 0
	ELSE
		return 1
	ENDIF
endfor

////////////////////////////////////////////////////////////////
// f_istatistik_clear
// Bütün puanları sıfırlar.
////////////////////////////////////////////////////////////////

[FUNCTION f_istatistik_clear]
for 1 <uid.<def.stone_pvp>.tag.toplam>
	try uid.<uid.<def.stone_pvp>.tag.<eval <local._for>>>.tag.pvpwin = 0
endfor
serv.allclients sysmessage @38 Butun pvp puanlari sifirlanmistir!

////////////////////////////////////////////////////////////////
// istatistik
// Oyuncuya sıralamadaki sırasını bildirir.
////////////////////////////////////////////////////////////////

[FUNCTION istatistik]
for 1 <uid.<stone_pvp>.tag.toplam>
	IF (<uid.<def.stone_pvp>.tag.<local._for>> == <uid>)
		sysmessage @38 Siralamada <eval <local._for>>. siradasiniz.
	ELSE
		sysmessage @38 Siralamada yer almiyorsunuz.
	ENDIF
endfor

Bir ara biri için yazmış, elimde tutuyordum. Hiç test etmedim, çalışıyor mu bilmiyorum. Deneyip rapor verin, sorun varsa düzeltelim.

Sistem, PVP Puanlarını sıralamak için. Düello yapan herkes taşa kaydediliyor ve bu şekilde sıralanıyor. Menü eklenebilir...

Not: Sistemin tek görevi belli bir puanın istatistiğini yapmak. Üstteki scriptte bu puan tag.pvpwin. Sistemin çalışması için bazı ekleri siz yapmanız gerekiyor; pvp taşına kaydetmek, puanları vermek, vs.
Silindi
Adept
4.3
Sanırım arkadaşın tam olarak istediği;
Player öldürdüğünde yada öldüğünde bir puan kazanıp,kaybedecek ve
(en önemlisi) bu puanlar bir board ekranında 1'den 10'a kadar sıralanmış bir biçimde yansıyacak.
Yani her dclick'te taş puanları güncelleyecek ve çoktan aza doğru bir tabloda gösterecek.

Çok kasar be hocam sistemi.
Hemde mümkün mü bilmiyorum.
bence mümkün çünkü revoda bir sıralar en çok kill sayısı olan katillerin sıralaması wardı top 20 katil diyemi ne eger kill sayısı warsa buda olur herhalde ama ben daha 0dan script yazmaya kalkatıgımda elime yüzüme bulaştırdıgım için ben yapamam :D
çalıştıramadım.
[defname murder_board_system]
m_refresh_rate 120 //Max. zaman (saniye)

[plevel 5]
wipe_murder_stats

[itemdef i_murderer_board]
id i_bulletin_board
name Most Wanted Board
type t_script
weight 255

on @create
attr attr_move_never
timer=<eval <def.m_refresh_rate>>

on @dclick
timer=<eval <def.m_refresh_rate>>
serv.allclients update_b_murder
sdialog d_top_murder_board
return 1

on @timer
serv.allclients update_b_murder
timer=<eval <def.m_refresh_rate>>
return 1

[function wipe_murder_stats]
for 1 10
var.murderer<dlocal._for>.uid=
var.murderer<dlocal._for>.name=
var.murderer<dlocal._for>.kills=
endfor

[function update_b_murder]
for 1 10
if (<uid.<var0.murderer<dlocal._for>.uid>.kills> == 0)
var.murderer<dlocal._for>.uid=
var.murderer<dlocal._for>.name=
var.murderer<dlocal._for>.kills=
endif
endfor
for 1 10
if (<kills> >= <var0.murderer<dlocal._for>.kills>)
local.murderer<dlocal._for>.uid=<var0.murderer<dlocal._for>.uid>
var.murderer<dlocal._for>.name=<name>
var.murderer<dlocal._for>.kills=<kills>
var.murderer<dlocal._for>.uid=<uid>
if (<local.murderer<dlocal._for>.uid> =! <uid>)
try uid.<local.murderer<dlocal._for>.uid>.update_b_murder
endif
return 0
endif
endfor

[dialog d_top_murder_board]
0, 0
page 0
resizepic 120 86 2600 348 387
gumppic 71 21 10440
gumppic 437 21 10441
gumppic 207 69 10452
dtext 256 84 1053 Most Wanted
dtext 205 139 050 <serv.name>'s Top 10 Murderers
dtext 159 179 1153 1. <var0.murderer1.name>
dtext 355 179 38 Kills : <eval <var0.murderer1.kills>>
for 2 10
if (<var0.murderer<dlocal._for>.uid> > 0)
dtext 155 204 1153 <dlocal._for>. <var0.murderer<dlocal._for>.name>
dtext 355 204 38 Kills : <eval <var0.murderer<dlocal._for>.kills>>
endif
endfor

[eof]

İşte benim aramada bulduğum bu,ama bunu deniyorum şuanda ve 46. satır hata veriyor consol'da;

46.satır :


local.murderer<dlocal._for>.uid=<var0.murderer<dlocal._for>.uid>

https://www.ultima-strike.com/
Adept
4.3
try koy başına.
1 hata daha )=

Killi yükseltince 1. sıraya geçiyor;



Ama killi düşünce mesela 3. sıraya düştün mesela;


bu oluyor :) Yani 3. sıraya düştüğünde, 2. sıradakinin üstüne geliyor.
tavsiyem oturup kendiniz yazın.. gerçekten ne kadar kolay birşey olduğunu denemeden anlıyamazsınız..
fakat yazmaya başlamadan önce tavsiyem sistemi kafanızda oluşturun hatta elinize bir kağıt kalem alıp öyle tasarlayın.. çünkü gerçekten çok karışık ama mantığını anladıktan sonra çok basit bir sistem.
Nixdorf bir yazda görelim yaw? 2 gün önce yardım isteyen adam şimdi scripterlık taslıyor burda ya.
Adept
4.3
Beyler, laf atmadan yaşayamıyor musunuz? Adam normal bir şey demiş, neden hemen laf atma gereği duyuyorsun? Rica ediyorum...
:uhoh problem yok neran.

ragnar yardım istediğim tek bir post gösterebilirmisin bana?



Üye Ol veya Giriş Yap

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