Sxb Portal
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Создание гильдхауса
AdminДата: Воскресенье, 02.03.2008, 01:05 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 79
Статус: Offline
Создание ГИЛЬДХАУСОВ!
Для начала надо расставить коробки домов, это я думаю понятно как сделать.
У меня стоит 18 ГХ, вокруг каждой столицы по 3 штуки. Чтобы заполучить в своё владение гилдхаус гилд мастер должен выполнить квест у начальника этого дома, в котором надо принести этому самому начальнику одну вещь, которая продаётся в ху**о кукуе*о у специального вендора и стоит 5к голда.

Реализация

Чтобы намутить ГХ надо написать скрипт квеста:
#--------------------------------------------------------
namespace eval a_Man1 {
#--------------------------------------------------------
proc GossipHello { npc player } {

SendGossipComplete $player
SendSwitchGossip $player $npc 0
}
#--------------------------------------------------------
proc QueryQuest { npc player questid } {
}
#--------------------------------------------------------
proc QuestStatus { npc player } {
set reply 0

set fnameGhouse "scripts/guild_houses/10.log"
set fpGhouse [open "$fnameGhouse" r]
seek $fpGhouse 0 start
set dataGhouse [read -nonewline $fpGhouse]
close $fpGhouse
set linesGhouse [ split $dataGhouse \n ]
set numGhouse 0
set randlineGhouse [lindex $linesGhouse $numGhouse]
set provGhouse [string match $randlineGhouse "0"]

set pname [GetName $player]

set fname "saves/players.save"
set fp [open "$fname" r]
seek $fp 0 start
set data [read -nonewline $fp]
close $fp
set lines [ split $data \n ]
set numlines [llength $lines]
set num 0
set randline [lindex $lines $num]
set name "NAME=$pname"
while { $num <= $numlines } {
set prov [string match $name $randline];
if { [expr $prov == 1] } {break} else {
set num [expr "$num + 1"];
set randline [lindex $lines $num] }
}

Всё.

 
AdminДата: Воскресенье, 02.03.2008, 01:06 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 79
Статус: Offline
[color=red][size=12]set numbig [expr $num+10]

while { $num <= $numbig } {
set guistr [string range $randline 0 5]
set prov [string match "GUILD=" $guistr];
if { [expr $prov == 1] } {break} else {
set num [expr "$num + 1"];
set randline [lindex $lines $num] }
}

set randline [lindex $lines $num]
set str [string length $randline]
set lastnum [string range $randline [expr $str-2] [expr $str-1]]
set prov2 [string match $lastnum " 0"]
set qs666010 [GetQuestStatus $player 666010]
set qs666011 [GetQuestStatus $player 666011]
set qs666012 [GetQuestStatus $player 666012]
set qs666013 [GetQuestStatus $player 666013]
set qs666014 [GetQuestStatus $player 666014]
set qs666015 [GetQuestStatus $player 666015]
set qs666016 [GetQuestStatus $player 666016]
set qs666017 [GetQuestStatus $player 666017]
set qs666018 [GetQuestStatus $player 666018]
set playerLevel [GetLevel $player]
if { ( ( $qs666010 == 4 ) && ( [GetQFlag $player Q666010] == 0 ) && ( $qs666011 != 3 ) && ( $qs666012 != 3 ) && ( $qs666013 != 3 ) && ( $qs666014 != 3 ) && ( $qs666015 != 3 ) && ( $qs666016 != 3 ) && ( $qs666017 != 3 ) && ( $qs666018 != 3 ) ) } {
if { ($prov2 == 1) && ($provGhouse == 1 ) } { if { $playerLevel <= 70 } { set reply 4 } else { set reply 2 } } else { set reply 1 } }
if { ( $qs666010 == 3 ) && ( [GetQFlag $player Q666010] == 0 ) } { set reply 3 }
set qs666010 [GetQuestStatus $player 666010]
if { ( ( $qs666010 == 1 ) && ( [GetQFlag $player Q666010] == 0 ) ) } {
set reply 5
NpcPOI $player $npc 1
}
return $reply
}
#--------------------------------------------------------
proc QuestHello { npc player } {
Emote $npc $player 113
set qs666010 [GetQuestStatus $player 666010]
set q666010 ""
set playerLevel [GetLevel $player]
if { ( ( $qs666010 == 4 ) && ( [GetQFlag $player Q666010] == 0 ) && ( $playerLevel >= 3 ) ) } { set q666010 666010 }
set qs666010 [GetQuestStatus $player 666010]
if { ( ( $qs666010 == 1 ) && ( [GetQFlag $player Q666010] == 0 ) ) } {
SendQuestReward $player $npc 666010 "" ""
return
}
if { ((( $qs666010 == 3 ) && ( [GetQFlag $player Q666010] == 0 )) || [GetQFlag $player Q666010] == 1 ) } {
Say $npc 0 "You already have a task for me!"
Emote $npc $player 5
} else {
SendQuestsList $player $npc $q666010
}
}
#--------------------------------------------------------
proc QuestSelect { npc player questid } {
if { ( [GetQuestStatus $player $questid] == 1 ) } {
ClearQFlag $player tmpq
SendQuestReward $player $npc $questid
} else {
SendQuestDetails $player $npc $questid
}
}
#--------------------------------------------------------
proc QuestAccept { npc player questid } {

set fnameGhouse "scripts/guild_houses/10.log"
set pname [GetName $player]

set fpGhouse [open "$fnameGhouse" r+]
seek $fpGhouse 0 start
set dataGhouse [read -nonewline $fpGhouse]
set linesGhouse [ split $dataGhouse \n ]
set line_to_insert $pname
set where_to_insert 0
set linesGhouse [lreplace $linesGhouse 0 0 $pname]
set fpGhouse [open $fnameGhouse a]
seek $fpGhouse 0 start
puts $fpGhouse $linesGhouse
close $fpGhouse

}
#--------------------------------------------------------
proc QuestChooseReward { npc player questid choose } {
if { $questid == 666010 } { AddReputation $player $npc 48 }
SetQFlag $player "Q$questid"
NpcPOI $player $npc 0

set pname [GetName $player]
set fname "saves/players.save"
set fp [open "$fname" r]
seek $fp 0 start
set data [read -nonewline $fp]
close $fp
set lines [ split $data \n ]
set numlines [llength $lines]
set num 0
set randline [lindex $lines $num]
set name "NAME=$pname"
while { $num <= $numlines } {
set prov [string match $name $randline];
if { [expr $prov == 1] } {break} else {
set num [expr "$num + 1"];
set randline [lindex $lines $num] }
}

 
AdminДата: Воскресенье, 02.03.2008, 01:07 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 79
Статус: Offline
set numbig [expr $num+10]
while { $num <= $numbig } {
set guistr [string range $randline 0 5]
set prov [string match "GUILD=" $guistr];
if { [expr $prov == 1] } {break} else {
set num [expr "$num + 1"];
set randline [lindex $lines $num] }
}
set randline [lindex $lines $num]
set str [string length $randline]

set GuildID [string range $randline 6 [expr $str-3]]

set fname "saves/guilds.save"
set fp [open "$fname" r]
seek $fp 0 start
set data [read -nonewline $fp]
close $fp
set lines [ split $data \n ]

set numlines [llength $lines]
set num 0
set randline [lindex $lines $num]
set pname $GuildID
set name "ID=$pname"

while { $num <= $numlines } {
set prov [string match $name $randline];
if { [expr $prov == 1] } {break} else {
set num [expr "$num + 1"];
set randline [lindex $lines $num] }
}

set num [expr "$num+1"]
set randline [lindex $lines $num]

set str [string length $randline]

set Guildname [string range $randline 5 $str]

set fnameGhouse "scripts/guild_houses/10.log"
set fpGhouse [open "$fnameGhouse" r+]
seek $fpGhouse 0 start
set dataGhouse [read -nonewline $fpGhouse]
#close $fpGhouse

set linesGhouse [ split $dataGhouse \n ]
set linesGhouse [linsert $dataGhouse end $GuildID "$Guildname"]

set fpGhouse [open $fnameGhouse w]
seek $fpGhouse 0 start
puts $fpGhouse $linesGhouse
close $fpGhouse

}[/size][/color]

 
AdminДата: Воскресенье, 02.03.2008, 01:08 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 79
Статус: Offline
}
}

}
if {( $option==1 )} {
SendGossipComplete $player
Say $npc 0 "Realy??"
Emote $npc 11
}
return
}

}
#--------------------------------------------------------
proc Teleport10::QueryQuest { npc player questid } {
}
#--------------------------------------------------------
proc Teleport10::QuestStatus { npc player } {
set reply 7
return $reply
}
#--------------------------------------------------------
proc Teleport10::QuestHello { npc player } {
ClearQFlag $player war1
ClearQFlag $player war2
ClearQFlag $player war3
ClearQFlag $player war4
SendGossip $player $npc { npctext 66603 } \
{ text 0 "Hi, i want speak" }
Emote $npc 66
}
#--------------------------------------------------------
proc Teleport10::QuestSelect { npc player questid } {
}
#--------------------------------------------------------
proc Teleport10::QuestAccept { npc player questid } {
}
#--------------------------------------------------------
proc Teleport10::QuestChooseReward { npc player questid choose } {
}

Если разбирались в предыдущем скрипте, то без труда поймёте как действует и этот.
Этот скрипт не только телепортирует. Кстати телепортирует он вас только если у вас есть камушек гилд хауса, который вам любезно предоставит гилд мастер после прохождения квеста. Также этот скрипт позволяет ещё отказываться от гилд хауса, типа продовать, вы выбираете соответствующий пункт диалога и если этот ГХ куплен уже, то вам вернётся квестовый предмет, который вы можете продать, если же гилд хаус только забит вами, то Телепортер сбросит лог файл и вы соответственно ничего не получите.

Уффф, вроде всё, единственный минус это то, что если вы взяли квест, а затем отказались от него, вам надо обязательно сбросить ГХ, поговорив с телепортером, иначе никто другой больше этот ГХ не сможет купить.

Ах да, в скрипте телепортера надо вписать координаты куда телепортировать, узнать их можно командой .where посреди конференц зала.

Теперь вроде точно всё, полёт мысли неограничен. Я кстати уже поставил в конф залы стриптизёрш, спасибо вам за скрипты.

Пример квеста:
[quest 666010]
name=Guildhouse of Holy Light
desc=I welcome you the wanderer, I see, you liked my house.$B$If you want, buy it. For this purpose you should find my old friend Ferocius.
Now it likely walks in the favourite place.$B$Go in Thousand Needles and find it there. Most likely it walks near to the destroyed ship. Buy from it Thicket this house and bring to me.quest_flags=020
levels=3 5
reward_xp=5
deliver=6660010 1
reward_item=666010 500
zone=220

 
AdminДата: Воскресенье, 02.03.2008, 01:09 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 79
Статус: Offline
}

Как видно это скрипт квеста гилдхауса стоящего рядом со Стормвиндом(не спрашивайте почему=)).
Здесь в proc QuestStatus мы смотрим, является ли плаер гилдмастером, не взят ли ещё какой нибудь квест на гилдхаус(у меня эти квесты носят номера 666001...666009 за орду и 666010...666018 за альянс) и не забит ли дом какой нибудь другой гилдой. Дело в том, что при нажатии кнопки Accept Quest в лог файл данного гилдхауса, в нашем случае 10.log, пишется имя плаера, на которого этот дом забит, но об этом позднее...
Итак, если вы гилдмастер, не взяли аналогичный квест и дом не забит никем(если дом не забит то в лог файле стоит 0) то вы видите над головой хозяина дома жёлтый (!). Вы подбежали и берёте квест, после нажатия кнопки Accept(смотри процедуру proc QuestAccept) в лог файл данного ГХ пишется ваше имя. Когда вы купили квестовую вещь за кровные 5к голд и отнесли её хозяину дома происходит следующеесмотри proc QuestChooseReward) в лог файл ГХ записывается ваше имя, айди гильдии и имя гильдии, всё по порядку. А также происходит выдача реварды, указанной в quest.scp(У меня данная реварда это 500 камней гилдхауса, для чего, смотри дальше).
Всё, поздравляю, гилдхаус ваш.

Коробка, в которой стоит начальник ГХ, это только надводная часть айсберга(в прямом смысле=)). Далее ставим где нибудь в ... далеке, можно под водой, другую коробку(тоже 18 штук), баррикадируем выход из неё и уаля, получается навороченый конференц зал, в который можно попасть только телепортом.
Далее пишем скрипт телепортмана, который телепортирует в эту коробку.

# Created by Crash aka After_Fuck
# ###########################################################################

namespace eval Teleport10 {

}
#--------------------------------------------------------
proc Teleport10::GossipHello { npc player } {
SendGossipComplete $player
SendSwitchGossip $player $npc 1
}
#--------------------------------------------------------
proc Teleport10::GossipSelect { npc player option } {
set pname [GetName $player]

if {([GetQFlag $player war1] == 0) && ([GetQFlag $player war2] == 0)} {
if {( $option==0 )} {
SetQFlag $player war1
SendGossip $player $npc { npctext 66601 }\
{ text 0 "Yes, I want to go to Main Hall" } \
{ text 0 "I want sell\cancel a Guildhouse" }
Emote $npc 21
Say $npc 0 "Good Choice my Friend"
}

 
AdminДата: Воскресенье, 02.03.2008, 01:10 | Сообщение # 6
Admin
Группа: Администраторы
Сообщений: 79
Статус: Offline
return
}
#---Menu 1
if {([GetQFlag $player war1] == 1)&&([GetQFlag $player war2] == 0)} {
if {( $option==0 )} {
SetQFlag $player war2
SetQFlag $player war3
SendGossip $player $npc { npctext 66602 }\
{ text 0 "Yes I have insignia" } \
{ text 0 "No Thanks" }
Emote $npc 6
Say $npc 0 ""
}
if {( $option==1 )} {
SendGossipComplete $player
Say $npc 0 "Realy???"
Emote $npc 11
set fnameGhouse "scripts/guild_houses/10.log"
set pname [GetName $player]

set fpGhouse [open "$fnameGhouse" r+]

seek $fpGhouse 0 start

set dataGhouse [read -nonewline $fpGhouse]

close $fpGhouse

set linesGhouse [ split $dataGhouse { } ]
set provpname [lsearch $linesGhouse $pname]

set pname [GetName $player]

set fname "saves/players.save"
set fp [open "$fname" r]
seek $fp 0 start
set data [read -nonewline $fp]
close $fp
set lines [ split $data \n ]
set numlines [llength $lines]
set num 0
set randline [lindex $lines $num]
set name "NAME=$pname"
while { $num <= $numlines } {
set prov [string match $name $randline];
if { [expr $prov == 1] } {break} else {
set num [expr "$num + 1"];
set randline [lindex $lines $num] }
}

set numbig [expr $num+10]

while { $num <= $numbig } {
set guistr [string range $randline 0 5]
set prov [string match "GUILD=" $guistr];
if { [expr $prov == 1] } {break} else {
set num [expr "$num + 1"];
set randline [lindex $lines $num] }
}

set randline [lindex $lines $num]
set str [string length $randline]

set GuildID [string range $randline 6 [expr $str-3]]

set provGuildID [lsearch $linesGhouse $GuildID]

if { [expr $provpname == -1] } {

Say $npc 0 "Sorry,$pname, but you have no attitude to this house"
Emote $npc 11 } else {
if { [expr $provGuildID == -1] } {

Say $npc 0 "Ok, $pname, this Guild House now is empty"
Emote $npc 11

set fnameGhouse "scripts/guild_houses/10.log"
set pname [GetName $player]
set pname Woman
set fpGhouse [open "$fnameGhouse" w]
seek $fpGhouse 0 start
puts $fpGhouse 0
close $fpGhouse } else {
Say $npc 0 "Ok, $pname, this Guild House now is empty. Take your thiket"
Emote $npc 11
AddItem $player 6660010 1
set fnameGhouse "scripts/guild_houses/10.log"
set pname [GetName $player]
set pname Woman
set fpGhouse [open "$fnameGhouse" w]
seek $fpGhouse 0 start
puts $fpGhouse 0
close $fpGhouse } }

}
return
}

if {([GetQFlag $player war1] == 0) && ([GetQFlag $player war2] == 1)} {
if {( $option==0 )} {
SetQFlag $player war1
SetQFlag $player war4
SendGossip $player $npc { npctext 9314 }\
{ text 0 "Yes I'll Pay" } \
{ text 0 "No Thanks" }
Emote $npc 23
Say $npc 0 "You think you're stronger than me ?"
}
if {( $option==1 )} {
SendGossipComplete $player
Say $npc 0 "Afraid ? You Chicken!!!!"
Emote $npc 19
}
return
}

#---Menu 2
if {([GetQFlag $player war1] == 1) && ([GetQFlag $player war2] == 1)} {
if {( $option==0 )} {
set mon [ChangeMoney $player -100]
if {( $mon == 0 )} {
Say $npc 0 "Sorry $pname You haven't got enough money"
SendGossipComplete $player
Emote $npc 14
}
if {( $mon == 1 )} {
if {([GetQFlag $player war3] == 1)} {
if { [ConsumeItem $player 666010 1] == 1 } {
Teleport $player 1 1431.56 -1855.70 135.775
AddItem $player 666010 1 }
Say $npc 0 "You don't have request Insignia"

 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024Хостинг от uCoz
Game's TOP-100 Counter Рейтинг@Mail.ru Rambler's Top100 Эротика и Развлечения