Master of Puppets
|
|
Join Date: May 2004
Location: Sweden
Posts: 5,288
|
|
Events System (Automated hosting included)
I don't think an awful lot of explanation is required, if you got questions, post them. Everything commented with // ** are comments specifically made for this thread, all other comments were there from when I scripted it.
Enjoy! If you like it, don't hesitate to +rep me
Database NPC named "Control-Events" (in my case anyways)
PHP Code:
function onInitialized() onCreated(); function onCreated() { onEndEvent(); // Prizes // ** JUST AN EXAMPLE ** // { "arc", minQuantity, maxQuantity } this.eventPrizes = { { "gold", 10, 100 }, { "aurablade", 1, 1 }, { "combatknife", 1, 1 }, { "phasonblade", 1, 1 } }; // ** HOW EVENTS ARE SETUP ** // Foot Race this.(@"event_Foot Race").level = "event_footrace.nw"; this.(@"event_Foot Race").startx = 8; this.(@"event_Foot Race").starty = 60.5; this.(@"event_Foot Race").eventType = "Race"; // Cave Race this.(@"event_Cave Race").level = "event_caverace.nw"; this.(@"event_Cave Race").startx = 47.5; this.(@"event_Cave Race").starty = 53; this.(@"event_Cave Race").eventType = "Race"; // CLEAN UP (DO NOT REMOVE) temp.stringKeys = getStringKeys("this.event_"); for (temp.string: temp.stringKeys) { if (temp.string in { "_", "_0", "", NULL }) { this.(@"event_" @ temp.string) = ""; } } echo(getStringKeys("this.event_").size() SPC "events found!"); setTimer(5); }
function onTimeOut() { // Is an event still running? if (this.hostedEvent != NULL) { setTimer(60); return; } // Check for ET's on tag for (temp.pl: allplayers) { if (temp.pl.guild == "Events Team") { temp.eventsTeam.add(temp.pl); } } // Events Team member(s) on tag, aborting if (temp.eventsTeam.size() != NULL) { echo("[" @ name @ "]:" SPC temp.eventsTeam.size() SPC "Events Team member(s) online, aborting..."); setTimer(60); return; } // No Events Team member(s) on tag, continuing else { echo("[" @ name @ "]: No Events Team member(s) found, proceeding..."); temp.event = randomString(getStringKeys("this.event_")); temp.prizeInfo = randomString(this.eventPrizes); temp.prize = temp.prizeInfo[0]; temp.quantity = int(random(temp.prizeInfo[1], temp.prizeInfo[2] + 1)); onHostEvent(temp.event, temp.prize, temp.quantity); } setTimer(getEventsTimer()); }
function getEventsTimer() { // Weed out RC's from player count for (temp.pl: allplayers) { if (temp.pl.level.name != NULL) { temp.players.add(temp.pl); } } temp.playerStages = { { 7, 5 }, { 3, 10 }, { 1, 15 } }; for (temp.stage: temp.playerStages) { if (temp.players.size() >= temp.stage[0]) { echo("[" @ name @ "]: More than" SPC temp.stage[0] SPC "players online, setting timer to" SPC temp.stage[1] SPC "minutes."); return temp.stage[1]*60; } } echo("[" @ name @ "]: No players online, setting timer to 20 minutes."); return 20*60; }
public function getEvents() { return getStringKeys("this.event_"); }
function onHostEvent(event, prize, quantity) { if (this.hostedEvent != NULL) { echo("[" @ name @ "] Error: Attempted to overwrite currently hosted event, aborting..."); return; } temp.eventData = new TStaticVar(); temp.eventData.copyFrom(this.(@"event_" @ event)); this.hostedEvent = { event, prize, quantity }; this.eventCalls = 1; serverr.hostedEvent = { event, this.eventCalls, quantity, findNPC("ItemCache").getEntry(prize).itemName, temp.eventData.level, temp.eventData.startx, temp.eventData.starty }; scheduleEvent(20, "onNextCall", ""); }
function onNextCall() { if (this.eventCalls + 1 <= 3) { this.eventCalls ++; serverr.hostedEvent[1] = this.eventCalls; scheduleEvent(20, "onNextCall", ""); } else scheduleEvent(10, "onCloseEvent", ""); }
function onCloseEvent() { temp.event = new TStaticVar(); temp.event.copyFrom(this.(@"event_" @ this.hostedEvent[0])); for (temp.pl: allplayers) { if (temp.pl.level.name == temp.event.level) { temp.players.add(temp.pl); } } if (temp.players.size() == NULL) { echo("[" @ name @ "] Error: Event aborted due to no players attending!"); onEndEvent(); return; } this.eventCalls = NULL; serverr.hostedEvent[1] = -1; // ** USED TO START THE EVENT, IT TRIGGERS "onStartEvent" IN A NPC // ** PLACED IN THE CURRENT EVENTS LEVEL, THAT HAS THIS IN IT: // function onCreated() { // level.startGate = this; // } findLevel(temp.event.level).startGate.trigger("StartEvent", ""); }
public function onEndEvent() { cancelevents("onEndEvent"); temp.event = new TStaticVar(); temp.event.copyFrom(this.(@"event_" @ this.hostedEvent[0])); warpto(temp.event.level, temp.event.startx, temp.event.starty); for (temp.pl: this.level.players) { temp.pl.setLevel2("events_house.nw", 30.5, 30); } sendtorc("/updatelevel" SPC this.level.name); // ** WARPS PLAYERS TO THE EVENTS HOUSE warpto("events_house.nw", 30.5, 30); this.hostedEvent = ""; serverr.hostedEvent = ""; }
|
__________________
"A delayed game is eventually good, but a rushed game is forever bad." - Shigeru Miyamoto
|
Last edited by xXziroXx; 03-25-2009 at 12:05 AM..
|